Вопрос может быть (около 100%) субъективным, но мне нужны советы. Что является лучшим языком для обработки естественного языка? Я знаю Java и С++, но есть ли более простой способ сделать это. Чтобы быть более конкретным, мне нужно обрабатывать тексты из множества сайтов и получать информацию.
Обработка естественного языка
Ответ 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 лет спустя есть еще более впечатляющие инструменты, крутые алгоритмы и интересные задачи. Одно всестороннее описание можно найти здесь:
Ответ 2
Python и NLTK
Ответ 3
ScalaNLP, который является библиотекой обработки естественного языка, написанной на Scala, кажется подходящим для вашей работы.
Ответ 4
Я бы порекомендовал Python и NLTK.
Некоторые подсказки и заметки, которые я могу определить, основываясь на моем опыте использования:
- У Python есть эффективный список, обработка строк. Вы можете очень эффективно индексировать списки, что на естественном языке должно быть фактом. Также имеет приятные синтаксические деликатесы, например, для доступа к первым 100 словам списка, вы можете индексировать его как список [: 100] (сравнить его с stl в С++).
- Сериализация Python проста и естественна. Модули сериализации делают обработку текста и обработку текста простой задачей, одной строкой кода (сравнивают ее с несколькими строками с использованием Boost или других библиотек С++).
- NLTK предоставляет классы для загрузки корпусов, их обработки, тегирования, токенизации, разбора грамматик, фрагментации и целого набора алгоритмов машинного обучения. Также он предоставляет хорошие ресурсы для вероятностных моделей, основанных на распределении слов в тексте. http://www.nltk.org/book
Если изучение нового языка программирования является препятствием, вы можете проверить openNLP для Java http://incubator.apache.org/opennlp/