По существу, есть три основные задачи для реализации описанного приложения:
- 1a) Идентификация кодировки символов входного текста
- 1b) Определите язык ввода текста
- 2) Получить текст в переводе с помощью API одного из онлайн-сервисов
Для 1a вы можете взглянуть на decodeh.py , кроме самого скрипта, он предоставляет много очень полезных ресурсов, касающихся наборов символов и кодирования в целом. CharDet , упомянутый в другом ответе, также заслуживает рассмотрения.
Как только кодировка символов известна, как вы предлагаете, вы можете решить 1b), рассчитав частотный профиль текста и сопоставив его с известными частотами. Несмотря на простоту, этот подход обычно обеспечивает приличное соотношение точности, хотя он может быть слабым для более коротких текстов, а также для текстов, которые следуют определенным шаблонам; например, текст на французском языке со многими ссылками на единицы в метрической системе будет иметь необычно высокое соотношение букв M, K и C.
Дополнительный и очень похожий подход, использующий биграммы (последовательности из двух букв) и триграммы (три буквы) и соответствующие таблицы ссылок на распределение частот на разных языках.
Другие методы определения языка включают в себя маркировку текста, то есть рассмотрение слов в тексте. Ресурсы НЛП включают таблицы с наиболее часто используемыми словами на разных языках. Такими словами обычно являются статьи, притяжательные прилагательные, наречия и тому подобное.
Альтернативным решением для определения языка является использование службы онлайн-перевода, чтобы выяснить это для нас. Важно обеспечить службу перевода текстом в понятной для него кодировке, при условии, что язык может быть излишним.
Наконец, как и многие практические приложения НЛП, вы можете решить реализовать несколько решений. Используя шаблон разработки стратегии, можно применить несколько фильтров / классификаторов / шагов в определенном порядке и выйти из этой логики в разных точках в зависимости от ситуации. Например, если простая частота символа / биграммы соответствует тексту на английском языке (с небольшим отклонением), на этом можно просто остановиться. В противном случае, если предполагаемый язык - французский или немецкий, проведите другой тест и т. Д. И т. Д.