Определить язык текста

Существует ли библиотека C#, которая может определять язык определенного фрагмента текста? т.е. для ввода текста "This is a sentence", он должен определять язык как "English", Или для "Esto es una sentencia" он должен определять язык как "Spanish",

Я понимаю, что обнаружение языка по тексту не является детерминированной проблемой. Но и Google Translate, и Bing Translator имеют опцию "Автоопределение", которая лучше всего определяет язык ввода. Есть ли что-то подобное доступное публично, предпочтительно в C#?

7 ответов

Да, действительно, TextCat очень хорош для идентификации языка. И это имеет много реализаций на разных языках.

В.Net не было портов. Итак, я написал один: NTextCat ( NuGet, Online Demo).

Это чистый.NET Framework DLL + интерфейс командной строки к нему. По умолчанию используется профиль из 14 языков.

Любая обратная связь очень ценится! Новые идеи и пожелания приветствуются тоже:)

Вы можете найти реализацию C# на основе анализа 3grams здесь:

http://idsyst.hu/development/language_detector.html

Определение языка - довольно сложная вещь.

Некоторые языки намного легче обнаружить, чем другие просто из-за используемых диакритических знаков и диграфов / триграфов. Например, двойные острые акценты используются почти исключительно на венгерском языке. Точка без ' i ' ı ', используется исключительно [на мой взгляд] на турецком языке, t-запятая (не t-cedilla) используется только на румынском языке, а eszett' ß 'встречается только на немецком языке.

Некоторые орграфы, триграфы и тетраграфы также являются хорошим подарком. Например, вы, скорее всего, найдете 'eeuw' и 'ieuw' в основном на голландском языке, а 'tsch' и 'dsch' в основном на немецком и т. Д.

Более дешевая распродажа будет включать в себя общие слова или общие префиксы / суффиксы, используемые в конкретном языке. Иногда даже используемая пунктуация может помочь определить язык (стиль цитирования и использование и т. Д.).

Если такая библиотека существует, я бы хотел узнать об этом, так как сам над ней работаю.

Здесь у вас есть простой детектор, основанный на статистике биграмм (в основном это означает, что вы узнаете из большого набора, какие биграммы встречаются чаще на каждом языке, а затем подсчитываете их в куске текста, сравнивая с вашими ранее обнаруженными значениями):

http://allantech.blogspot.com/2007/07/automatic-language-detection.html

Это, вероятно, достаточно хорошо для многих (большинства?) Приложений и не требует доступа в Интернет.

Конечно, он будет работать хуже, чем алгоритм Google или Bing (которые сами по себе не очень хороши). Если вам нужна отличная производительность обнаружения, вам придется выполнять как много тяжелой работы, так и огромные объемы данных.

Другой вариант - использовать API Google или Bing, если у вашего приложения есть доступ в Интернет.

Я обнаружил, что "textcat" очень полезен для этого. Я использовал реализацию PHP, PHP Text Cat, основанную на этой оригинальной реализации, и нашел ее надежной. Если вы посмотрите на источники, вы обнаружите, что это не очень сложно реализовать на выбранном вами языке. Тяжелая работа - буквенные комбинации, относящиеся к определенному языку, - все это в виде данных.

Существует простой инструмент для определения языка текста: http://www.detectlanguage.com/

Вы захотите алгоритм машинного обучения, основанный на скрытых цепях Маркова, обрабатывать кучу текстов на разных языках.

Затем, когда дело доходит до неопознанного текста, язык, имеющий более близкий "балл", становится победителем.

Другие вопросы по тегам