但不是解析日历条目,而是我必须解析与财务,会计和待办事项相关的句子.所以例如我必须解析像这样的句子
I spent 50 dollars on food yesterday
我需要将信息单独标记为原因:’食品’,成本:50和时间:<昨天的日期>
我的问题是我是否会参加完整的自然语言处理
在这些问题中给出并使用像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天,我不知道如何使用像GATE这样的AntLR或NLP库.
首选语言:Python,Java,Ruby(不按任何特定顺序排列)
PS:这不是家庭作业,所以请不要这样标记.
PPS:请尝试用Facts回答为什么使用特定方法更好.
即使特定方法可能不符合时间限制,请随意分享,因为它可能会使其他人受益.
解决方法
为了让自己在几秒内完成并运行,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行,它将句子分成标记,在句子上运行“part of speech” tagging,然后将pos标记的句子提供给命名的实体识别算法.这是非常基本的管道.
一般来说,nltk是一个非常漂亮的软件,并且有很好的文档记录:我会看一下.其他答案包含非常有用的链接.