SpaCy:如何为竖线“|”手动设置 POS 标签?

SpaCy: How to manually set POS tag for vertical bar "|"?

当文本被 SpaCy 标记时,竖线“|”根据上下文分配不同的POS标签,例如“ADV”,“DEL”......而我想要“|”被识别为“PUNC”。有没有办法强制这个 POS 为“|” ?

我试过这个命令,但没有用。

nlp.tokenizer.add_special_case('|', [{ORTH: '|', POS: PUNC}])

看起来您正在使用 中的方法来覆盖标签,但这似乎是针对旧版本的 spaCy;它在 2.3.1 中不起作用。

您可以在令牌上设置值,因此您可以这样做:

import spacy
from spacy.symbols import NOUN
nlp = spacy.load('en')

words = nlp("...")
for word in words:
    if word.text == "|":
        word.pos = NOUN

但是,在管道引起问题的任何地方添加异常可能会更容易。


为管道添加例外情况如下所示。

for word in nlp(...):
    pos = word.pos_
    if word.text == "|":
        pos = "PUNCT"
    
    do_stuff(word, pos)

我会在管道中添加一个简单的管道,就在 tagger :

之后
def pos_postprocessor_pipe(doc) :
    for token in doc :
        if token.text == '|':
            token.pos_ = 'PUNCT'
    return doc

 nlp = spacy.load("en_core_web_sm")
 nlp.add_pipe(pos_postprocessor_pipe, name="pos_postprocessor", after='tagger')