Извлечение «полезной» информации из предложений? - PullRequest
8 голосов
/ 26 июня 2011

Я сейчас пытаюсь понять предложения этой формы:

The problem was more with the set-top box than the television. Restarting the set-top box solved the problem.

Я совершенно новичок в обработке естественного языка и начал использовать пакет Python NLTK, чтобы испачкать руки.Однако мне интересно, может ли кто-нибудь дать мне обзор шагов высокого уровня, необходимых для достижения этой цели.

Что я пытаюсь сделать, это определить, в чем заключается проблема в этом случае, set-top boxи было ли предпринятое действие решило проблему, поэтому в данном случае yes, потому что перезапуск решил проблему.Поэтому, если бы все предложения были в этой форме, моя жизнь была бы проще, но поскольку это естественный язык, предложения также могли бы иметь следующую форму:

I took a look at the car and found nothing wrong with it. However, I suspect there is something wrong with the engine

Так что вв этом случае проблема была с car.Предпринятые действия не решили проблему из-за наличия слова suspect.И потенциальная проблема может быть с engine.

. Я не ищу абсолютного ответа, так как подозреваю, что это очень сложно.То, что я ищу, - это скорее обзор высокого уровня, который укажет мне правильное направление.Если есть более простой / альтернативный способ сделать это, то это тоже приветствуется.

Ответы [ 2 ]

4 голосов
/ 26 июня 2011

На самом деле лучшее, на что вы могли надеяться, это Наивный Байесовский классификатор с достаточно большим (вероятно, больше, чем у вас) обучающим набором и готовым терпеть справедливую норму ложных определений.

В поисках святого Грааля НЛП вы останетесь несколько неудовлетворенными.

3 голосов
/ 27 июня 2011

Вероятно, если предложения правильно сформированы, я бы поэкспериментировал с разбором зависимостей (http://nltk.googlecode.com/svn/trunk/doc/api/nltk.parse.malt.MaltParser-class.html#raw_parse).). Это дает вам график составляющих предложения, и вы можете определить отношения между лексическими элементами. Позже вы можете извлечь фразы из выходных данных парсера зависимостей (http://nltk.googlecode.com/svn/trunk/doc/book/ch08.html#code-cfg2), который может помочь вам извлечь прямой объект предложения или фразу глагола в предложении.

Если вы просто хотите получить фразы или «куски» из предложения, вы можете попробовать анализатор чанков (http://nltk.googlecode.com/svn/trunk/doc/api/nltk.chunk-module.html).. Вы также можете выполнить распознавание именованных сущностей (http://streamhacker.com/2009/02/23/chunk-extraction-with-nltk/).. Обычно оно используется для извлечения экземпляров мест, организаций или имена людей, но это может сработать и в вашем случае.

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

...