我正在尝试使用 NLTK 识别名词短语,但在正则表达式上仍然有点绿色。
我最初使用的是这样的正则表达式:
NP: {<PP\$>?<JJ.*>*<NN.*>+}
但我发现我不断收到以介词结尾的表达式,所以像:“Demonstration projects for”,以介词“for”结尾的东西是匹配的,这是不可取的。(我还没有看到,即使使用上面的语法——据我所知,这应该总是以至少一个名词结尾,对吧?)
因此,我通过将量词更改为:
NP: {<PP\$>?<JJ.*>*<NN.*>+?}
但现在我得到了像“奥尔良”这样的比赛,而不是“新奥尔良”。似乎它不再匹配短语了。
最后,我尝试使用前瞻(我在这里了解到)来显式删除终端介词:
NP: {((?!<IN>$)(<PP\$>?<JJ.*>*<NN.*>+))+}
这根本没有效果-我仍然将“示范项目”之类的东西作为匹配项。我怎样才能让我的名词短语没有终结介词?
如果有一种更简单、更优化的方式来获取名词短语,那也将不胜感激!