【问题标题】:extracting English verbs from a given text [closed]从给定文本中提取英语动词[关闭]
【发布时间】:2011-03-23 11:04:19
【问题描述】:

我需要从给定文本中提取所有英语动词,我想知道我该怎么做... 乍一看,我的想法是使用正则表达式,因为所有英语动词时态都遵循模式,但也许还有另一种方法。我的想法很简单:

  1. 为每个动词时态创建一个模式。我必须以某种方式区分规则动词 (http://en.wikipedia.org/wiki/English_verbs) 和不规则动词 (http://www.chompchomp.com/rules/irregularrules01.htm)。
  2. 遍历这些模式并使用它们拆分文本(每个子字符串的最后一个单词应该是赋予句子完整含义的动词,我需要它用于其他目的 -> 名词化)

你怎么看?我想这不是一种有效的方法,但我无法想象另一种方法。

提前谢谢你!

PS:

  1. 我有两本词典,一本用于所有英语动词,另一本用于所有英语名词
  2. 这一切的主要问题是该项目包括动词名词化(只是一个uni项目),所以所有的“努力”都应该集中在这部分,名词化。具体来说,我遵循这个模型:acl.ldc.upenn.edu/P/P00/P00-1037.pdf)。该项目包括给定一个文本,找到该文本中的所有动词,并为每个动词提出多个名词化。所以第一步(找动词),应该尽量简单……但我不能使用任何解析器,这是不允许的

【问题讨论】:

    标签: java regex nlp


    【解决方案1】:

    词性标注器

    识别并提取文本中的所有动词非常容易使用Part-of-Speech (POS) tagger。这样的标注器用词性标签标记文本中的所有单词,表明它们是动词、名词、形容词、副词等。现代词性标注器非常准确。例如,Toutanova 等人。 2003 年报告斯坦福大学的开源 POS 标记器在新闻专线数据上分配正确的标记 97.24% 的时间。

    执行词性标注

    Java 如果您使用的是 Java,那么一个很好的 POS 标记包是 Stanford Log-linear Part-Of-Speech Tagger。 Matthew Jockers 整理了一个关于使用这个标记器的很棒的教程,你可以找到 here。

    Python 如果您更喜欢 Python,可以使用 Natural Language Toolkit (nltk) 中包含的 POS 标记器。下面给出了一个代码 sn-p 演示如何使用此包执行 POS 标记:

    import nltk
    
    text = "I am very happy to be here today"
    tokens = nltk.word_tokenize(text)
    pos_tagged_tokens = nltk.pos_tag(tokens)
    

    生成的 POS 标记标记将是一个元组数组,其中每个元组中的第一个条目是标记单词的标识,第二个条目是单词的 POS 标签,例如对于pos_tagged_tokens 上面的代码 sn-p 将设置为:

    [('I', 'PRP'), ('am', 'VBP'), ('very', 'RB'), ('happy', 'JJ'), ('to', 'TO'), 
     ('be', 'VB'), ('here', 'RB'), ('today', 'NN')]
    

    了解标签集

    Stanford POS 标记器和 NLTK 都使用 Penn Treebank tag set。如果您只是对提取动词感兴趣,请提取所有带有以“V”开头的词性标签的单词(例如,VB、VBD、VBG、VBN、VBP 和 VBZ)。

    【讨论】:

      【解决方案2】:

      用正则表达式解析自然语言是不可能的。算了。

      举个极端的例子:你如何找到这句话中的动词(标有星号)?

      Buffalo buffalo Buffalo buffalo buffalo* buffalo* Buffalo buffalo

      虽然您几乎不会遇到这样的极端情况,但如果您只看单词,那么有几十个动词也可以是名词、形容词等。

      您需要像Stanford NLP 这样的自然语言解析器。我从来没有用过,所以我不知道你的结果会有多好,但我可以告诉你,比使用 Regex 更好。

      【讨论】:

      • 好吧,我忘了说我有一本所有英语动词的字典(不定式)
      • @Turquesa 这样吗?当你处理同音异义词时,这仍然对你没有任何好处。
      • 肖恩,您的链接指向斯坦福大学的短语结构解析器。您实际上不需要使用短语结构解析器来获取词性标记信息(例如,一个词是否是名词、动词、形容词、副词等)。相反,仅使用基于 CRF 或 MEMM 的 POS 标记器,您将获得更快、更准确的结果。
      • @dmcer 实际上 我 不需要任何类似的东西。我只是想向 OP 展示正则表达式不可能是正确的方法(我链接到我听说过的唯一这样的替代方案)。如果您认为这值得一票否决,请成为我的客人...
      • @jarandaf,字典没有多大帮助。如果您遇到诸如“bicycled”或“bicycling”之类的屈折动词或变音动词(swam、dove),除非您使用词干,否则不定式字典将无济于事。此外,与 Sean 的示例一样,在该句子中很难找到动词“buffalo”。您可以使用浅层解析器,但深度概率解析模型更适合标记。
      【解决方案3】:

      虽然一年后,但我从西北大学找到了一个非常有用的工具,叫做MorphAdorner。

      它处理各种情况,例如词形还原、语言识别、名称识别、解析器、句子拆分器等。

      方便好用。

      【讨论】:

        【解决方案4】:

        这实际上是 NLP(自然语言处理)中一项非常艰巨的任务。仅靠正则表达式是不够的。举个例子,“training”这个词——它既可以用作动词也可以用作名词(“I'm going to the training session”)。显然,正则表达式将无法区分两者之间的区别。也有问题,“-ed”是过去时动词的常用结束方式,但在“厌恶”的情况下会失败。

        有一些技术可以为您提供很好的(不是完美的,但很好的)指示给定单词是否是动词 - 它们在计算上也可能非常昂贵。

        所以你应该问自己的第一个问题(在我看来),是什么质量的答案与你感兴趣的处理时间。

        【讨论】:

        • 这一切的主要问题是该项目包括动词名词化(只是一个uni项目),所以所有的“努力”都应该集中在这部分,名词化。具体来说,我遵循这个模型:acl.ldc.upenn.edu/P/P00/P00-1037.pdf)。该项目包括给定一个文本,找到该文本中的所有动词,并为每个动词提出多个名词化。所以第一步(找动词),应该尽量简单……但是我不能使用任何解析器,这是不允许的。
        • @Turquesa 我只是在这里提出一个想法,但请告诉我它是否有效(或者更有可能为什么它不起作用)。如果您将使用字典识别所有动词,并且在一系列动词的情况下(一个紧接着另一个)只取最后一个。
        猜你喜欢
        • 1970-01-01
        • 2014-12-30
        • 1970-01-01
        • 2011-07-06
        • 2011-05-27
        • 1970-01-01
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        相关资源
        最近更新 更多