python - 可以在管道处理期间从 spaCy 文档中删除 token 吗?

标签 python nlp spacy

我正在使用 spaCy(一个很棒的 Python NLP 库)来处理许多非常大的文档,但是,我的语料库中有一些我想在文档处理管道中消除的常用词。有没有办法从管道组件中的文档中删除 token ?

最佳答案

spaCy 的标记是 无损 ,因此它始终代表原始输入文本,从不添加或删除任何内容。这是 Doc 的核心原则。对象:您应该始终能够重建和重现原始输入文本。

虽然您可以解决这个问题,但通常有更好的方法可以在不破坏输入文本的情况下实现相同的目标 ↔ Doc文本一致性。一种解决方案是添加 custom extension attribute喜欢 is_excluded根据您要使用的任何目标,到 token :

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 时,您现在可以过滤它以仅获取未排除的 token :

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 (一个 bool 值列表,指示标记是否后跟空格)。构建 Doc使用词性标签或依赖标签等属性,您可以调用 Doc.from_array 具有要设置的属性和值(所有 ID)的 numpy 数组的方法。

关于python - 可以在管道处理期间从 spaCy 文档中删除 token 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617296/

相关文章:

python - 使用 Calendar.monthdatescalendar() 和劳动节

python - 如何为所有 nosetests 测试定义一个设置函数?

Python-获取列表中少数类的百分比

java - 计算 solr 和 java 文档中单词的 TF-IDF

python-3.x - spacy 2.2.3 FileNotFoundError : [Errno 2] No such file or directory: 'thinc\\neural\\_custom_kernels.cu' in pyinstaller

python - 在 GoogleAppEngine 中从文件生成 json 的正确方法是什么?

python-3.x - 在 16GB RAM 计算机上读取大型语言语料库,不会出现内存错误

python - NLP 反向标记化(从标记到格式良好的句子)

python - Spacy:如何获得所有描述名词的词?

c++ - 将文本解析成句子?