我正尝试从NLTK转移到Spacy,我需要的功能之一是将“子树”与regex匹配。 在简单的情况下,Matcher做得很好:
matcher = Matcher(nlp.vocab)
matcher.add('GRAMMAR', None, [{'TAG': 'JJ', 'OP': '+'}, {'POS': NOUN', 'OP': '+'}])
当我只需要匹配一组时,问题就开始了。例如,如果我需要一个形容词后面的名词,但我只想匹配该名词而不是整个模式。 在一个简单的正则表达式中,我将所需的组放在括号中(如下所示)(具有虚函数):
r'JJ+(NOUN+)'
我的临时解决方案是仅在回调函数中获取某些令牌,如下所示:
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
对象中的解决方案。有什么想法吗?