【发布时间】:2016-12-31 15:48:37
【问题描述】:
我正在使用 NLTK 的 RegexpParser 来分块一个名词短语,我用语法将其定义为
grammar = "NP: {<DT>?<JJ>*<NN|NNS>+}"
cp = RegexpParser(grammar)
这很好,它匹配一个名词短语:
- DT 如果存在
- JJ 随便几号
- NN 或 NNS,至少一个
现在,如果我想匹配相同但将 JJ 的 whatever number 转换为 只有一个,该怎么办?所以我想匹配 DT(如果存在),one JJ 和 1+ NN/NNS。如果有多个 JJ,我只想匹配其中一个,即最接近名词的一个(如果有,则为 DT,以及 NN/NNS)。
语法
grammar = "NP: {<DT>?<JJ><NN|NNS>+}"
只有当只有一个 JJ 时才会匹配,语法
grammar = "NP: {<DT>?<JJ>{1}<NN|NNS>+}"
考虑到typical Regexp patterns,我认为这会起作用,但会引发 ValueError。
例如,在“这条漂亮的绿裙子”中,我想分块“这条绿裙子”。
那么,我该怎么做呢?
【问题讨论】:
-
语法 = "NP: {
- ?
+}" 是正确的。你能举个例子,它没有给出确定器吗? - ?
-
因为您的示例中有 2 个 JJ。你说 - “我想匹配 DT,如果它存在,一个 JJ 和 1+ NN/NNS。”
-
@RAVI,看起来你很准确,这解释了问题。您应该将其扩展为 OP 可以接受的答案。