在管道处理过程中,是否可以从spaCy文档中删除令牌



我正在使用spaCy(一个很棒的Python NLP库)来处理许多非常大的文档,然而,我的语料库中有许多常见的单词,我想在文档处理管道中消除这些单词。有没有一种方法可以从管道组件中的文档中删除令牌?

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

虽然可以解决这个问题,但通常有更好的方法可以在不破坏输入文本的情况下实现同样的效果↔Doc文本一致性。一种解决方案是根据您想要使用的任何目标,向令牌添加自定义扩展属性(如is_excluded):

from spacy.tokens import Token
def get_is_excluded(token):
# Getter function to determine the value of token._.is_excluded
return token.text in ['some', 'excluded', 'words']
Token.set_extension('is_excluded', getter=get_is_excluded)

在处理Doc时,您现在可以对其进行过滤,只获取未排除的令牌:

doc = nlp("Test that tokens are excluded")
print([token.text for token if not token._.is_excluded])
# ['Test', 'that', 'tokens', 'are']

您还可以使用MatcherPhraseMatcher在上下文中查找标记序列并将其标记为已排除,从而使此操作更加复杂。

此外,为了完整性:如果您确实想更改Doc中的令牌,可以通过使用words(字符串列表)和可选的spaces(指示令牌后面是否有空格的布尔值列表)构建一个新的Doc对象来实现这一点。要构造具有词性标签或依赖标签等属性的Doc,您可以调用具有要设置的属性和值(所有ID)的numpy数组的Doc.from_array方法。

最新更新