Если вы заинтересованы в механизме, с помощью которого может быть обнаружено распознавание языка, я отсылаю вас к следующим article (на основе python), который использует (очень) наивный метод, но является хорошим введением к этой проблеме, в частности, и машинное обучение (просто большое слово) в целом.
Для реализаций java, JLangDetect и Nutch, как утверждают другие плакаты, довольно хороши. Также взгляните на Lingpipe, JTCL и NGramJ.
Для задачи, где у вас есть несколько языков в одной и той же странице, вы можете использовать детектор граничное предложение, чтобы расколоть страницу в предложениях, а затем попытаться определить язык каждого предложения. Предполагая, что предложение содержит только один (основной) язык, вы все равно должны получать хорошие результаты с любой из вышеперечисленных реализаций.
Примечание: детектор границы предложения (SBD) теоретически зависит от языка (проблема с куриным яйцом, так как вам нужен один для другого). Но для языков на латинском языке (английский, французский, немецкий и т. Д.), Которые в основном используют периоды (помимо восклицательных знаков и т. Д.) Для ограничения предложения, вы получите приемлемые результаты, даже если вы используете SBD, предназначенный для английского языка. Я написал основанный на правилах английский SBD, который отлично поработал для французского текста. Для реализаций взгляните на OpenNLP.
Альтернативный вариант использования SBD является использование скользящего окна, скажем, 10 жетонов (пробелы разделителями), чтобы создать псевдо-приговор (PS) и попытаться определить границу, где язык изменения. Это имеет тот недостаток, что если весь ваш документ имеет n токенов, вы будете выполнять приблизительно n-10 операций классификации по строкам длиной 10 токенов каждый. В другом подходе, если среднее предложение имеет 10 токенов, вы выполнили бы приблизительно n/10 операций классификации. Если n = 1000 слов в документе, вы сравниваете 990 операций против 100 операций: разность по порядку величины.
Если у вас короткие фразы (менее 20 символов), точность определения языка в моем опыте оставляет желать лучшего. В частности, в случае правильных существительных, а также существительных, которые одинаковы на разных языках, таких как «шоколад». Например. Является ли «Нью-Йорк» английским словом или французским словом, если оно появляется во французском предложении?
@EugeneP: французский был бы более «Je suis un bel homme ...»;), но язык-детектор вряд ли обнаружит эту ошибку (или, по крайней мере, очень необычное использование). – SyntaxT3rr0r
@WizardOfOdds Je suis un bonhomme alors, merci, quand meme;) – EugeneP
Также надеюсь, что вы уже проверили это: http://stackoverflow.com/questions/1383503/how-to-determine-the-natural-language-of- a-document –