0

它看起来不错,string但它不适用于word. 当用户输入任何 3 个字符同时查看用户输入的语言时,我正在根据我的要求使用搜索。如果我认为它不应该与detec0tword 一起使用,但我希望它应该与Islamword 一起使用。

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

结果:

语言是 en
语言是 bn
语言是 ar
语言是 und

我错过了“未知语言”

4

1 回答 1

1

仅仅因为它属于太多的语言,仅凭一个词来猜测语言是不现实的。上下文总是有帮助的。

例如 :

import NaturalLanguage

let recognizer = NLLanguageRecognizer()
recognizer.processString("Islam")
print(recognizer.dominantLanguage!.rawValue)  //Force unwrapping for brevity

prints tr,代表土耳其语。这是一个有根据的猜测。

如果您想要其他可能的语言,您可以使用languageHypotheses(withMaximum:)

let hypotheses = recognizer.languageHypotheses(withMaximum: 10)

for (lang, confidence) in hypotheses.sorted(by: { $0.value > $1.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

现在,您可以定义一个可接受的置信阈值以接受该结果。


语言代码可以在这里找到

于 2019-05-25T01:54:15.893 回答