spaCy 的标记化是非破坏性的,因此它始终代表原始输入文本,并且从不添加或删除任何内容。这是一个核心原则Doc
对象:你应该always能够重建和再现原始输入文本。
当你can解决这个问题,通常有更好的方法来实现同样的事情而不破坏输入文本↔Doc
文本一致性。一种解决方案是添加一个自定义扩展属性 like 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']
您还可以使用以下命令使其变得更复杂Matcher or PhraseMatcher在上下文中查找标记序列并将其标记为已排除。
另外,为了完整起见:如果您确实想更改中的令牌Doc,你可以通过构建一个新的来实现这一点Doc
对象与words
(字符串列表)和可选spaces
(布尔值列表,指示标记后面是否有空格)。构建一个Doc
使用词性标签或依赖标签等属性,您可以调用Doc.from_array方法,其中包含要设置的属性和值的 numpy 数组(所有 ID)。