Как определить доминирующий язык текстового слова?
Это выглядит хорошо для 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
Теперь вы можете определить приемлемый порог доверия, чтобы принять этот результат.
Коды языков можно найти здесь