Залежно від випадку, вам може бути цікаво скористатися одним із наведених нижче способів:
Спосіб 0: Використовуйте API або бібліотеку
Зазвичай у цих бібліотек є кілька проблем, оскільки деякі з них неточні для невеликих текстів, деякі мови відсутні, повільні, вимагають з’єднання з Інтернетом, не є вільними, ... Але загалом кажучи, вони будуть відповідати більшості потреб .
Метод 1: Мовні моделі
Мовна модель дає нам ймовірність послідовності слів. Це важливо, оскільки це дозволяє нам надійно розпізнавати мову тексту, навіть коли текст містить слова іншими мовами (наприклад: "" Hola "означає" привіт "іспанською" ).
Ви можете використовувати N-мовні моделі (по одній на мову) для оцінки тексту. Виявлена мова буде мовою моделі, яка дала вам найвищий бал.
Якщо ви хочете створити для цього просту мовну модель, я б вибрав 1 грам. Для цього вам потрібно лише порахувати, скільки разів з’явилося кожне слово з великого тексту (наприклад, Корпус Вікіпедії мовою «X»).
Тоді ймовірністю слова буде його частота, поділена на загальну кількість проаналізованих слів (сума всіх частот).
the 23135851162
of 13151942776
and 12997637966
to 12136980858
a 9081174698
in 8469404971
for 5933321709
...
=> P("'Hola' means 'hello' in spanish") = P("hola") * P("means") * P("hello") * P("in") * P("spanish")
Якщо текст для виявлення досить великий, я рекомендую відібрати N випадкових слів, а потім використовувати суму логарифмів замість множення, щоб уникнути проблем точності з плаваючою комою.
P(s) = 0.03 * 0.01 * 0.014 = 0.0000042
P(s) = log10(0.03) + log10(0.01) + log10(0.014) = -5.376
Спосіб 2: Набори, що перетинаються
Ще простіший підхід полягає у підготовці N наборів (по одному на мову) з найпоширенішими М-словами. Потім перетинайте текст із кожним набором. Набір із найбільшою кількістю перетинів буде вашою виявленою мовою.
spanish_set = {"de", "hola", "la", "casa",...}
english_set = {"of", "hello", "the", "house",...}
czech_set = {"z", "ahoj", "závěrky", "dům",...}
...
text_set = {"hola", "means", "hello", "in", "spanish"}
spanish_votes = text_set.intersection(spanish_set)
english_votes = text_set.intersection(english_set)
czech_votes = text_set.intersection(czech_set)
...
Спосіб 3: Стиснення ZIP
Це більше цікавості, ніж будь-що інше, але тут справа йде ... Ви можете стиснути текст (наприклад, LZ77), а потім виміряти відстань поштового індексу щодо стисненого тексту посилання (цільова мова). Особисто мені це не сподобалось, оскільки він повільніший, менш точний і менш описовий, ніж інші методи. Тим не менше, для цього методу можуть бути цікаві програми. Читати далі: Мовні дерева та застібки-блискавки