【问题标题】:Simple Phrases recognition简单的短语识别
【发布时间】:2012-01-13 12:29:10
【问题描述】:

我希望识别简单的短语,例如 google calendar 中发生的那些 但不是解析日历条目,我必须解析与财务、会计和待办事项相关的句子。所以例如我必须解析像

这样的句子

我昨天在食物上花了 50 美元

我需要将单独的信息标记为 Reason : 'food'Cost : 50Time: <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 或 GATE 等 NLP 库。

首选语言:Python、Java、Ruby(不分先后)

PS:这不是家庭作业,所以请不要这样标记它。

PPS :请尝试用事实来回答为什么使用特定方法更好。 即使特定方法可能不适合时间限制,请随时分享它,因为它可能会使其他人受益。

【问题讨论】:

  • 您真的在这里寻找自然语言处理语法...如果是Java,您可以考虑煮熟。但是定义一个 grammar 将是最困难的部分,无论你使用什么工具。祝你好运!
  • 感谢@fge,如果可能的话,您能否通过一些链接详细说明,并将其作为答案发布
  • @fge,说完NLP,你说的是parboiled,不过这个工具是PEG-parser,不是NLP工具。如果 OP 选择使用 NLP 工具,则可能无需修改任何语法:此类工具已经附带了几种预定义的语言(语法)。
  • @BartKiers 这就是为什么我说你需要定义一个语法......这不是不可撤销的,但非常困难。
  • @fge,错了,不,不是在使用 NLP 工具(套件)时:这些已经包含语言(语法)。

标签: regex parsing nlp


【解决方案1】:

您确实可以查看命名实体识别。根据您的问题,我了解您的域定义非常明确,因此您可以识别与您相关的(少数?)实体(日期、货币、金额、时间表达式等)。如果短语非常简单,您可以使用基于规则的方法,否则可能很快就会变得太复杂。

只是为了让自己在几秒钟内启动并运行,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 是一款非常漂亮的软件,而且文档非常详细:我会看看它。其他答案包含非常有用的链接。

【讨论】:

  • NLTK 真的很棒,谢谢。
【解决方案2】:

您的任务是Information Extraction 任务类型,具体来说是relation/fact extraction,前面是Named Entity Recognition

看看以下 Java/Python 框架:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多