我一直在尝试使用动词时态和情绪为 spacy 匹配器创建一个特定的模式。
我发现了如何使用 model.vocab.morphology.tag_map[token.tag_] 访问使用 spacy 解析的单词的形态特征,当动词处于虚拟语气模式(我感兴趣的模式)时,它会打印出这样的内容:
{'Mood_sub':正确,'Number_sing':正确,'Person_third':正确,'Tense_pres':正确,'VerbForm_fin':正确,74:100}
但是,我想要一种像这样的模式来重新标记特定的动词短语:
模式 = [{'TAG':'Mood_sub'}, {'TAG':'VerbForm_ger'}]
对于像“Que siga aprendiendo”这样的西班牙语短语,“siga”的标签中具有“Mood_sub”= True,而“aprendiendo”的标签中具有“VerbForm_ger”= True。但是,匹配器未检测到此匹配。
谁能告诉我这是为什么以及如何解决它?这是我正在使用的代码:
model = spacy.load('es_core_news_md')
text = 'Que siga aprendiendo de sus alumnos'
doc = model(text)
pattern = [{'TAG':'Mood_sub'}, {'TAG':'VerbForm_ger'}]
matcher.add(1, None, pattern)
matches = matcher(doc)
for i, start, end in matches:
span = doc[start:end]
if len(span) > 0:
with doc.retokenize() as retokenizer:
retokenizer.merge(span)
The morph
spacy v2 中尚未完全实现支持,因此无法使用直接变形值,例如Mood_sub
.
相反,我认为最好的选择是Matcher
是使用REGEX
超过合并/扩展TAG
价值观。它不会特别优雅,但它应该可以工作:
import spacy
from spacy.matcher import Matcher
nlp = spacy.load('es_core_news_sm')
doc = nlp("Que siga aprendiendo de sus alumnos")
assert doc[1].tag_ == "AUX__Mood=Sub|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin"
matcher = Matcher(nlp.vocab)
matcher.add("MOOD_SUB", [[{"TAG": {"REGEX": ".*Mood=Sub.*"}}]])
assert matcher(doc) == [(513366231240698711, 1, 2)]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)