Лучший способ вернуть язык данной строки

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

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

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

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

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

Дубликат: stackoverflow.com/questions/257125/human-language-of-a-docum‌ ent

S.Lott 21.12.2008 05:13

@ S.Lott: Я добавил ссылку на вопрос.

jfs 21.12.2008 18:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
7
2
1 072
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

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-граммов"

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

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

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

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