重命名 spacy 的 pos tagger 标签
Rename spacy's pos tagger labels
我正在寻找具体的东西,但没有真正找到答案:我正在寻找重命名 spacy 的 pos 标签标签。
例如。如果我有这个代码:
def eng(textstr):
nlp = spacy.load("en_core_web_sm")
doc = nlp(textstr)
for token in doc:
print("Word: "+token.text+ " "+"POS: "+token.pos_)
我希望 token.pos_ 给我 NIA 而不是 NOUN,BO 而不是 VERB,等等...如果可以的话,我不想重新训练任何东西。 pos 标注器给出的结果对我来说足够准确,我只想重命名每个标签(名词为 NIA,动词为 BO,等等)。因此,我不想使用名词,而是希望 token.pos_ 还给我 NIA。首先这是可能的,如果是的话,我该怎么做?
我首先想到的是简单地使用 if 语句:
if token.pos_ == "NOUN"
print("Word: "+token.text+ " "+"POS: NIA")
但这无法完成,因为我必须更改大约 5000 个函数,这是不可能的。还有别的办法吗?非常感谢您的帮助!
这是不可能的。 .pos
属性专门只包含 Universal Dependency 标签,如果您尝试设置其他值,将会报错。如果需要,您可以在 .tag
属性中设置任何值,尽管它是为特定于语言的细粒度标签设计的,比 UD 标签具有更多细节。
我不太确定你为什么要这样做而不是习惯于真正的标签,我怀疑试图改变它会给你带来很多麻烦而收效甚微,比如重新定义关键字一种编程语言。
也就是说,最简单的方法可能是定义一个 custom token extension,将其命名为 my_pos
,它将真正的标签转换为您的标签。看起来有点像这样:
POS_MAP = {"NOUN": "NIA", "VERB": "BO", ...}
def my_pos_getter(token):
return POS_MAP[token.pos_]
Token.set_extension("my_pos", getter=my_pos_getter)
doc = nlp("I have a pen")
assert doc[3]._.my_pos == "NIA"
我正在寻找具体的东西,但没有真正找到答案:我正在寻找重命名 spacy 的 pos 标签标签。 例如。如果我有这个代码:
def eng(textstr):
nlp = spacy.load("en_core_web_sm")
doc = nlp(textstr)
for token in doc:
print("Word: "+token.text+ " "+"POS: "+token.pos_)
我希望 token.pos_ 给我 NIA 而不是 NOUN,BO 而不是 VERB,等等...如果可以的话,我不想重新训练任何东西。 pos 标注器给出的结果对我来说足够准确,我只想重命名每个标签(名词为 NIA,动词为 BO,等等)。因此,我不想使用名词,而是希望 token.pos_ 还给我 NIA。首先这是可能的,如果是的话,我该怎么做? 我首先想到的是简单地使用 if 语句:
if token.pos_ == "NOUN"
print("Word: "+token.text+ " "+"POS: NIA")
但这无法完成,因为我必须更改大约 5000 个函数,这是不可能的。还有别的办法吗?非常感谢您的帮助!
这是不可能的。 .pos
属性专门只包含 Universal Dependency 标签,如果您尝试设置其他值,将会报错。如果需要,您可以在 .tag
属性中设置任何值,尽管它是为特定于语言的细粒度标签设计的,比 UD 标签具有更多细节。
我不太确定你为什么要这样做而不是习惯于真正的标签,我怀疑试图改变它会给你带来很多麻烦而收效甚微,比如重新定义关键字一种编程语言。
也就是说,最简单的方法可能是定义一个 custom token extension,将其命名为 my_pos
,它将真正的标签转换为您的标签。看起来有点像这样:
POS_MAP = {"NOUN": "NIA", "VERB": "BO", ...}
def my_pos_getter(token):
return POS_MAP[token.pos_]
Token.set_extension("my_pos", getter=my_pos_getter)
doc = nlp("I have a pen")
assert doc[3]._.my_pos == "NIA"