gpt4 book ai didi

python - 如何从 spaCy 文档中过滤标记

转载 作者:太空狗 更新时间:2023-10-30 02:08:06 30 4
gpt4 key购买 nike

我想使用 spaCy 解析文档并应用标记过滤器,以便最终的 spaCy 文档不包含过滤后的标记。我知道我可以过滤标记序列,但我对实际的 Doc 结构很感兴趣。

text = u"This document is only an example. " \
"I would like to create a custom pipeline that will remove specific tokesn from the final document."

doc = nlp(text)

def keep_token(tok):
# This is only an example rule
return tok.pos_ not not in {'PUNCT', 'NUM', 'SYM'}

final_tokens = list(filter(keep_token, doc))

# How to get a spacy.Doc from final_tokens?

我试图从标记列表中重建一个新的 spaCy Doc,但 API 并不清楚如何去做。

最佳答案

我很确定您到目前为止已经找到了您的解决方案,但因为它没有发布在这里,我认为添加它可能会有用。

您可以通过将 doc 转换为 numpy 数组、从 numpy 数组中删除然后转换回 doc 来删除标记。

代码:

import spacy
from spacy.attrs import LOWER, POS, ENT_TYPE, IS_ALPHA
from spacy.tokens import Doc
import numpy

def remove_tokens_on_match(doc):
indexes = []
for index, token in enumerate(doc):
if (token.pos_ in ('PUNCT', 'NUM', 'SYM')):
indexes.append(index)
np_array = doc.to_array([LOWER, POS, ENT_TYPE, IS_ALPHA])
np_array = numpy.delete(np_array, indexes, axis = 0)
doc2 = Doc(doc.vocab, words=[t.text for i, t in enumerate(doc) if i not in indexes])
doc2.from_array([LOWER, POS, ENT_TYPE, IS_ALPHA], np_array)
return doc2

# load english model
nlp = spacy.load('en')
doc = nlp(u'This document is only an example. \
I would like to create a custom pipeline that will remove specific tokens from \
the final document.')
print(remove_tokens_on_match(doc))

您可以查看我回答的类似问题 here .

关于python - 如何从 spaCy 文档中过滤标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45375488/

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