Извлечение несоответствующих (пространственных) выходных соединений зависимостей - PullRequest
0 голосов
/ 02 марта 2020

Я использую инструмент визуализации смещения из spacy, чтобы посмотреть на зависимости между словами в предложении. Это выглядит так:

text = 'European authorities fined Google a record $5.1 billion on Wednesday for abusing its power in the mobile phone market and ordered the company to alter its practices
print(displacy.render(nlp(text), jupyter=True, style='ent'))
print(displacy.render(nlp(text), style='dep', jupyter = True, options = {'distance': 120}))

enter image description here

Есть ли способ извлечь соединения, которые устанавливаются стрелками путем индексации слов в строке? Например, на изображении ниже, посмотрите на связи в «Европейские власти оштрафовали Google». В любом случае, создать следующий фрейм данных (каждое слово в столбце слов и каждое слово, к которому относится это слово в столбце соединения)?

1014 *

1 Ответ

2 голосов
/ 02 марта 2020

Пространство предоставляет множество атрибутов, которые вы можете использовать для этой цели, таких как предки или потомки . Обратите внимание, что эти атрибуты возвращают генераторы, следовательно, необходимо привести их к спискам, а затем к строке

. Вот пример, где я использовал атрибут children

text = 'European authorities fined Google a record $5.1 billion on Wednesday for abusing its power in the mobile phone market and ordered the company to alter its practices'
doc = nlp(text)
words = []
a_network = []
for w in doc:
  words.append(w)
  network = [t.text for t in list(w.children)]
  a_network.append(", ".join(network))

df = pd.DataFrame({"word":words,"network":a_network})

print(df)

Выходные данные будет

           word                               network
0      European                                      
1   authorities                              European
2         fined  authorities, Google, record, on, for
3        Google                                      
4             a                                      
5        record                            a, billion
6             $                                      
7           5.1                                      
8       billion                                $, 5.1
...
...