Ответ 1
Как я уже сказал в комментариях, речь идет не о языке, а о подходящей библиотеке. И есть много NLP libraries в Java и С++. Я считаю, что вы должны проверить некоторые из них (на обоих языках), а затем, когда вы узнаете все множество доступных библиотек, создайте какой-то "большой план", как выполнить свою задачу. Итак, здесь я просто дам вам несколько ссылок с кратким объяснением, что к чему.
Java
GATE - это именно то, что означает его название - Общая архитектура для обработки текста. Применение в GATE - это конвейер. Вы помещаете на него ресурсы обработки текстов, такие как токенизаторы, POS-метки, морфологические анализаторы и т.д. И выполняете этот процесс. Результат представлен в виде набора аннотаций - метаинформации, прикрепленной к типу текста (например, токена). В дополнение к большому количеству plugins (включая плагины для интеграции с другими ресурсами NLP, такими как WordNet или Stanford Parser), у него много предопределенных словарей (городов, имен и т.д.) и собственного языка JAPE, подобного регулярному выражению. GATE поставляется со своей IDE (разработчиком GATE), где вы можете попробовать настроить конвейер, а затем сохранить его и загрузить с Java-кода.
UIMA - или неструктурированные приложения для управления информацией. Он очень похож на GATE с точки зрения архитектуры. Он также представляет конвейер и создает набор аннотаций. Как и GATE, у него есть визуальная среда IDE, где вы можете попробовать свое будущее приложение. Разница в том, что UIMA в основном касается извлечения информации, в то время как GATE выполняет текстовую обработку без явного рассмотрения ее цели. Также UIMA поставляется с простым сервером REST.
OpenNLP - они называют себя центром организации проектов с открытым исходным кодом на НЛП, и это наиболее подходящее определение. Главным направлением развития является использование алгоритмов машинного обучения для наиболее общих задач NLP, таких как таргетирование на части речи, распознавание имен объектов, разрешение когерентности и т.д. Он также имеет хорошую интеграцию с UIMA, поэтому его инструменты также доступны.
Stanford NLP - вероятно, лучший выбор для инженеров и исследователей, обладающих знаниями НЛП и ML. В отличие от библиотек, таких как GATE и UIMA, он не нацелен на предоставление как можно большего количества инструментов, а вместо этого концентрируется на идиоматических моделях. Например. у вас нет исчерпывающих словарей, но вы можете подготовить вероятностный алгоритм для его создания! В дополнение к компоненту CoreNLP, который предоставляет наиболее дико используемые инструменты, такие как токенизация, маркировка POS, NER и т.д., У нее есть несколько интересные подпроекты. Например. их Структура зависимостей позволяет вам извлечь полную структуру предложения. То есть вы можете, например, легко извлечь информацию о предмете и объекте рассматриваемого глагола, что намного сложнее с использованием других инструментов НЛП.
С++
UIMA - да, есть полные реализации для Java и С++.
Stanford Parser - некоторые проекты в Стэнфорде только на Java, другие - только на С++, а некоторые из них доступны на обоих языках. Вы можете найти многие из них здесь.
APIs
Несколько API-интерфейсов веб-служб выполняют определенную обработку языка, в том числе:
Алхимия API - идентификация языка, распознавание имен, анализ настроений и многое другое! Взгляните на их главную страницу - это довольно самоописательно.
OpenCalais - эта служба пытается построить гигантский график всего. Вы передаете ему URL-адрес веб-страницы, и он обогащает этот текст страницы найденными сущностями вместе с отношениями между ними. Например, вы передаете ему страницу с "Steve Jobs", и она возвращает "Apple Inc.", (грубо говоря) вместе с вероятностью, что это тот же Стив Джобс.
Другие рекомендации
И да, вы должны обязательно взглянуть на Python NLTK, Это не только мощная и простая в использовании библиотека NLP, но и часть отличного научного стека, созданного чрезвычайно дружественным сообществом.
Обновление (2017-11-15): 7 лет спустя есть еще более впечатляющие инструменты, крутые алгоритмы и интересные задачи. Одно всестороннее описание можно найти здесь: