Лучший способ вернуть язык данной строки - PullRequest
7 голосов
/ 21 декабря 2008

Более конкретно, я пытаюсь проверить, если данная строка (предложение) на турецком языке.

Я могу проверить, есть ли в строке турецкие символы, такие как Ç, Ş, Ü, Ö, Ğ и т. Д. Однако это не очень надежно, поскольку они могут быть преобразованы в C, S, U, O, G, прежде чем я получу строку .

Другой метод состоит в том, чтобы получить 100 наиболее употребляемых слов на турецком языке и проверить, содержит ли предложение какое-либо / некоторые из этих слов. Я могу объединить эти два метода и использовать систему баллов.

Какой способ решения моей проблемы в Python вы считаете наиболее эффективным?

Смежный вопрос: (человек) Язык документа (Perl, Google Translation API)

Ответы [ 3 ]

13 голосов
/ 21 декабря 2008

Один из вариантов - использование байесовского классификатора, например Reverend . Домашняя страница Преподобного дает это предложение для детектора наивного языка:

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')

Тренировка с более сложными наборами токенов укрепит результаты. Для получения дополнительной информации о байесовской классификации см. Здесь и здесь .

10 голосов
/ 21 декабря 2008

Простой статистический метод, который я использовал раньше:

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

«Привет foobar» в триграммах это: 'Hel', 'ell', 'llo', 'lo', 'o f', 'fo', 'foo', 'oob', 'oba', 'bar'

Для всех исходных данных подсчитайте частоту встречаемости каждой триграммы, предположительно, в поле, где ключ = триграмма и значение = частота. Вы можете ограничить это до 300 самых популярных трехбуквенных комбинаций или что-то еще, если хотите. Где-нибудь рассолите диктовку.

Чтобы узнать, написан ли новый образец текста на том же языке, повторите описанные выше шаги для образца текста. Теперь все, что вам нужно сделать, это вычислить корреляцию между частотами выборочных триграмм и частотами тренировочных триграмм. Вам нужно немного поиграть с ним, чтобы выбрать пороговую корреляцию, выше которой вы готовы считать ввод турецким или нет.

Показано, что этот метод является очень точным, опережая более сложные методы, см.

Cavnar & Trenkle (1994): «Классификация текста на основе N-граммы»

Использование триграмм решает проблему использования списков слов, поскольку в любом языке существует огромное количество слов, особенно с учетом различных грамматических перестановок. Я пытался найти общие слова, проблема в том, что они часто дают ложный положительный результат для какого-то другого языка, или сами имеют много перестановок. Статистический метод не требует много места для хранения и не требует сложного анализа. Кстати, этот метод работает только для языков с системой фонетического письма, он работает плохо, если вообще работает с языками, которые используют идеографический язык (например, китайский, японский, корейский).

В качестве альтернативы в Википедии есть раздел на турецком языке в в удобной таблице распознавания языков.

0 голосов
/ 21 декабря 2008

Почему бы просто не использовать существующую библиотеку для проверки орфографии? Проверка орфографии для нескольких языков, выберите язык с наименьшим количеством ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...