Автоматическое определение языка

Добрый день! Сегодня хотелось бы продолжить серию заметок о инструментах работы с текстовыми данными.

На страницах моего блога уже можно найти заметки о автоопределении кодировки и расстановке мягких переносов алгоритмом Ляна-Кнута, а в этот раз хотелось бы рассказать о определении языка текста.

При автоматической обработке большого числа текстовой информации из различных источников у нас возникла проблема с тем, что в выборку стали попадать статьи на неприемлимых для нас языках - арабский, японский и другие, вместо необходимого английского. Это во первых нагружало нашу систему “лишними” статьями, а во вторых портило ленту новостей, которую мы формировали для пользователя. Необходимо было эти статьи как-то фильтровать.

Если объемы небольшие можно попробовать направлять запросы к Google Translate и надеяться на то, что он вас не забанит, но нам такое не подходило :)

Первое решение – смотреть на используемые символы. Тут проблема в том, что русский текст запросто может содержать несколько английских слов, так что для определения придется как-то учитывать их частоту в тексте. Если брать только символы с высокой частотой то запросто можно перепутать русский с украинским, а английский, например, с французским (умляуты будут выкинуты как не слишком частотные).

Второе решение – смотреть уже на сам текст, предлоги, окончания, сочетания символов. Это уже тянет на задачу классификации и требует лингвистической подготовки и хорошей обущающей выборки, сами мы такое потянуть могли, но подобные перспективы нас не радовали.

Решением стала замечательная .NET библиотека для работы с текстом и определения его языка - NTextCat. Как любая приличная библиотека она доступна через нугет

Пример кода для того, чтобы заставить ее определить язык вашего текста - по ссылке


comments powered by HyperComments
Яндекс.Метрика