В частности, я пытаюсь проверить, написана ли данная строка (предложение) на турецком языке.
Я могу проверить, есть ли в строке турецкие символы, такие как Ç, Ş, Ü, Ö, Ğ и т. д. Однако это не очень надежно, поскольку они могут быть преобразованы в C, S, U, O, G до того, как я получу строку.
Другой способ - собрать 100 наиболее часто используемых слов на турецком языке и проверить, есть ли в предложении какие-либо / некоторые из этих слов. Я могу комбинировать эти два метода и использовать балльную систему.
Как вы думаете, какой способ решения моей проблемы на Python является наиболее эффективным?
Связанный вопрос: (человек) Язык документа (Perl, API перевода Google)
@ S.Lott: Я добавил ссылку на вопрос.






Один из вариантов - использовать байесовский классификатор, такой как Преподобный. Домашняя страница Преподобного дает следующее предложение для детектора наивного языка:
from reverend.thomas import Bayes
guesser = Bayes()
guesser.train('french', 'le la les du un une je il elle de en')
guesser.train('german', 'der die das ein eine')
guesser.train('spanish', 'el uno una las de la en')
guesser.train('english', 'the it she he they them are were to')
guesser.guess('they went to el cantina')
guesser.guess('they were flying planes')
guesser.train('english', 'the rain in spain falls mainly on the plain')
guesser.save('my_guesser.bay')
Обучение с более сложными наборами токенов усилит результаты. Для получения дополнительной информации о байесовской классификации, глянь сюда и здесь.
Простой статистический метод, который я использовал раньше:
Получите приличное количество образцов обучающего текста на языке, который вы хотите обнаружить. Разделите его на триграммы, например
«Hello foobar» в триграммах: 'Hel', 'ell', 'llo', 'lo', 'o f', 'fo', 'foo', 'oob', 'oba', 'бар'
Для всех исходных данных подсчитайте частоту появления каждой триграммы, предположительно в слове, где ключ = триграмма, а значение = частота. Вы можете ограничить это 300 наиболее частыми трехбуквенными комбинациями или чем-то еще, если хотите. Заколите диктант где-нибудь.
Чтобы определить, написан ли новый образец текста на том же языке, повторите описанные выше шаги для образца текста. Теперь все, что вам нужно сделать, это вычислить корреляцию между частотами выборки триграмм и частотами обучающих триграмм. Вам нужно немного поиграть с этим, чтобы выбрать пороговую корреляцию, выше которой вы готовы рассматривать ввод как турецкий или нет.
Этот метод показал свою высокую точность, превосходя более сложные методы, см.
Кавнар и Тренкле (1994): "Категоризация текста на основе N-граммов"
Использование триграмм решает проблему использования списков слов, поскольку в любом данном языке существует огромное количество слов, особенно с учетом различных грамматических перестановок. Я пытался найти общие слова, проблема в том, что они часто дают ложное срабатывание для какого-то другого языка или сами имеют много перестановок. Статистический метод не требует много места для хранения и не требует сложного анализа. Кстати, этот метод работает только для языков с фонетической системой письма, он плохо работает, если вообще работает с языками, которые используют идеографический язык (например, китайский, японский, корейский).
В качестве альтернативы в Википедии есть раздел на турецком языке в его удобная диаграмма распознавания языка.
Почему бы просто не использовать существующую библиотеку проверки орфографии? Проверка орфографии для нескольких языков, выберите язык с наименьшим количеством ошибок.
Дубликат: stackoverflow.com/questions/257125/human-language-of-a-docum ent