0

我正在尝试制作一种能够识别名词后跟形容词时的spacy模式,如下所示:

模式 = [{'POS':'NOUN'}, {'POS':'ADJ'}]

但是,我试图在形容词不是动词的分词形式的情况下例外。我的例子是西班牙语,所以我很抱歉。例如,我想查找并重新标记诸如“institución educativa”之类的东西,而不是“institución comprometida”,因为“comprometida”的标签中有 VerbForm_part=True。

我尝试添加以下内容,但它只会使模式在'institución educativa'这样的情况下停止工作:pattern = [{'POS':'NOUN'}, {'OP':'!', 'TAG':' VerbForm_part'}, {'POS':'ADJ'}]

我也试过:pattern = [{'POS':'NOUN'}, {'POS':'ADJ', 'TAG': not 'VerbForm_part'}]

总之,我需要将名词后跟形容词组合在一起,但只有某些类型的形容词,并根据它们的 TAG 属性“VerbForm_part”排除其他形容词

Spacy 有没有办法做到这一点?它是否支持其模式中的异常?

谢谢!

4

1 回答 1

0

我找到了一个解决方案,即定义我自己的匹配器并在找到匹配项时使用它重新标记:

def my_matcher(doc):
    for i in range(0, len(doc)-1):
        if i < len(doc)-1:
            token = doc[i]
            token2 = doc[i+1]
            if token.pos_ == 'NOUN':
                if token2.pos_ == 'ADJ' and 'VerbForm_part' not in model.vocab.morphology.tag_map[token2.tag_].keys():
                    span = Span(doc, i, i+2)
                    print(span)
                    with doc.retokenize() as retokenizer:
                        retokenizer.merge(span)

my_matcher(doc)

如果有人可以对此进行改进,或者告诉我 spacy 是否支持这一点,将不胜感激!

于 2020-09-02T16:53:09.827 回答