2009-07-17 3 views
10

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

«Мэнни Рамирес делает его возвращение к Доджерс сегодня против Хьюстона»,

что легкий вес/простой способ получить существительные из предложения? Чтобы начать, я думаю, что я ограничил бы его именами, но я бы не хотел ограничиваться только этим (и я не хочу полагаться на простое регулярное выражение, которое предполагает, что Title Capped является правильным существительным).

Чтобы сделать этот вопрос еще хуже, какие вещи я не прошу, чтобы я был? Нужен ли мне набор существующих слов для начала? Какой материал лексического анализа мне нужно знать, чтобы сделать эту работу? Я наткнулся на one other question по этой теме, и сейчас я просматриваю эти ресурсы.

ответ

8

Используйте NLTK, в частности chapter 7 on Information Extraction.

Вы говорите, что вы хотите, чтобы извлечь значение, и есть модули для семантического анализа, но я думаю, что IE все, что вам нужно - и честно один из единственные области компьютеров NLP могут работать прямо сейчас.

См. Разделы 7.5 и 7.6 в подтемах Именованного распознавания сущностей (чтобы разделить и классифицировать Мэнни Рамреса как человека, Доджерса как спортивную организацию, а Хьюстон Астрос - еще одной спортивной организации или любого другого, что подходит вашему домену) , Существует NER chunker, который вы можете подключить, как только вы установили NLTK. Из их примеров, извлекая геополитическую сущность (GPE) и лицо:

>>> sent = nltk.corpus.treebank.tagged_sents()[22] 
>>> print nltk.ne_chunk(sent) 
(S 
    The/DT 
    (GPE U.S./NNP) 
    is/VBZ 
    one/CD 
    ... 
    according/VBG 
    to/TO 
    (PERSON Brooke/NNP T./NNP Mossman/NNP) 
    ...) 

Примечание вы все еще будете должны знать лексемизацию и мечение, как описано в предыдущих главах, чтобы получить текст в нужном формате для этих задач IE.

10

Вам необходимо посмотреть на Natural Language Toolkit, что подходит именно для этого.

Этот раздел руководства выглядит очень актуальна: Categorizing and Tagging Words - вот выдержка:

>>> text = nltk.word_tokenize("And now for something completely different") 
>>> nltk.pos_tag(text) 
[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), 
('completely', 'RB'), ('different', 'JJ')] 

Здесь мы видим, что и является CC, координирующий соединение; сейчас и полностью - это РБ или наречия; для - это IN, предлог; что-то - это NN, существительное; и разные JJ, прилагательное.

1

Это действительно очень сложная тема. Как правило, этот материал подпадает под рубрику «Обработка естественного языка» и в лучшем случае имеет тенденцию быть сложным. Трудность такого рода вещей - именно то, почему до сих пор не существует полностью автоматизированной системы обслуживания клиентов и т. П.

Как правило, подход к этому материалу ДЕЙСТВИТЕЛЬНО зависит от того, что именно представляет собой ваш проблемный домен. Если вы сможете узнать о проблемном домене, вы можете получить некоторые очень серьезные преимущества; чтобы использовать ваш пример, если вы можете определить, что ваш проблемный домен является бейсболом, то это дает вам действительно сильный начальный старт. Даже тогда, это много работы, чтобы получить что-нибудь особенно полезное.

Для чего это стоит, да, существующий корпус слов будет полезен. Что еще более важно, определение ожидаемой функциональной сложности системы будет критически важным; вам нужно разбирать простые предложения, или существует необходимость в синтаксическом анализе сложного поведения? Можете ли вы ограничить ввод в относительно простой набор?

3

То, что вы хотите, называется NP (именная фраза) chunking или извлечения.

Some links here

Как было отмечено, это очень проблемная область конкретные вещи. Чем больше вы можете сузить его, тем эффективнее будет. И вам придется тренировать свою программу в своем конкретном домене.

4

Вот книга, которую я наткнулся на недавно: Natural Language Processing with Python

+0

Ха, я просто добавил это в свою корзину на Амазонке, прежде чем вернуться сюда. Это хорошо? Мне было интересно узнать об отсутствии отзывов. – Tom

+0

Похоже, у него есть довольно приличное описание NTLK - инструментарий, упомянутый в одном из ответов – zakovyrya

7

Natural Language Processing (NLP) это имя для синтаксического анализа, а, естественного языка.Существует множество алгоритмов и эвристик, и это активная область исследований. Какой бы алгоритм вы ни кодировали, его нужно будет обучать на корпусе. Также как человек: мы изучаем язык, читая текст, написанный другими людьми (и/или слушая предложения, произнесенные другими людьми).

На практическом плане взгляните на Natural Language Toolkit. Для теоретического обоснования того, что вы собираетесь кодировать, вы можете проверить Foundations of Statistical Natural Language Processing Крисом Мэннином и Хинрихом Шютце.

alt text http://nlp.stanford.edu/fsnlp/fsnlp-bigger.jpg

+1

Эта книга является отличным праймером для концепций вокруг статистического НЛП! –

-1

Регулярные выражения могут помочь в некоторых сценариях. Вот подробный пример: What’s the Most Mentioned Scanner on CNET Forum, который использовал регулярное выражение для поиска всех упомянутых сканеров в сообщениях CNET.

В пост, использовали регулярное выражение, как например:

(?i)((?:\w+\s\w+\s(?:(?:(?:[0-9]+[a-z\-]|[a-z]+[0-9\-]|[0-9])[a-z0-9\-]*)|all-in-one|all in one)\s(\w+\s){0,1}(?:scanner|photo scanner|flatbed scanner|adf scanner|scanning|document scanner|printer scanner|portable scanner|handheld scanner|printer\/scanner))|(?:(?:scanner|photo scanner|flatbed scanner|adf scanner|scanning|document scanner|printer scanner|portable scanner|handheld scanner|printer\/scanner)\s(\w+\s){1,2}(?:(?:(?:[0-9]+[a-z\-]|[a-z]+[0-9\-]|[0-9])[a-z0-9\-]*)|all-in-one|all in one))) 

для того, чтобы соответствовать одно из следующих действий:

  • два слова, то номер модели (в том числе все-in один), а затем «сканер»
  • «сканер», то один или два слова, то номер модели (в том числе все-в-одном)

В результате, текст извлекается из поста был похож,

  1. прекращено HP C9900A фото сканер
  2. сканируя его старые рентгеновские лучи
  3. новый Epson V700 сканер
  4. HP ScanJet 4850 сканер
  5. Epson Perfection 3170 сканер

Это решение регулярного выражения работало в некотором роде.

Смежные вопросы