2010-08-08 94 views
11

我正在寻找一种方式,在过去,现在和将来的时态中给出英语文本中的动词短语。现在我正在使用NLTK,做一个POS(词性标注)标记,然后计算'VBD'来计算过去的时态。虽然这还不够准确,所以我想我需要进一步去分块,然后分析VP块以获得特定的时态模式。有没有什么可以做到这一点?任何进一步的阅读可能有帮助? NLTK book主要关注NP块,我可以在VP块上找到很少的信息。使用NLTK检测英语动词时态

+0

你的逻辑存在缺陷。如果一个chunker可以检测到NP,那么它必须能够检测到VP。 – 2010-08-09 05:21:51

+0

当然,但我最感兴趣的是进一步的VP分析 - 如何区分不同的时态。 – 2010-08-09 10:54:00

回答

9

您的确切答案取决于您打算使用哪个chunker,但列表解析会带来很长的路要走。这会让你知道使用不存在的chunker的动词短语的数量。

len([phrase for phrase in nltk.Chunker(sentence) if phrase[1] == 'VP']) 

您可以采用更细粒度的方法来检测数字的时态。

+0

感谢您的指针,这就是我将要使用的 - 我的下一个问题是是否有某种东西可以检测时态模式。对于每个VP,我想知道它是什么时候。 – 2010-08-09 10:55:05

+2

我实际上设法解决了我的问题,因此将此标记为接受的答案。下面的文章真的很有帮助:http://streamhacker.com/2009/02/23/chunk-extraction-with-nltk/ – 2010-08-16 12:46:57

+0

嗨迈克尔,很高兴听到事情对你来说很好! – 2010-08-17 00:04:59

1

您可以使用Berkeley ParserStanford Parser。但是我不知道是否有Python接口可用。

+0

非常感谢,这可能是一个选项 - 但是由于我已经大量使用NLTK,因此可能需要进行相当多的切换。虽然会看。 – 2010-08-09 10:59:35

+1

在NLTK中有一个Stanford Parser的界面。你可以按如下方式使用它:'tagger = nltk.tag.stanford.POSTagger('models/german-fast.tagger', 'stanford-postagger.jar')'你可能必须先将字符串编码为UTF-8 (至少对于德国模式)。 – 2013-03-21 16:44:26

+2

伯克利上面拼写错误。我不能建议错误修复的答案。 – Streeter 2015-11-18 23:37:40