如何在标注器之前/之后在 spacy 中强制使用 pos 标签?

ped*_*vgp 2 python nlp spacy

如果我处理这句话

'将目标卡返回您的手上'

使用 spacy 和 en_web_core_lg 模型,它识别令牌如下:

将 NOUN 目标 NOUN 卡 NOUN 返回到 ADP 您的 ADJ 手 NOUN

如何强制将“返回”标记为动词?以及如何在解析器之前进行,以便解析器可以更好地解释令牌之间的关系?

在其他情况下这会很有用。我正在处理包含特定符号的文本,例如{G}. 这三个字符应该被视为一个名词,作为一个整体,并且{T}应该是一个动词。但是现在我不知道如何实现这一点,如果不开发用于标记和标记的新模型。如果我可以“强制”一个标记,我可以将这些符号替换为可以被识别为一个标记的东西,并强制它被适当地标记。例如,我可以用 SYMBOLG 替换 {G} 并强制将 SYMBOLG 标记为 NOUN。

ong*_*enz 6

编辑:此解决方案使用了 spaCy 2.0.12 (IIRC)。

为了回答你问题的第二部分,你可以添加特殊断词规则的tokeniser,如在文档中阐明这里。假设这些符号是明确的,以下代码应该可以满足您的需求:

import spacy

from spacy.symbols import ORTH, POS, NOUN, VERB

nlp = spacy.load('en')

nlp.tokenizer.add_special_case('{G}', [{ORTH: '{G}', POS: NOUN}])
nlp.tokenizer.add_special_case('{T}', [{ORTH: '{T}', POS: VERB}])

doc = nlp('This {G} a noun and this is a {T}')

for token in doc:
    print('{:10}{:10}'.format(token.text, token.pos_))
Run Code Online (Sandbox Code Playgroud)

输出为(标签不正确,但这表明已应用特殊情况规则):

This      DET       
{G}       NOUN      
a         DET       
noun      NOUN      
and       CCONJ     
this      DET       
is        VERB      
a         DET       
{T}       VERB      
Run Code Online (Sandbox Code Playgroud)

至于您问题的第一部分,将词性分配给单个单词的问题在于,它们大多在上下文之外是模棱两可的(例如“返回”名词或动词?)。所以上面的方法不会让你考虑上下文中的使用,并且很可能会产生错误。但是,spaCy 确实允许您进行基于令牌的模式匹配,因此值得一看。也许有一种方法可以做你想做的事。