Подтвердить что ты не робот

Обнаружить текст текста

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

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

4b9b3361

Ответ 1

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

В .Net не было портов. Поэтому я написал один: NTextCat (NuGet, Онлайн-демонстрация).

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

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

Ответ 2

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

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

Некоторые орграфы, триграфы и тетраграфы также являются хорошим подарком. Например, вы, скорее всего, найдете & lyquo; eeuw & rsquo; и < uww & rsquo; прежде всего на голландском языке, и & tsch & rsquo; и & lsquo; dsch & rsquo; прежде всего на немецком и т.д.

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

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

Ответ 3

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

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

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

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

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

Ответ 5

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

Затем, когда он попадает к неопознанному тексту, победителем становится язык с более близким "счетом".

Ответ 6

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

Ответ 7

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