我有2句话:
procedure, when performed, some other text
procedure, limited, some other text
我想选择VBN,后面带逗号:
import nltk
sents = [
['procedure', ',', 'when', 'performed', ',', 'some', 'other', 'text'],
['procedure', ',', 'limited', ',', 'some', 'other', 'text']
]
tokens = [nltk.pos_tag(x) for x in sents]
grammar = r"""
CHUNK: {<VBN><,>}
"""
chunker = nltk.RegexpParser(grammar)
for x in tokens:
tree = chunker.parse(x)
print tree
它有效:
(S procedure/NN ,/, when/WRB (CHUNK performed/VBN ,/,) some/DT other/JJ text/NN)
(S procedure/NN ,/, (CHUNK limited/VBN ,/,) some/DT other/JJ text/NN)
但是当VBN用逗号包裹时,我需要选择它。某种 re.compile(r'(?:,)\s*([a-z]+ed),')
有什么方法可以在 RegexpParser 语法中使用 (?:...)
吗?
最佳答案
在这种情况下,需要将逗号移出 {}
:
grammar = r"""
CHUNK: <,>{<VBN><,>}
"""
在这种情况下,系统将完全满足我的需要。
关于regex - 如何编写 nltk 语法来检查但不捕获某些文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46214001/