Я создаю проект, связанный с обработкой естественного языка, поскольку модуль nlp в настоящее время работает только с английским текстом, поэтому я должен убедиться, что отправленный пользователем контент (не длинный, всего несколько слов) на английском языке. Существуют ли устоявшиеся способы достижения этого? Предпочтительнее использовать Python или Javascript.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете разбить фразу на слова и проверить словарь (некоторые из них можно загрузить, это может представлять интерес), но для этого потребуется, чтобы используемый вами словарь был достаточно хорош.
Он также упадет с именами собственными (например, моего имени нет в словаре).
Если содержание достаточно длинное, я бы предложил немного частотный анализ на письмах.
Но для нескольких слов, я думаю, лучше всего сравнить их с английским словарем и принять ввод, если половина из них совпадает.
@Tyson, Отлично, еще одно преимущество, о котором я не думал ;-)
Пытаться:
http://wordlist.sourceforge.net/
Список английских слов.
Вам нужно будет быть осторожным с именами, например «Канберра» или «Билл Клинтон». Они не появятся в списке слов. Я предлагаю просто проверить, является ли первая буква заглавной в качестве первой попытки.
Я думаю, что наиболее эффективным способом было бы попросить пользователей отправлять только английский текст :)
Вы можете отобразить раскрывающийся список выбора языка над текстовой областью с английским / другим в качестве вариантов. Когда пользователь выбирает «Другое», отключите текстовую область с сообщением, что поддерживается только английский язык [на данный момент].
Но вы должны это проверить, иначе у модуля nlp возникнут проблемы.
Да, ты прав. Но в таких приложениях часто полезно усилить правило «Мусор на входе, мусор на выходе», чтобы было меньше ошибок пользователя.
Проверьте Таблица распознавания языков
Есть ли известный алгоритм использования этой диаграммы? Я имею в виду, будете ли вы подсчитывать баллы по каждому языку, а затем сортировать результат? Или мы можем использовать пороговое значение для каждого языка?
Попробуйте статистическое распознавание языка на основе n-граммов. Это связь для демонстрации алгоритма, использующего эту технику, там также есть ссылка на статью, описывающую алгоритм. Попробуйте демо-версию, она неплохо работает даже с очень короткими текстами (3-4 слова).
Вы уже выполняете НЛП, если ваш модуль не понимает, на каком языке был текст, значит, либо модуль не работает, либо ввод был на неправильном языке.
Расширения Переключатель словарей Firefox имеют возможность определять правильный словарь по мере ввода. Я думаю, он проверяет слова по установленным словарям и выбирает тот, который дает меньше ошибок ...
Вы не можете ожидать, что все слова текста будут в словаре: сокращения, собственные существительные, опечатки ... Кроме того, некоторые слова являются общими для нескольких языков: французская рок-группа даже сделала названия своих дисков, чтобы они имели ( разные), что означает как на французском, так и на английском языках. Так что это статистическая вещь: если в хорошем английском словаре найдено более x% слов, скорее всего, это типы пользователей на этом языке (даже если есть ошибки, как, вероятно, в этом ответе, поскольку я не являюсь родным английским) .
У Google есть javascript API, в котором есть реализация определения языка. Я только тестировал его, никогда не использовал в продакшене.
http://code.google.com/apis/ajaxlanguage/documentation/#Detect
Возможно, вам поможет статья "Убедитесь, что пользователь отправляет только английский текст [PHP]". Код написан на PHP, но достаточно мал, чтобы его можно было легко переписать.
Ваша вторая идея исключила бы практически все комментарии на YouTube.