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

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

Результат:

Язык ан
Язык бн
Язык ар
Язык ун

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

1 Ответ

1 голос
/ 25 мая 2019

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

Например:

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

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


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

...