Удалить слово в промежутке из SpaCy? - PullRequest
0 голосов
/ 06 сентября 2018

Я разбираю предложение со Spacy следующим образом:

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

Мне интересно, есть ли способ удалить слово в промежутке, сохранив при этом формат оставшихся слов как предложение. Такие как

del span[3]

, который может дать предложение типа

Это немного.

Если некоторые другие методы без SpaCy могли бы достичь того же эффекта, это тоже было бы здорово.

1 Ответ

0 голосов
/ 27 сентября 2018

Для этого есть обходной путь.

Идея состоит в том, что вы создаете пустой массив из документа, удаляете ненужную запись и затем создаете документ из нового массивного документа.

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)

Надеюсь, это поможет!

...