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')
当文本被 SpaCy 标记时,竖线“|”根据上下文分配不同的POS标签,例如“ADV”,“DEL”......而我想要“|”被识别为“PUNC”。有没有办法强制这个 POS 为“|” ?
我试过这个命令,但没有用。
nlp.tokenizer.add_special_case('|', [{ORTH: '|', POS: PUNC}])
看起来您正在使用
您可以在令牌上设置值,因此您可以这样做:
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')