如何检测文本词的主导语言?
How to detect the dominant language of a text word?
string
看起来不错,但 word
不适合我。当用户同时输入任何 3 个字符时,我正在根据我的要求进行搜索,以检查用户输入的是哪种语言。如果我认为它不应该与 detec0t
字一起使用,但我希望它应该与 Islam
字一起使用。
let tagger = NSLinguisticTagger(tagSchemes:[.tokenType, .language, .lexicalClass, .nameType, .lemma], options: 0)
func determineLanguage(for text: String) {
tagger.string = text
let language = tagger.dominantLanguage
print("The language is \(language!)")
}
//Test case
determineLanguage(for: "I love Islam") // en -pass
determineLanguage(for: "আমি ইসলাম ভালোবাসি") // bn -pass
determineLanguage(for: "أنا أحب الإسلام") // ar -pass
determineLanguage(for: "Islam") // und - failed
结果:
The language is en
The language is bn
The language is ar
The language is und
我错过了什么 "Unknown language"
仅仅是因为它属于太多的语言,仅凭一个词来猜测语言是不现实的。上下文总是有帮助的。
例如:
import NaturalLanguage
let recognizer = NLLanguageRecognizer()
recognizer.processString("Islam")
print(recognizer.dominantLanguage!.rawValue) //Force unwrapping for brevity
打印 tr
,代表土耳其语。这是一个有根据的猜测。
如果您想要其他也可用的语言,您可以使用 languageHypotheses(withMaximum:)
:
let hypotheses = recognizer.languageHypotheses(withMaximum: 10)
for (lang, confidence) in hypotheses.sorted(by: { [=11=].value > .value }) {
print(lang.rawValue, confidence)
}
打印
tr 0.2332388460636139 //Turkish
hr 0.1371040642261505 //Croatian
en 0.12280254065990448 //English
pt 0.08051242679357529
de 0.06824589520692825
nl 0.05405258387327194
nb 0.050924140959978104
it 0.037797268480062485
pl 0.03097432479262352
hu 0.0288708433508873
现在您可以定义可接受的置信度阈值以接受该结果。
可以找到语言代码here
string
看起来不错,但 word
不适合我。当用户同时输入任何 3 个字符时,我正在根据我的要求进行搜索,以检查用户输入的是哪种语言。如果我认为它不应该与 detec0t
字一起使用,但我希望它应该与 Islam
字一起使用。
let tagger = NSLinguisticTagger(tagSchemes:[.tokenType, .language, .lexicalClass, .nameType, .lemma], options: 0)
func determineLanguage(for text: String) {
tagger.string = text
let language = tagger.dominantLanguage
print("The language is \(language!)")
}
//Test case
determineLanguage(for: "I love Islam") // en -pass
determineLanguage(for: "আমি ইসলাম ভালোবাসি") // bn -pass
determineLanguage(for: "أنا أحب الإسلام") // ar -pass
determineLanguage(for: "Islam") // und - failed
结果:
The language is en
The language is bn
The language is ar
The language is und
我错过了什么 "Unknown language"
仅仅是因为它属于太多的语言,仅凭一个词来猜测语言是不现实的。上下文总是有帮助的。
例如:
import NaturalLanguage
let recognizer = NLLanguageRecognizer()
recognizer.processString("Islam")
print(recognizer.dominantLanguage!.rawValue) //Force unwrapping for brevity
打印 tr
,代表土耳其语。这是一个有根据的猜测。
如果您想要其他也可用的语言,您可以使用 languageHypotheses(withMaximum:)
:
let hypotheses = recognizer.languageHypotheses(withMaximum: 10)
for (lang, confidence) in hypotheses.sorted(by: { [=11=].value > .value }) {
print(lang.rawValue, confidence)
}
打印
tr 0.2332388460636139 //Turkish hr 0.1371040642261505 //Croatian en 0.12280254065990448 //English pt 0.08051242679357529 de 0.06824589520692825 nl 0.05405258387327194 nb 0.050924140959978104 it 0.037797268480062485 pl 0.03097432479262352 hu 0.0288708433508873
现在您可以定义可接受的置信度阈值以接受该结果。
可以找到语言代码here