从给定文本中提取英语动词

时间:2011-03-23 11:04:19

标签: java regex nlp

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

  1. 为每个动词时态创建一个模式。我必须以某种方式区分常规动词(http://en.wikipedia.org/wiki/English_verbs)和不规则动词(http://www.chompchomp.com/rules/irregularrules01.htm)。
  2. 迭代这些模式并使用它们分割文本(每个子字符串的最后一个单词应该是赋予句子完整意义的动词,我需要用于其他目的 - >名词化)
  3. 你怎么看?我想这不是一种有效的方法,但我无法想象另一种方法。

    提前谢谢!

    PS:

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

4 个答案:

答案 0 :(得分:13)

部分语音标记

使用Part-of-Speech (POS) tagger识别并提取文本中的所有动词非常简单。这些标记符标记文本中的所有单词,其中包含词性标记,表明它们是动词,名词,形容词,副词等。现代POS标记器非常准确。例如,Toutanova等。 2003年报道斯坦福的开源POS标签为新闻专线数据分配了97.24%的正确标签

执行POS标记

Java 如果你正在使用Java,那么一个很好的POS标记包就是Stanford Log-linear Part-Of-Speech Tagger。 Matthew Jockers汇总了一个关于使用此标记器的精彩教程,您可以找到here

Python 如果您更喜欢Python,则可以使用Natural Language Toolkit (nltk)中包含的POS标记器。下面给出了演示如何使用此软件包执行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上方的代码段,将设置为:

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

了解标记集

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

答案 1 :(得分:4)

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

作为一个激烈的例子:你如何在这句话中找到动词(用星号标记)?

  

Buffalo buffalo Buffalo buffalo buffalo* buffalo* Buffalo buffalo

虽然你很难遇到像这样的极端情况,但是如果你只看这个词,就会有几十个动词也可以是名词,形容词等。

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

答案 2 :(得分:0)

这在NLP(自然语言处理)中实际上是一项非常艰巨的任务。那里的正则表达式是不够的。以“训练”这个词为例 - 它可以用作动词或名词(“我要参加训练课程”)。显然,正则表达式无法区分两者之间的区别。也有问题,“-ed”是结束过去时态动词的常用方法,但在“厌恶”的情况下会使你失败。

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

因此,您应该问自己(在我看来)的第一个问题是答案的质量与您感兴趣的处理时间。

答案 3 :(得分:0)

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

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

方便易用。