К каким цепочкам кореферентности относится каждое предложение в NeuralCoref?
Я использую neuralcoref для задачи разрешения кореферентности в тексте.
Я хочу знать, что в каждом предложении есть упоминания о кластерах кореферентности. Например, в предложении 1 есть упоминания из кластеров кореферентности 1 и 4; В предложении 2 есть упоминания из кластеров кореферентности 10, 14.
Как я могу это сделать?
1 ответ
Вы можете попробовать пройтись по словам в каждом предложении и заполнить словарь предложений -> кластеры, если это слово является частью кластера. Однако предполагается, что диапазон представляет собой одно слово, которое вы можете попробовать расширить до нескольких слов (биграмм или триграмм), если вы хотите обрабатывать кластеры, в которых ключи состоят из нескольких слов.
import spacy
import neuralcoref
nlp = spacy.load('en')
neuralcoref.add_to_pipe(nlp)
doc = nlp('Angela lives in Boston. She is Happy. Nikki is her new friend. She is jolly too.')
print('*** cluster : tokens mapping ***')
print(doc._.coref_clusters)
mapping = {}
for sent in doc.sents:
mapping[sent] = set()
for idx in range(1, len(sent)):
span = sent[idx-1:idx] # edit this to handle n-grams
if span._.is_coref:
key = span._.coref_cluster.main
mapping[sent].add(key)
print('*** sentence : clusters mapping ***')
print(mapping)
Результат выглядит так:
*** cluster : tokens mapping ***
[Angela: [Angela, She, her], Nikki: [Nikki, She]]
*** sentence : clusters mapping ***
{Angela lives in Boston.: {Angela}, She is Happy.: {Angela}, Nikki is her new friend.: {Nikki, Angela}, She is jolly too.: {Nikki}}