python-3.x - 从 SpaCy 中删除跨度中的单词?

标签 python-3.x nlp spacy

我正在用 Spacy 解析一个句子,如下所示:

import spacy
nlp = spacy.load("en")
span = nlp("This is some text.")

我想知道是否有一种方法可以删除跨度中的单词,同时仍然保持剩余单词的格式像句子一样。如
del span[3]

这可能会产生这样的句子

This is some.



如果其他一些没有 SpaCy 的方法也能达到同样的效果,那也太棒了。

最佳答案

有一个解决方法。

这个想法是您从文档创建一个 numpy 数组,删除不需要的条目,然后从新的 numpy 数组创建一个文档。

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

def remove_span(doc, index):
    np_array = doc.to_array([LOWER, POS, ENT_TYPE, IS_ALPHA])
    np_array_2 = numpy.delete(np_array, (index), axis = 0)
    doc2 = Doc(doc.vocab, words=[t.text for i, t in enumerate(doc) if i!=index])
    doc2.from_array([LOWER, POS, ENT_TYPE, IS_ALPHA], np_array_2)
    return doc2

# load english model
nlp = spacy.load('en')
doc = nlp("This is some text")
new_doc = remove_span(doc, 3)
print(new_doc)

希望能帮助到你!

关于python-3.x - 从 SpaCy 中删除跨度中的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52193581/

相关文章:

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

python - 将 Spacy Parser 应用于具有多处理功能的 Pandas DataFrame

python - 检查用户名是否已存在于数据库中(Python + Pymongo)

Python 3.2 UnicodeEncodeError

python - 在 Python 中找到带边界的函数的最大值

python - Python 中每个用户的排名

ruby - 在 Ruby 中检测句子元素

nlp - 使用 NLTK python 的因果句提取

python - 如何加快 Spacy 的 nlp 调用?

python-2.7 - 重新训练 spaCy 的 NER v1.8.2 - 训练量和实体类型的混合