2010-06-24 3 views
5

Я хотел бы знать о инструментах с открытым исходным кодом (для java/python), которые могли бы помочь мне извлечь семантические & стилистические функции из текста. Примерами семантических признаков будет отношение прилагательное-существительное, конкретная последовательность тегов части речи (прилагательное, за которым следует существительное: adj | nn) и т. Д. Примерами стилистических признаков могут быть количество уникальных слов, количество местоимений и т. Д. В настоящее время я знаю только Word to Web Tools, который преобразует блок текста в рудиментальную модель векторного пространства.Извлечение семантических/стилистических функций из текста

Я знаю несколько текстовых горнорудных пакетов, таких как GATE, NLTK, Rapid Miner, Mallet и MinorThird. Однако я не мог найти какой-либо механизм, который бы соответствовал моей задаче.

С уважением,
--Denzil

ответ

1

Я использую анализаторы и индексации механизм Lucene «s построить векторные пространства для документов, а затем перемещаться в этом пространстве. Вы можете создавать векторы частоты для документов, использовать существующий документ для поиска других документов similar в векторном пространстве. Если ваши данные большие (миллионы документов, десятки тысяч функций), то вам может понравиться Lucene. Вы также можете делать прерывание, пометку и другие вещи. Этот blog post может стать хорошей отправной точкой для маркировки POS. Короче говоря, Lucene предоставляет вам все необходимые механизмы для реализации упомянутых вами задач.

Одной библиотекой, которую я часто слышу, является Semantic Vectors. Это снова построено на Lucene, но у меня нет прямого опыта с этим. Помимо этого, я предлагаю взглянуть на векторную космическую модель Википедии article.

+0

Amac, Спасибо за ответ! «Модель векторного пространства», хотя и очень надежная модель, является примитивной моделью и в большей степени зависит от статистики. Я хотел бы реализовать более сложную модель, используя семантические знания из текстовых понятий и т. Д. Сообщение в блоге может помочь мне извлечь последовательность POS-шаблонов с использованием Lucene, но более легкий пакет, такой как NLTK (с регулярным выражением, конечно), может мне помочь выполнить ту же задачу. Спасибо, что указали мне на пакет семантических векторов. Хотя это не помогает мне в моей задаче, я буду рассматривать ее для некоторых других задач. – Dexter

1

Я использовал NLTK для некоторых задач NLP (Natural Language Processing), и он работал очень хорошо (хотя и медленно). Почему именно вам нужно такое структурированное представление вашего текста? (истинный вопрос, так как в зависимости от приложения иногда могут быть намного более простые представления)

+0

Гейб, Спасибо за ответ! У меня есть список предложений в файле .txt (точнее, 29 миллионов предложений). Каждое предложение аннотируется с определенной темой. В каждом предложении может быть несколько аннотаций. У меня есть список уникальных слов из текстового файла и список уникальных аннотаций. Мне нужно создать слово (уникальный термин) -номенную матрицу (похожую на матрицу term-document). Тем не менее, я нахожусь в море, о том, как продолжить рассмотрение количества уникальных слов - около 15 миллионов, а количество аннотаций - 318k. Размер структуры данных меня отключает. – Dexter

+0

Хорошо, что * очень большой: -D. Для начала вы, вероятно, не захотите читать во всем файле за один раз и за секунды: вы уверены, что вам нужна вся структура данных в памяти за один раз, чтобы сделать что вы пытаетесь сделать? В зависимости от того, что вы пытаетесь сделать, не может быть и речи о хранении данных в базе данных (DB типа типа ключа (couchdb et al.) Или простая таблица в RDB (mysql) – Gabe

+0

Гейб, я в порядке с сохранением функций в РСУБД и т. д. Главное, но извлекает их! – Dexter

2

Если ваш текст в основном естественный язык (на английском языке), вы пытаетесь извлечь фразы, используя тег-запись части речи (POS). Monty tagger является чистым POS-тегером Python. У меня очень удовлетворительная производительность из C++ POS-тегов, таких как CRFTagger http://sourceforge.net/projects/crftagger/. Я привязал его к Python, используя subprocess.Popen. Теги POS позволяют хранить только важные фрагменты предложения: например, существительные и глаголы, которые затем могут быть проиндексированы с использованием любых инструментов индексирования, таких как Lucene или Xapian (мой любимый).

+0

Кен, спасибо! Проблема, хотя для задач классификации текста Я не нахожу одного языка программирования, который мог бы извлечь В течение многих лет мы видели, что многие стандартные функции используются как те, которые я упомянул выше, но я удивлен и разочарован исследователями, которые не отправляют код для этого. – Dexter

3

Я думаю, что Stanford Parser является одним из лучших и комплексных инструментов НЛП, доступных бесплатно: не только это позволит вам разобрать структурных зависимостей (сосчитать существительных/прилагательных), но это также даст вам грамматических зависимостей в предложении (чтобы вы могли извлечь объект, объект и т. Д.). Последний компонент - это то, что библиотеки Python просто не могут сделать (см. Does NLTK have a tool for dependency parsing?), и, вероятно, это будет самая важная функция в отношении способности вашего программного обеспечения работать с семантикой.

Если вас интересуют инструменты Java и Python, то Jython, вероятно, наиболее интересен для вас. Я был в точно такой же лодке, поэтому я написал этот пост об использовании Jython, чтобы выполнить пример кода, предоставленного в Stanford Parser - я бы дал ему взгляд и посмотреть, что вы думаете: http://blog.gnucom.cc/2010/using-the-stanford-parser-with-jython/

Edit: После прочтения один из ваших комментариев я узнал, что вам нужно разобрать 29 миллионов предложений.Я думаю, вы могли бы извлечь большую пользу, используя чистую Java, чтобы объединить две действительно мощные технологии: Stanford Parser + Hadoop. Оба они написаны исключительно на Java и имеют чрезвычайно богатый API, который вы можете использовать для синтаксического анализа количества данных за небольшую часть времени на кластере машин. Если у вас нет машин, вы можете использовать кластер EC2 Amazon. Если вам нужен пример использования Stanford Parser + Hadoop, оставляйте комментарий для меня, и я обновлю сообщение с URL-адресом к моему примеру.

1

Вот подборка инструментов Java NLP, что это разумно уточненный: http://www.searchenginecaffe.com/2007/03/java-open-source-text-mining-and.html

LingPipe (http://alias-i.com/lingpipe/) не были упомянуты в ответах еще и является отличным & активно разрабатывается инструментарий.

+0

Jon, LingPipe помогает только до сих пор. использовал LingPipe, но то, что я прошу, возможно, не предоставляется ни одним из инструментов, включая LingPipe. – Dexter