2009-09-23 3 views
17

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

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

+0

Только на днях я видел один из моих внутрисетевых веб-страниц на ПК с помощью Google Переводчик установлен. На странице было несколько слов, таких как ** mean ** и ** stddev ** и некоторые цифры. Google Translator сказал мне, что страница была в ** румынском ** и спросила, нужен ли мне перевод. Если это не ** детерминированная проблема **, то как программа может сделать хорошую работу? – pavium

+3

Иногда они делают хорошую работу. Конечно, будут входы, для которых они полностью терпят неудачу, но для более вероятных входов они достаточно хорошо работают –

+2

http://stackoverflow.com/questions/1192768/return-the-language-of-a-given-string/1192802 # 1192802 –

ответ

0

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

Затем, когда он доходит до неопознанного текста, побеждает тот, у кого есть более близкий «счет».

1

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

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

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

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

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

+1

На самом деле этот подход даст неплохие результаты. Его можно улучшить, используя n-граммы вместо двухграмм. Однако всегда будет сложно рассказать очень похожие языки (например, польский и чешский). Языки, такие как греческий, будут очень легкими, хотя ... –

+0

Чтобы избежать недоразумений, что бы вы назвали довольно хорошими в этом контексте? –

2

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

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

Некоторые диграфы, триграфы и тетраграфы также являются хорошим подарком. Например, вы, скорее всего, найти ‘ ’ eeuw и ‘ ’ ieuw в первую очередь на голландском языке, и ‘ ’ TSCH и ‘ ’ ВКС в основном на немецком языке и т.д.

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

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

+0

Вам следует подумать о более общем классификаторе на основе n-граммов, основанном на учебном корпусе. –

0

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

26

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

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

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

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

+1

Пробовал NTextCat сегодня, и с ним очень легко работать! –

+0

Спасибо за использование! Любая особая обратная связь очень ценится. Пожалуйста, напишите ваши отзывы (если есть) [на этой странице] (http://ntextcat.codeplex.com/discussions) –

+0

Ну, он не признал латышский .. – Edgar