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

jar*_*daf 8 java regex nlp

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

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

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

先感谢您!

PS:

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

dmc*_*cer 13

部分语音标记

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

执行POS标记

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

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)
Run Code Online (Sandbox Code Playgroud)

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

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

理解标记集

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


Sea*_*oyd 4

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

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

水牛 水牛 水牛 水牛 水牛* 水牛* 水牛 水牛

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

您需要一个像斯坦福 NLP这样的自然语言解析器。我从未使用过,所以我不知道你的结果会有多好,但比使用正则表达式更好,我可以告诉你。