我正在尝试使用NLTK识别名词短语,但在正则表达式上仍然有点绿色。
我最初使用的是这样的正则表达式:
NP: {<PP\$>?<JJ.*>*<NN.*>+}
但是我发现我一直在用介词结束表达式,所以像这样: “演示项目”,以介词“for”结尾,是匹配的,这是不可取的。 (我还没看到,即使用上面的语法 - 据我所知,这应该总是至少以一个名词结尾,对吗?)
因此,我通过将量词改为:
将量词缩减为懒惰 NP: {<PP\$>?<JJ.*>*<NN.*>+?}
但是现在我得到像“奥尔良”而不是“新奥尔良”的比赛。似乎它根本就不匹配短语了。
最后,我尝试使用前瞻(我了解了here)来明确删除终端介词:
NP: {((?!<IN>$)(<PP\$>?<JJ.*>*<NN.*>+))+}
这根本没有效果 - 我仍然把“示范项目”作为比赛。如何保持名词短语不受末道介词的影响?
如果有一种更简单,更优化的方式来获取名词短语,那也值得赞赏!