как узнать какой язык
Как быстро определить язык, на котором написан текст?
Глобализация наступает. В любой момент вы можете столкнуться со строкой текста, написанном на иностранном языке, который вы не то что не знаете, но даже идентифицировать его будете не в состоянии.
Впрочем, сделать это, как правило, не сложно. Этот ответ услужливо дадут один-два символа, характерные только для данного языка, и ни для какого другого.
О языках, использующих кириллицу, мы в этой статье говорить не будем. Но у тех языков, которые пользуются латинской письменностью, для звуков, которые встречаются только в данном языке, используются уникальные символы или комбинации символов, которые помогут однозначно определить сам неизвестный язык.
Что это за символы?
Ã, ã: это почти наверняка португальский язык. Если, к тому же, язык этот похож на испанский, со 100%-й вероятностью португальский язык. Пример: São Paulo.
Ă, ă: A с «чашечкой» сверху встречается только в румынском языке и во вьетнамском. Но во вьетнамском короткие слова. Для подтверждения того, что перед вами румынский текст, поищите в нем символы Ţ / ţ и Ş / ş (T и S с запятой внизу).
Бухарест, Румыния
Фото: freestocks-photos, pixabay.com
Ģ, ģ; Ķ, ķ; Ļ, ļ; Ņ, ņ: латышский язык. Только в этом языке есть четыре согласные буквы с запятыми, расположенными снизу, и это не Ţ / ţ и Ş / ş, как в румынском. Кроме того, над гласными буквами в латышском языке для обозначения его длительности ставят линию: Ā /ā, Ī / ī, Ō / ō, Ū / ū. В другом балтийском языке, литовском, длительность звуков обозначают иначе.
Ő, ő; Ű, ű: «Ежики» над этими гласными буквами — верный признак венгерского языка. Кроме того, в тексте довольно часто встречается сочетание gy для обозначения звука ДЬ. Например, самоназвание Венгрии, Magyarország, Мадьярорсаг. Заметили еще одно часто встречаемое в венгерском языке сочетание — sz? Так венгры обозначают звук С. Довольно неожиданно! Еще один признак венгерского: почти все слова непонятны, и то и дело встречаются довольно длинные слова. Например, megszentségteleníthetetlenség — эта черта не может быть осквернена.
Ř, ř: этот звук, средний между Р и Ж, существует только в чешском языке. Другая отличительная буква, встречающаяся только в чешском языке — Ů / ů. Ну, и, наконец, если то и дело встречаются слова, похожие на русские — значит, 100% чешский.
Станция метро в Праге, Чехия
Фото: mh-grafik, pixabay.com
Другой славянский язык, польский, имеет уникальный звук, обозначаемый буквой Ł, ł: Łódź. Буква эта похожа на Л, но читается, как английская W — Уодзь. В польском языке слов, похожих на русские, еще больше, чем в чешском.
I, ı; İ, i: в турецком тексте вы встретите оба варианта буквы I, с точкой и без точки. Это два разных звука — Ы и И, соответственно. Столица Турции — İstanbul, Истанбул. Еще в турецком языке есть буква ğ. Она пишется, но не произносится. Например, Erdoğan — Эрдоан, а не Эрдоган.
Уличный плакат в Рейкьявике, Исландия
Фото: DCCom, pixabay.com
Есть еще два скандинавских языка — исландский и фарерский. Оба используют буквы Ð, ð; Þ, þ для обозначения звука, который в современном английском обозначается сочетанием th. Фарерский язык — достаточно редкий, так что указанные буквы почти наверняка — признак исландского. Но если хотите точности определения — в фарерском встречается буква ø, в исландском вместо нее используют ö (jökull, «ледник»).
Язык состоит из коротких слов, и почти над каждой гласной есть акцент или «чубчик»? Это вьетнамский язык. Пример из Википедии:
Hà Nội là thủ đô của nước Cộng hoà Xã hội chủ nghĩa Việt Nam và cũng là kinh đô của rất nhiều vương triều Việt cổ.
Ханой является столицей Социалистической Республики Вьетнам, а также является столицей многих древних вьетнамских династий.
Ñ, ñ, а также перевернутые вопросительный и восклицательный знаки (¡No pasaran!) присутствуют только в испанских текстах. Если слова в тексте вроде бы испанские (или французские), но часто встречаются буквы X / x — это каталанский язык. Редчайшую в испанском букву каталонцы используют для обозначения звука Ш.
В немецком языке используются гласные буквы с умлаутами Ä / ä, Ö / ö и Ü / ü. Кроме того, в немецком тексте довольно часто встречаются длинные слова, а также артикли der, die и das. В голландском языке встречаются сдвоенные гласные буквы (их используют для обозначения длинных звуков) и «сладкая парочка» ij (читается, как «ай»)
Кельтские языки (ирландский, шотландский гэльский и валлийский) характеризуются длинными словами. В ирландском и шотландском в тексте часто встречаются двухбуквенные сочетания согласных: bh, ch, dh, fh, gh, mh, ph, sh и th. Только ирландцы и шотландцы знают, как эти сочетания произносятся. Акцентированные гласные используются в обоих языках, но только в шотландском есть акценты, направленные в левую сторону, как, например, à в Gàidhlig.
Валлийский язык сильно отличается от других кельтских «братьев». В нем много сдвоенных букв ll и ff, а буква w является гласной (например, cwm).
Угро-финские «братья» — финский и эстонский. В текстах на этих языках трудно распознать даже «международные» слова. В финском языке могут встретиться очень длинные слова, например «moottoripyöräonnettomuus» — «мотоциклетная авария». Сдвоенные гласные в этих языках — обычное дело.
Уличный указатель в Таллине, Эстония
Фото: camux, pixabay.com
Как отличить текст на эстонском языке от финского текста? В эстонском языке есть слова, оканчивающиеся на b или g, а также символ õ. Ну, и конечно, если вам повезло, можно обнаружить самоназвания: у финнов Suomi, у эстонцев — Eesti.
В албанском языке используются буквы c и q, а также сочетание xh. В тексте на албанском языке можно встретить букву ë (например столица Албании Тирана пишется Tiranë). Албанский язык абсолютно не похож ни на один европейский. Самоназвание страны — Shqipëria.
Хорватский язык похож на русский еще сильнее, чем чешский и польский. В нем есть буква Đ / đ для обозначения звука «дж». Для смягчения звуков Л и Н используется буква j: Nj = Нь, Lj = Ль.
Если вы знакомы с украинским языком, то без труда прочтете почти любую надпись на словацком языке. Эти языки очень близки.
Вообще задача определения современного языка по небольшому отрывку текста на этом языке разрешима всегда. У каждого языка есть характерные признаки, которые позволяют это сделать. Эти особенности проанализированы в замечательном справочнике и «Определитель языков мира по письменностям» для большого числа языков. Книга эта очень полезная, хотя последнее ее издание вышло в 1965 году, поэтому кое в чем она устарела.
То, что можно свести в таблицу и классифицировать, можно и запрограммировать. Программу по автоматическому определению языка называют иногда guesser. Такая программа позволяет по введенным нескольким словам текста определить язык, на котором этот текст написан. Естественно, чем больше слов, тем точнее будет определение. Список таких программ можно найти в Интернете. Кроме того, с задачей определения языка, с которого осуществляется перевод иностранных слов, очень часто справляется и переводчик Google.
eponim2008
Жизнь замечательных имен
Короткие истории о вещах и о людях, давших им свое имя
Как быстро определить язык, на котором написан текст?
Глобализация наступает. В любой момент Вы можете столкнуться со строкой текста, написанном на языке, который Вы не то что не знаете, но даже идентифицировать его будете не в состоянии.
Впрочем, сделать это, как правило, не сложно. Этот ответ услужливо дадут один-два символа, характерные только для данного языка, и ни для какого другого.
О языках, использующих кириллицу мы в этой статье говорить не будем. Но у тех языков, которые пользуются латинской письменностью, для звуков, которые встречаются только в данном языке, используются уникальные символы или комбинации символов, которые помогут однозначно определить сам неизвестный язык.
Что это за символы?
Ã, ã: это почти наверняка португальский язык. Если, к тому же, язык этот похож на испанский, со 100%-ной вероятностью португальский язык. Пример: São Paulo
Ă, ă: A с «чашечкой» сверху встречается только в румынском языке и во вьетнамском. Но во вьетнамском короткие слова. Для подтверждения того, что перед Вами румынский текст, поищите в нем символы Ţ / ţ и Ş / ş (T и S с запятой внизу).
Ģ, ģ; Ķ, ķ; Ļ, ļ; Ņ, ņ: латышский язык. Только в этом языке есть четыре согласные буквы с запятыми, расположенными снизу, и это не Ţ / ţ и Ş / ş, как в румынском. Кроме того, над гласными буквами в латышском языке для обозначения его длительности ставят линию: Ā /ā, Ī / ī, Ō / ō, Ū / ū. В другом балтийском языке, литовском, длительность звуков обозначают иначе.
Ő, ő; Ű, ű: «Ежики» над этими гласными буквами – верный признак венгерского языка. Кроме того, в тексте довольно часто встречается сочетание gy ризнак венгерского – почти все слова непонятны, и то и дело встречаются довольно длинные слова. Например, megszentségteleníthetetlenség – эта черта не может быть осквернена.
Ř, ř: Этот звук, средний между Р и Ж, существует только в чешском языке. Другая отличительная буква, встречающаяся только в чешском языке Ů / ů. Ну, и наконец, если то и дело встречаются слова, похожие на русские, значит 100% чешский.
Другой славянский язык, польский, имеет уникальный звук, обозначаемый буквой Ł, ł: Łódź. Буква эта похожа на Л, но читается, как английская W, Уодзь. В польском языке слов, похожих на русские еще больше, чем в чешском.
I, ı; İ, i: В турецком тексте Вы встретите оба варианта буквы I, с точкой и без точки. Это два разных звука, Ы и И. Столица Турции – İstanbul, Истанбул. Еще в турецком языке есть буква ğ. Эта буква пишется, но не произносится. Например, Erdoğan – Эрдоан, а не Эрдоган.
Å, å: Те, кто изучал физику, узнают эту букву. Так обозначается единица длины «ангстрём». Эта буква есть во всех скандинавских языках: норвежском, датском и шведском. Как различить эту веселую троицу? Если Вы найдете в тексте еще ø и æ – это норвежский или датский. Если отыщете ö и ä – это шведский язык. Как отличить датский от норвежского? Ищите в тексте сдвоенную букву а: aa (как в фамилии известного датского философа Кьеркегора (Kierkegaard). У норвежцев нет такого звука и такого обозначения этого звука.
Есть еще два скандинавских языка, исландский и фарерский. Оба используют буквы Ð, ð; Þ, þ для обозначения звука, который в современном английском обозначается сочетанием th. Фарерский язык – достаточно редкий, так что указанные буквы почти наверняка – признак исландского. Но если хотите точности определения – в фарерском встречается буква ø, в исландском вместо нее используют ö (jökull, «ледник»).
Язык состоит из коротких слов и почти над каждой гласной есть акцент или «чубчик»? Это вьетнамский язык. Пример из Википедии:
Hà Nội là thủ đô của nước Cộng hoà Xã hội chủ nghĩa Việt Nam và cũng là kinh đô của rất nhiều vương triều Việt cổ.
Ханой является столицей Социалистической Республики Вьетнам, а также является столицей многих древних вьетнамских династий.
Ñ, ñ а также перевернутые вопросительный и восклицательный знаки (¡No pasaran!) присутствуют только в испанских текстах. Если слова в тексте вроде бы испанские (или французские), но часто встречаются буквы X / x – это каталанский язык. Эту редчайшую в испанском букву каталонцы используют для обозначения звука Ш.
В немецком языке используются гласные буквы с умлаутами Ä / ä, Ö / ö и Ü / ü. Кроме того, в немецком тексте довольно часто встречаются длинные слова, а также артикли der, die и das. В голландском языке встречаются сдвоенные гласные буквы (их используют для обозначения длинных звуков) и «сладкая парочка» ij (читается, как «ай»)
Кельтские языки (ирландский, шотландский гэльский и валлийский) характеризуются длинными словами. В ирландском и шотландском в тексте часто встречаются двухбуквенные сочетания согласных: bh, ch, dh, fh, gh, mh, ph, sh и th. Только ирландцы и шотландцы знают, как эти сочетания произносятся. Акцентированные гласные используются в обоих языках, но только в шотландском есть акценты, направленные в левую сторону, как, например, à в Gàidhlig.
Валлийский язык сильно отличается от других кельтских «братьев». В нем много сдвоенных букв ll и ff, а буква w является гласной (например, cwm).
Унгро-финские «братья», финский и эстонский. В текстах на этих языках трудно распознать даже «международные» слова. В финском языке могут встретиться очень длинные слова, например «moottoripyöräonnettomuus», «мотоциклетная авария». Сдвоенные гласные в этих языках – обычное дело.
Как отличить текст на эстонском языке от финского текста? В эстонском языке есть слова, оканчивающиеся на b или g, а также символ õ. Ну, и конечно, если Вам повезло, можно обнаружить самоназвания: у финнов Suomi, у эстонцев – Eesti.
В албанском языке используются буквы c и q, а также сочетание xh. В тексте на албанском языке можно встретить букву ë (например столица Албании Тирана пишется Tiranë). Албанский язык абсолютно не похож ни на один европейский. Самоназвание страны – Shqipëria.
Хорватский язык похож на русский еще сильнее, чем чешский и польский. В нем есть буква Đ / đ для обозначения звука «дж». Для смягчения звуков Л и Н используется буква j: Nj = Нь, Lj = Ль.
Если Вы знакомы с украинским языком, то без труда прочтете почти любую надпись на словацком языке. Эти языки очень близки.
Автоматический определитель «Guesser.ru»
Принцип работы Автоматического определителя языка текста «guesser» предельно прост. Если вы столкнулись с текстом на незнакомом языке, загрузите его в поле автоматического определителя языка. «Guesser» разобьет текст на слова и сравнит со списком ключевых слов из словаря автоматического определителя языка. В определении языка участвуют не все слова, например, алгоритм исключает предлоги, союзы и слова длиной менее четырех символов.
Поиск совпадений слов происходит для следующих языков: азербайджанского, албанского, английского, арабского, армянского, африкаaнса, белорусского, болгарского, боснийского, венгерского, вьетнамского, голландского, греческого, грузинского, датского, иврита, индонезийского, ирландского, испанского, исландского, итальянского, казахского, китайского, киргизского, корейского, латинского, латышского, литовского, македонского, мальтийского, монгольского, немецкого, нидерландского, норвежского, персидского, польского, португальского, русского, румынского, сербского, словацкого, словенского, суахили, тайского, таджикского, турецкого, туркменского, узбекского, украинского, урду, фарси, финского, французского, хинди, хорватского, чешского, черногорского, шведского, эстонского, эсперанто, японского.
Определение языка текста происходит с некоторой ошибкой, которая зависит от особенности языка, уникальности и количества слов загруженного текста. Частота слов в текстах неравномерна. Некоторые слова встречаются в тектах достаточно равномерно (например, предлоги), однако, частота других слов может быть неравномерной даже в пределах одного текста. К тому же, одно и то же слово может иметь варианты, количество которых иногда достигает более сотни. Поэтому результатом автоматического определения языка может являться список наиболее подходящих языков, которые были определены по загруженному тексту. Для правильного определения языка используйте не менее 70-ти символов или десяти слов текста.
Грамотное определение языка пользователя
Сейчас работаю над сайтом, который претендует на глобальность, естественно и с мультыязычностью у него должно быть все в порядке.
О том как отображать информацию на разных языках тут речи идти не будет. Разговор пойдет о том как определить язык пользователя, и выбрать из доступных на сайте языковых версий наиболее подходящую.
Кому лень читать — посмотрите скринкаст он правда не очень получился, поэтому тут не выкладываю.
Эта строка содержит языки пользователя, которые он предпочитает, и их приоритеты выражаются через q, ели q для языка не задано, то предполагается, что оно будет равно 1. Если постараться отобразить ее в более менее читаемом виде то она выглядит так:
Отсюда видно что я предпочитаю русский язык, а на втором месте у меня английский.
Языки написаны в двух форматах главный код языка это «ru» и «en» в моем случае, который относится к языкоывм стандартам ISO 639
И главный код языка — расширенный код языка в моем случае это «ru-ru» и «en-us» тут расширенный код языка указывает на регион использования языка у меня это United States.
Временами возникает недопонимание с тем как пометить языки, когда списки кодов ISO содержат как двухбуквенные так и трехбуквенные коды (иногда несколько трехбуквенных кодов). Сейчас все действительные коды перечислены в одном IANA реестре, который для языка принимает только одно значение из списков ISO. Если доступен двухбуквенный код ISO, то он будет один в реестре. Иначе реестр будет содержать один трехбуквенный код. Это упростит вещи.
С теорией разобрались переходим к практике:
Напишем конструктор контроллера класса:
Отсортированный по убыванию приоритета языка(значение q)
Далее создаем метод находящую наиболее подходящий язык.
Первым пареметром в нее передается язык используемый по умолчанию, вторым массив ключами которого будут языки которые есть на сайте, а значениями ссылки на него с других языков выглядит массив примерно так:
Определяем язык текста. Сложный случай
Система «Антиплагиат» работает с текстами на разных языках. Большинство работ, поступающих на проверку, написаны на русском, английском или казахском языках. Сейчас индекс «Антиплагиата» содержит документы более чем на 50 языках.
Полноценную поддержку на всех этапах обработки документа имеют 15 из них. В ближайшее время планируем серьезно расширить этот список. Наши неутомимые исследователи учатся переводить даже с фантастических языков. Языки текста важны на нескольких этапах обработки документа.
Знать язык нужно для следующих операций:
Языки текста нам нужно знать не в общем, а в точности до слова. Важной особенностью является еще и то, что не все пользователи хотят качественной обработки своих трудов и нередко бывает, что их тексты «сопротивляются». Про разные способы технических изменений текста и методы борьбы с ними подробно написано здесь. Именно разного рода технические изменения текста и не позволяют нам использовать готовые решения без доработок, и самое неприятное из таких изменений – замена символов на похожие по написанию.
Существующие решения
Сходу изобретать велосипед не стали, а сравнили несколько схожих библиотек распознавания языков NTextCat / CLD3 /CLD2. И остановили свой выбор на CLD2 по нескольким весомым для нас причинам:
Вполне ожидаемо, что все наши проблемы и задачи ни один из этих пакетов не решает, доработки все же понадобятся.
Текст сопротивляется
Тексты, для которых нужно определить язык, в основном милые и пушистые большие и грамотно написанные. Определители языков такие любят. И все же некоторые из них содержат детали, затрудняющие точное определение языков:
Результат определения языков текста CLD2 в зависимости от количества омоглифов в тексте
По вертикали отложена доля текста, по горизонтали – отношение количества омоглифов к количеству слов в тексте. Если в тексте присутствует один замененный символ на два слова, доля текста, на которой язык определился верно, начинает резко падать. При трех омоглифах на два слова почти на всем тексте язык не определен. Правда, есть и хорошая новость: для русского, английского и казахского языков случаи неверного определения языка крайне редки.
Для решения этой и других проблем, с которыми не справляется CLD2, мы разработали эвристический алгоритм. Это алгоритм использует многократный запуск CLD2, определение языка слов с помощью словарей и статистические методы.
Общая схема
Вход: текст и список языков (этот список может быть пуст).
Шаг 1: Определяем языки текста с помощью CLD2.
Шаг 2: Если качество определения языков устраивает, то переходим на шаг 4.
Шаг 3: Процедура множественного запуска CLD2.
Шаг 4: Доопределение языков с помощью эвристик.
На первом шаге все просто: отдали текст библиотеке, получили языковые блоки, отобрали значимые по проценту вхождения в текст языки. Все фрагменты, на которых определился язык, не поддерживаемый системой, мы запоминаем и в дальнейшем эти части текста обрабатываем способом «по умолчанию».
Оцениваем, что же вышло (шаг 2)
Результат первого шага оцениваем, исходя из покрытия текста найденными языковыми блоками. Стоит выкинуть из учета блоки длиной в 1-2 символа (CLD2 некоторые языки определяет по принадлежности символа к алфавиту). На данном шаге хочется понять, можно ли улучшить результат в общем. В случае, когда язык определился коротенькими фрагментами или доля текста, где язык не определен, велика, скорее всего, с текстом что-то не так и нужно пробовать исправить текст для улучшения результата работы CLD2.
Если долго мучиться… (шаг 3)
Шаг 3.0: Формируем список возможных языков из тех, что определили на первом шаге, и тех, что получили на вход.
Цикл по списку языков:
Шаг 3.2: Формируем языковые фрагменты из всех полученных результатов, включая самый первый. Если для некоторого фрагмента текста ровно в одной из итераций определился язык, то этот язык фиксируем, иначе считаем, что для этого фрагмента язык не определен.
Шаг 3.3: Для каждого фрагмента с зафиксированным языком заменяем омоглифы в соответствии с его языком. Еще раз отдаем текст CLD2 и полученный результат считаем текущим.
С точностью до слова (шаг 4)
Итак, к этому шагу уже имеются языковые фрагменты текста, которые получены либо на первом, либо на третьем шаге. Фрагменты различных языков могут пересекаться. Таким образом мы имеем не разбиение, а покрытие текста языковыми блоками, для каждого из которых выполнено что-то одно:
Дальше нам понадобится разбивать текст на токены (аналоги слов языка). Разбивать на токены можно по-разному. В общем случае это зависит от языка текста. В тех языках, с которыми мы сейчас работаем, слова разделяются пробелами и переносами строк. Для определения языка слова на этом этапе мы разделяем на токены не только по пробелам и переходам на новую строку, но и при смене буквенных символов на небуквенные и наоборот. Пример: «Самолет «Су-27».» Получим 4 токена: «Самолет», «»», «СУ», «-27″.».
Поиск единичных вставок для блоков первого типа
Там, где язык определится и система с ним знакома, для нас остается опасность единичных вставок слов языка, отличного от языка фрагмента. Чаще всего это слова на английском языке. Для того, чтобы найти такие «затерявшиеся» слова, разобьем текст на токены и проанализируем каждый в отдельности. Коротенькие токены, длиной 1-2 символа, пропускаем. Анализируем токен посимвольно. Если все символы содержатся в алфавите языка фрагмента, то для него ничего не делаем. Если токен целиком состоит из символов другого алфавита, то добавляем фрагмент языка, соответствующего этому токену. На самом деле все очень просто — видим, что у слова в русском фрагменте не все буквы русские, а все казахские, значит, у этого слова будет два возможных языка: русский и казахский.
Второй случай нам неинтересен, и мы ничего с такими фрагментами текста больше не делаем.
Доопределение языка токенов для блоков третьего типа
Теперь хотелось бы понять, как быть с той частью текста, для которой язык не определился. Эту часть мы также разбиваем на токены и для каждого пытаемся определить язык. Поиск подходящего языка ведем только среди тех языков, что в тексте уже нашлись, и тех, что передал пользователь.
Сначала мы пытаемся найти слово в словаре какого-то языка. Прежде всего заменяем омоглифы и приводим слово к нормальной форме, в предположении конкретного языка из списка возможных, потом проверяем, входит ли оно в словарь этого языка. Слово входит в словарь — добавляем фрагмент, соответствующий этому слову. Здесь также может получиться несколько языков для одного слова. Для коротких слов (менее 4 символов) много ложных срабатываний, особенно в родственных языках, поэтому такие слова пропускаем.
В том случае, если поиск по словарям ничего не дал, пытаемся получить хоть какую-то информацию о языке этого слова с помощью символьных статистик. Считаем, сколько символов из слова принадлежит тому или иному алфавиту и возвращаем значимые языки.
Пример текста с большим количеством омоглифов
В этом небольшом кусочке чуть больше одного омоглифа на слово. Вот какой результат показал CLD2:
Голубым отмечены слова, для которых определился казахский язык. Фиолетовым — английский. Розовым — русский, правда, пока он не нашелся.
Такой результат нас не устраивает, и алгоритм пытается решить проблему с помощью замены омоглифов и многократного вызова CLD2.
В примере дан кириллический вариант казахского, где многие символы совпадают с символами русского языка, поэтому при замене омоглифов в предположении казахского и в предположении русского получаем одинаковые варианты определения языковых фрагментов.
Теперь заменим омоглифы в предположении, что неопределенные фрагменты на английском.
После этого понятно, что с «Кун» по «барады» определили символы казахского языка, с «Том» — «деревянную» – русского, с «Jim» — «him» – английского, а у слова «кадушку» язык не определен, потому что оно попало и в русский, и английский фрагменты. Перед последним запуском CLD2 заменяем омоглифы в тех фрагментах, для которых определили язык.
Слово «Том» переметнулось. Да, так случается на границах похожих (для CLD2) языков и, возможно, стоит решать эту проблему отдельно.
Пример определения языка в тексте с часто чередующимися словами разных языков
В этом примере CLD2 почти ничего не нашел, а многократный запуск результат не улучшил. Определение языка слов по принадлежности к словарю дало хороший результат. Язык оставшиеся слов определили с помощью статистического метода. Розовым отмечен русский язык, фиолетовым — английский.
Что же в результате?
Конечно, хотелось понять, имеет ли смысл городить весь этот огород. Мы добросовестно нагенерили тестовые примеры из кусочков реальных текстов с разнообразными параметрами: длина текста, длины языковых фрагментов, частота вставки слов языков отличных от языка фрагмента, частота чередования языков, доля омоглифов. Для этих примеров нам была известна языковая разметка (сами же нагенерили!). В эксперименте мы ориентировались на языки большинства документов, присылаемых на проверку в системе «Антиплагиат»: русский, английский и казахский. Из полученных результатов мы выделили параметры, которые больше всего влияют на качество определения языка, и уже на них отлаживали фазы алгоритма. Наиболее значительные отклонения в качестве получаются при изменении количества омоглифов в тексте и при очень частом чередовании языков (длина языковых фрагментов не превышает пяти слов). Нам было важно понять, насколько устойчив статистически тот результат, что мы видим на отдельных примерах. На графике показана доля слов, для которых язык определился верно.
По горизонтали – отношение количества омоглифов к количеству слов в тексте. По вертикали – доля слов. Нижний график – худший результат по выборке. В среднем язык текстов определяется довольно хорошо даже на такой сложной выборке.
На данный момент нас устраивает качество результата, но с увеличением количества языков проблемы неизбежны. Во-первых, CLD2 игнорирует переданные в него языки, если их более 5. Во-вторых, эвристики определения языка слова по принадлежности к словарю и по символьным статистикам будут работать плохо при увеличении количества языков, допустимых для документа. Решение этих проблем нам еще предстоит. Если вы сталкивались с подобными задачами, то было бы интересно узнать о ваших идеях и подходах.