Обработка естественного языка

Вопрос может быть (около 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 лет спустя есть еще более впечатляющие инструменты, крутые алгоритмы и интересные задачи. Одно всестороннее описание можно найти здесь:

https://tomassetti.me/guide-natural-language-processing/

Ответ 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/