从SpaCy中删除span中的一个单词?

11
我正在使用Spacy解析一句话,就像下面这样:

import spacy
nlp = spacy.load("en")
span = nlp("This is some text.")
我想知道是否有一种方法可以删除一个 span 标签内的单词,同时保持剩余单词的格式像一个句子。比如:
del span[3]

可能会得到这样的一句话

这是一些东西。

如果有其他不需要SpaCy的方法能够达到相同的效果,那也就太好了。

2个回答

8

有一种解决方法。

思路是先从文档中创建一个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)

希望这能帮到您!

1
另一种答案需要您失去POS信息。
def remove_i_element_from_span(span, index):
  nlp_list = list(span)
  del nlp_list[index]
  return nlp(" ".join([e.text for e in nlp_list]))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接