Nlp 使用基于空间规则的匹配,是否可以将两个关键字与中间最多一定数量的通配符进行匹配?

Nlp 使用基于空间规则的匹配,是否可以将两个关键字与中间最多一定数量的通配符进行匹配?,nlp,pattern-matching,spacy,Nlp,Pattern Matching,Spacy,例如,我试图匹配两个关键字,中间最多有五个通配符。我可以添加五个具有不同通配符数的模式,但这不是一个好的解决方案。是否有类似于{“OP”:“+5”}或其他解决方案的选项 例如: 导入空间 从spacy.matcher导入matcher nlp=spacy.load(“en_core\u web\u sm”) doc=nlp(“这是一个非常漂亮的绿苹果。每天一个苹果…!”) matcher=matcher(nlp.vocab) pattern=[{'ORTH':'is'},{“OP”:“+”},{

例如,我试图匹配两个关键字,中间最多有五个通配符。我可以添加五个具有不同通配符数的模式,但这不是一个好的解决方案。是否有类似于
{“OP”:“+5”}
或其他解决方案的选项

例如:

导入空间
从spacy.matcher导入matcher
nlp=spacy.load(“en_core\u web\u sm”)
doc=nlp(“这是一个非常漂亮的绿苹果。每天一个苹果…!”)
matcher=matcher(nlp.vocab)
pattern=[{'ORTH':'is'},{“OP”:“+”},{“ORTH”:“apple”}]
matcher.add('test',None,pattern)
span=[doc[start:end]用于匹配\u id,开始,结束于匹配器(doc)]
对于跨度中的跨度:
打印(跨距)
这将提供两个匹配项:

是一个非常好的绿色苹果
是一个非常好的绿色苹果。一个苹果


但我只想要第一个。一般来说,它应该可以工作,因此拆分句子等不是一个解决方案。

您可以按如下方式执行:

import spacy
from spacy.matcher import Matcher
nlp = spacy.load("en_core_web_sm")
doc = nlp("This is a really nice, green apple. One apple a day ...!")
matcher = Matcher(nlp.vocab)

pattern = [{'ORTH': 'is'}]
for i in range(0,5):
    pattern.append({"OP": "?"}) 
pattern.append({"ORTH": "apple"})

matcher.add('test', None, pattern)
spans = [doc[start:end] for match_id, start, end in matcher(doc)]
for span in spans:
    print(spans)

# [is a really nice, green apple]