Синтаксический смысл из текста - PullRequest
10 голосов
/ 17 июля 2009

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

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

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

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

Ответы [ 7 ]

10 голосов
/ 17 июля 2009

Вам нужно взглянуть на Natural Language Toolkit , который предназначен именно для таких вещей.

Этот раздел руководства выглядит очень актуально: Категоризация и пометка слов - вот выдержка:

>>> 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, координирующее соединение; теперь и полностью - это RB или наречия; для - это IN, предлог; что-то - это NN, существительное; отличается - это JJ, прилагательное.

8 голосов
/ 17 июля 2009

Используйте NLTK , в частности главу 7 «Извлечение информации».

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

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

>>> 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.

7 голосов
/ 17 июля 2009

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

В практическом плане взгляните на Natural Language Toolkit . Для теоретического обоснования того, что вы собираетесь кодировать, вы можете проверить Основы статистической обработки естественного языка Криса Мэннинга и Генриха Шютце.

alt text
(источник: stanford.edu )

4 голосов
/ 17 июля 2009

Вот книга, на которую я недавно наткнулся: Обработка естественного языка с Python

3 голосов
/ 17 июля 2009

То, что вы хотите, называется NP (фраза существительная), чанкинг или извлечение.

Некоторые ссылки здесь

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

1 голос
/ 17 июля 2009

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

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

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

0 голосов
/ 08 декабря 2015

Регулярные выражения могут помочь в некоторых ситуациях. Вот подробный пример: Какой самый упоминаемый сканер на форуме CNET , который использовал регулярное выражение для поиска всех упомянутых сканеров в сообщениях форума 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)))

для соответствия любому из следующих:

  • два слова, затем номер модели (включая многофункциональное устройство), затем «сканер»
  • «сканер», затем одно или два слова, затем номер модели (включая все-в-один)

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

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

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

...