【问题标题】:Remove a word in a span from SpaCy?从 SpaCy 中删除一个跨度的单词?
【发布时间】:2018-09-05 21:24:22
【问题描述】:

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

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

我想知道是否有办法删除跨度中的一个单词,同时仍然保持剩余单词的格式像一个句子。比如

del span[3]

可以产生类似

的句子

这是一些。

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

【问题讨论】:

    标签: python-3.x nlp spacy


    【解决方案1】:

    有一个解决方法。

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

    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)
    

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      另一个答案要求您丢失 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]))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 2017-02-09
        • 1970-01-01
        • 1970-01-01
        • 2017-07-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多