如何在SpaCy中使用管道组件修改spacy.tokens.doc.Doc令牌

时间:2019-07-24 16:04:57

标签: python-3.x spacy

我正在使用SpaCy预处理一些数据。但是,我仍然坚持如何修改spacy.tokens.doc.Doc类的内容。

例如,在这里:

npc = spacy.load("pt")
def pre_process_text(doc) -> str:
    new_content = ""
    current_tkn = doc[0]
    for idx, next_tkn in enumerate(doc[1:], start=0):
        # Pre-process data
        # new_content -> currently, it is the way I'm generating
        # the new content, concatenating the modified tokens

    return new_content
nlp.add_pipe(pre_process_text, last=True)

在上述代码内的注释部分,有些标记我想从doc参数中删除,或者我想更改其标记文本内容。换句话说,我可以通过(1)完全删除令牌或(2)更改令牌内容来修改spacy.tokens.doc.Doc的内容。

是否有一种方法可以使用已修改的令牌创建另一个spacy.tokens.doc.Doc,但又将Vocabnpc = spacy.load("pt")隔离。

当前,我通过返回字符串来生成新内容,但是有没有办法返回修改后的文档?

1 个答案:

答案 0 :(得分:0)

spaCy resolve(route: ActivatedRouteSnapshot): Promise<any> { const promise = new Promise((resolve, reject) => { if (route) { console.log(route.params); console.log(route.queryParams); } } return promise; } 的核心原则之一是should always represent the original input

  

spaCy的标记化是非破坏性的,因此它始终代表原始输入文本,并且从不添加或删除任何内容。这是Doc对象的核心原理:您应该始终能够重建和再现原始输入文本。

     

虽然您可以 解决此问题,但通常有更好的方法可以实现相同的目的而又不会破坏输入文本↔Doc的文本一致性。

我已经概述了一些在不破坏my comment here中原始输入的情况下排除令牌的方法。

或者,如果您确实要修改Doc,则组件可以create a new Doc object并返回它。 Doc对象包含一个词汇表(例如原始文档的词汇表),字符串Doc列表和words的可选列表,布尔值列表,指示该位置的标记是否为后面是否有空格。

spaces

请注意,您可能要先在管道中先添加此组件,然后再运行其他组件。否则,您将失去先前组件分配的任何语言功能(例如词性标签,依赖项等)。