Разборчивость Значение из текста

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

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

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

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

Ответ 1

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

Вы говорите, что хотите извлечь смысл, и есть модули для семантического анализа, но я думаю, что 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.

Ответ 2

Вам нужно посмотреть 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, прилагательное.

Ответ 3

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

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

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

Ответ 5

То, что вы хотите, называется фрагментацией NP (noun phrase) или извлечения.

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

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

Ответ 6

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

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

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

Ответ 7

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

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

  • два слова, затем номер модели (включая все-в-одном), затем "сканер"
  • "сканер", затем одно или два слова, затем номер модели (включая все-в-одном)

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

  • прекращено сканирование фотографий HP C9900A
  • сканирование его старых рентгеновских лучей
  • новый сканер Epson V700
  • Сканер HP ScanJet 4850
  • Сканер Epson Perfection 3170

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