2012-01-13 5 views
3

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

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

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

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

Machine Learning and Natural Language Processing

Natural Language Processing in Ruby

Ideas for Natural Language Processing project?

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

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

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

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

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

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

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

+0

Вы действительно ищете грамматику для обработки естественного языка здесь ... Если Java, вы могли бы подумать об отвращении. Но определение _grammar_ будет самой сложной частью всего, независимо от используемого вами инструмента. Удачи! – fge

+0

Спасибо за это @fge. Не могли бы вы рассказать об этом с некоторыми ссылками, если это возможно, и опубликовать его как ответ – Gautam

+0

@fge, после упоминания NLP вы говорите о 'parboiled', но этот инструмент является PEG-парсером, а не инструмент НЛП. Если OP решит использовать инструмент NLP, вероятно, нет необходимости возиться с любыми грамматиками: такие инструменты поставляются вместе с несколькими предопределенными языками (грамматиками). –

ответ

3

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

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

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 он разделяет предложение в токенах, он запускает "part of speech" tagging в предложении, а затем он отправляет помещенное по положению предложение к названному алгоритму распознавания сущностей. Это самый простой трубопровод.

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

+0

NLTK действительно потрясающий, спасибо. – Gautam

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