gpt4 book ai didi

python-3.x - 如何使用 SpaCy 中的管道组件修改 spacy.tokens.doc.Doc token

转载 作者:行者123 更新时间:2023-12-03 23:35:55 25 4
gpt4 key购买 nike

我正在使用 SpaCy 来预处理一些数据。但是,我被困在如何修改 spacy.tokens.doc.Doc 的内容上。类(class)。

例如,这里:

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 中删除一些标记。 param,或者我想更改其标记文本内容。也就是说,我可以修改 spacy.tokens.doc.Doc的内容来自 (1) 完全删除 token ,或 (2) 改变 token 内容。

有没有办法创建另一个 spacy.tokens.doc.Doc使用那些修改过的 token 但保留 Vocab来自 npc = spacy.load("pt") .

目前,我通过返回一个字符串来生成新内容,但是有没有办法返回修改后的 Doc?

最佳答案

spaCy的核心原则之一Doc是吗should always represent the original input :

spaCy's tokenization is non-destructive, so it always represents the original input text and never adds or deletes anything. This is kind of a core principle of the Doc object: you should always be able to reconstruct and reproduce the original input text.

While you can work around that, there are usually better ways to achieve the same thing without breaking the input text ↔ Doc text consistency.



我在 my comment here 中概述了在不破坏原始输入的情况下排除 token 的一些方法.

或者,如果你真的想修改 Doc ,您的组件可以 create a new Doc object并返回。 Doc对象接受一个词汇(例如原始文档的词汇),一个字符串列表 words和一个可选列表 spaces ,一个 bool 值列表,指示该位置的标记是否后跟一个空格。

from spacy.tokens import Doc

def pre_process_text(doc):
# Generate a new list of tokens here
new_words = create_new_words_here(doc)
new_doc = Doc(doc.vocab, words=new_words)
return new_doc

请注意,您可能希望添加此组件 第一 在其他组件运行之前在管道中。否则,您将丢失之前组件分配的任何语言特征(如词性标签、依赖项等)。

关于python-3.x - 如何使用 SpaCy 中的管道组件修改 spacy.tokens.doc.Doc token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57187116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com