Python 如何使用空间匹配器选择单个组
我正在尝试从NLTK转移到Spacy,我需要的功能之一是将“子树”与正则表达式匹配。 在简单的情况下,Matcher做得很好:Python 如何使用空间匹配器选择单个组,python,regex,nlp,spacy,Python,Regex,Nlp,Spacy,我正在尝试从NLTK转移到Spacy,我需要的功能之一是将“子树”与正则表达式匹配。 在简单的情况下,Matcher做得很好: matcher = Matcher(nlp.vocab) matcher.add('GRAMMAR', None, [{'TAG': 'JJ', 'OP': '+'}, {'POS': NOUN', 'OP': '+'}]) 当我只需要匹配其中一个组时,问题就开始了。例如,如果我需要一个名词跟在一个形容词后面,但我只想匹配这个名词,而不是整个模式。 在一个简单的正则表
matcher = Matcher(nlp.vocab)
matcher.add('GRAMMAR', None, [{'TAG': 'JJ', 'OP': '+'}, {'POS': NOUN', 'OP': '+'}])
当我只需要匹配其中一个组时,问题就开始了。例如,如果我需要一个名词跟在一个形容词后面,但我只想匹配这个名词,而不是整个模式。
在一个简单的正则表达式中,我会将所需的组放在括号中,如下所示(使用一个虚函数):
我的临时解决方案是只获取回调函数中的一些令牌,如下所示:
hits = []
matcher = Matcher(nlp.vocab)
matcher.add('GRAMMAR', lambda matcher, doc, i, matches: hits.append(('GRAMMAR', doc[matches[i][1]+1:matches[i][2]].text)), [{'TAG': 'JJ', 'OP': '+'}, {'POS': 'NOUN', 'OP': '+'}])
但是,此解决方案存在以下几个问题:
*
,+
),我不一定知道所需匹配从哪个标记开始/结束Matcher
对象中的解决方案hits = []
matcher = Matcher(nlp.vocab)
matcher.add('GRAMMAR', lambda matcher, doc, i, matches: hits.append(('GRAMMAR', doc[matches[i][1]+1:matches[i][2]].text)), [{'TAG': 'JJ', 'OP': '+'}, {'POS': 'NOUN', 'OP': '+'}])