Как определить доминирующий язык текстового слова?

Это выглядит хорошо для 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

Результат:

Язык en
Язык бн
Язык ар
Язык не

Что я пропустил за "Неизвестный язык"

1 ответ

Решение

Просто потому, что он принадлежит слишком многим языкам, и было бы нереально угадать язык, основанный на одном слове. Контекст всегда помогает.

Например:

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: { $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

Теперь вы можете определить приемлемый порог доверия, чтобы принять этот результат.


Коды языков можно найти здесь

Другие вопросы по тегам