Распознавание простых фраз - PullRequest
3 голосов
/ 13 января 2012

Я хочу распознать простые фразы, подобные тем, что происходят в google calendar , но вместо того, чтобы разбирать записи в календаре, я должен проанализировать предложение, связанное с финансами, бухгалтерским учетом и списками дел.Так, например, я должен разобрать предложения типа

Я потратил 50 долларов на еду вчера

Мне нужно пометить отдельную информацию как Reason : 'food', Cost : 50и Time: <Yesterday's Date>

Мой вопрос заключается в том, могу ли я пройти полноценную обработку естественного языка, как указано в этих Вопросах, и использовать что-то вроде GATE

МашинаИзучение и обработка естественного языка

Обработка естественного языка в Ruby

Идеи для проекта обработки естественного языка?

https://stackoverflow.com/a/3058063/492561

Или лучше написать простые грамматики, используя что-то вроде AntLR, и попытаться их распознать.

Или я должен пойти очень низко и просто определить синтаксис и использовать регулярные выражения.

Время - это ограничение, у меня около 45-50 дней, и я не знаю, как использовать библиотеки AntLR или NLP, такие как GATE.

Предпочтительные языки: Python, Java, Ruby (Не в каком-либо конкретном порядке)

PS: Это не домашняя работа, поэтому, пожалуйста, не пометьте это так.

PPS: Пожалуйста, попробуйтедать ответ с Фактами о том, почему лучше использовать тот или иной метод.даже если конкретный метод может не вписаться в ограничения по времени, пожалуйста, не стесняйтесь поделиться им, потому что это может принести пользу кому-то еще.

Ответы [ 2 ]

4 голосов
/ 14 января 2012

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

Просто чтобы начать работать через несколько секунд, http://timmcnamara.co.nz/post/2650550090/extracting-names-with-6-lines-of-python-code это очень хороший пример того, что вы могли бы сделать.Конечно, я не ожидал бы высокой точности всего от 6 строк Python, но он должен дать вам представление о том, как он работает:

1>>> import nltk
2>>> def extract_entities(text):
3...     for sent in nltk.sent_tokenize(text):
4...         for chunk in nltk.ne_chunk(nltk.pos_tag(nltk.word_tokenize(sent))):
5...             if hasattr(chunk, 'node'):
6...                 print chunk.node, ' '.join(c[0] for c in chunk.leaves())

Основная идея заключается в строках 3 и 4: в строке 3он разбивает текст на предложения и повторяет их.В строке 4 он разбивает предложение на токены, запускает пометку «часть речи» в предложении, а затем передает предложение с меткой pos в алгоритм распознавания именованной сущности.Это очень простой трубопровод.

В целом, nltk - это очень красивый программный продукт, очень хорошо документированный: я бы посмотрел на него.Другие ответы содержат очень полезные ссылки.

3 голосов
/ 14 января 2012

Ваша задача относится к типу Извлечение информации , в частности, извлечение отношений / фактов , перед которым стоит Распознавание именованных сущностей .

Посмотрите на следующие платформы для Java / Python:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...