Как я могу исправить ошибку для реализации ссылочного разрешения с использованием библиотеки?

#python #python-3.x #nlp #spacy

#python #python-3.x #nlp #пространственный

Вопрос:

что я хотел бы сделать

Я хотел бы заменить местоимения на существительные, как показано ниже, используя Python 3.6 и spaCy neuralcoref.

 #input
'My sister has a dog. She loves him.'
'Angela lives in Boston. She is quite happy in that city.'

#output
'My sister has a dog. My sister loves a dog.'
'Angela lives in Boston. Angela is quite happy in Boston.'
  

ошибка

Как я могу исправить ошибку, чтобы получить соответствующий результат? Если у вас есть какие-либо идеи, пожалуйста, поделитесь ими со мной.

 AttributeError: 'spacy.tokens.doc.Doc' object has no attribute 'replace'
  

текущий код

Примером кода использования neuralcoref является следующий URL:https://spacy.io/universe/project/neuralcoref

 import spacy
import neuralcoref

nlp = spacy.load('en')
neuralcoref.add_to_pipe(nlp)
doc1 = nlp('My sister has a dog. She loves him.')
print(doc1._.coref_clusters)
print(doc1._.coref_clusters[0][1])
print(len(doc1._.coref_clusters))
for i in range(1, len(doc1._.coref_clusters) 1):
  doc_new = doc1.replace(doc1._.coref_clusters[0][i], doc1._.coref_clusters[1][i])

print(doc_new)

#output
[My sister: [My sister, She], a dog: [a dog, him]]
She
2
  

Комментарии:

1. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Traceback») в вопрос (не комментарий) в виде текста (не скриншота). Есть и другая полезная информация.

2. сначала посмотрите print(doc1) и print(type(doc1)) — как по мне, это ненормально, string у которого есть функция replace() . Возможно, вам следует присвоить текст переменной text = 'My sister has a dog. She loves him.' , а затем вы могли бы использовать text.replace()

Ответ №1:

neuralcoref имеет специально выделенный doc._.coref_resolved метод для подобных задач:

 import spacy
import neuralcoref

nlp = spacy.load('en_core_web_sm')
neuralcoref.add_to_pipe(nlp)
texts = ['My sister has a dog. She loves him.','Angela lives in Boston. She is quite happy in that city.']

docs = nlp.pipe(texts)
inp = []
out = []
for doc in docs:
    inp.append(doc.text)
    out.append(doc._.coref_resolved)

# desired output
print("Input:",inp)
print("Output:", out)
Input: ['My sister has a dog. She loves him.', 'Angela lives in Boston. She is quite happy in that city.']
Output: ['My sister has a dog. My sister loves a dog.', 'Angela lives in Boston. Angela is quite happy in Boston.']