Определить язык текста
Существует ли библиотека 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 здесь:
Определение языка - довольно сложная вещь.
Некоторые языки намного легче обнаружить, чем другие просто из-за используемых диакритических знаков и диграфов / триграфов. Например, двойные острые акценты используются почти исключительно на венгерском языке. Точка без ' 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/
Вы захотите алгоритм машинного обучения, основанный на скрытых цепях Маркова, обрабатывать кучу текстов на разных языках.
Затем, когда дело доходит до неопознанного текста, язык, имеющий более близкий "балл", становится победителем.