Построение графов с помощью библиотеки PyViz на основе текстового анализа ESG стратегий отдельных компаний

Kate

Administrator
Команда форума
В настоящее время многие страны мира сконцентрировались на таком важном направлении как экологическое, социальное и корпоративное управление организациями (ESG). Под этим сложным понятием чаще всего подразумевают то, каким образом деятельность компаний влияет на решение экологических проблем окружающей среды, поведенческие настроения в обществе, а также насколько эффективно ведется управление. Проведем анализ нескольких российских компаний и выясним, как применяются принципы ESG. Для этого нам потребуются: данные новостных источников по выбранной тематике, инструменты для построения графов и текстового анализа.

Анализ огромного потока неструктурированной текстовой информации является одним из постоянных действий любого человека. Для того, чтобы провести быстрый обзор ключевых моментов существуют современные технологичные инструменты, такие как графы знаний или knowledge graph. Графы знаний используются для наглядного представления взаимосвязей между людьми, событиями, предметами и т.д.

Данные для обработки были предварительно собраны из новостных источников с веб-сайтов организаций, а также дополнительно проведены простые манипуляции:

  • местоимения заменены на наименования компаний;
  • предложения разделены в список.
Чтобы построить knowledge graph необходимо в предложении определить несколько основных сущностей, а именно: субъекта, объекта и отношения между ними. В качестве субъектов и объектов чаще всего выступают следующие части речи: простые или составные имена существительные, а также связанные с ними прилагательные в отдельных случаях. Функцию построения отношений между частями речи в русском языке могут выполнять как глаголы, так и существительные. Подготовленный набор данных выглядит следующим образом:

19ceb7f096a7183f17dd44247722e289.png

Процесс построения графа знаний состоит из нескольких этапов: анализ текстовой информации, затем построение графической интерпретации. Для работы с текстовой информацией используется библиотека spacy, а для построения графов – связка Networkx и PyViz.

· подключение необходимых библиотек:

import re
import pandas as pd
import spacy
import networkx as nx
from pyvis.network import Network
nlp = spacy.load("ru_core_news_sm")
df = pd.DataFrame(list_, columns=['Предложения'])
df.head(4)
· выделение основных сущностей с помощью библиотеки spacy и загруженной модели, обученной для русского языка:

def get_object_subject(str_):
object_,subject_ = "", ""
prefix, postfix = "", ""
flag1, flag2 = False, False
for token in nlp(str_):
if token.dep_ != "punct":

if token.dep_=="nsubj":
subject_ = token.text
flag1 = True

if token.dep_=="obj":
object_ = token.text
flag2 = True

if token.dep_.endswith("mod") == True:
prefix = token.text

if token.dep_.endswith("ppos") == True:
postfix = token.text

if prefix != "" :
if flag1:
subject_ = prefix +" "+ subject_
flag1 = False
if flag2:
object_ = prefix +" "+ object_
flag2 = False
prefix = ""

if postfix != "" :
if flag1:
subject_ = subject_ + " " + postfix
flag1 = False
if flag2:
object_ = object_ + " " + postfix
flag2 = False
postfix = ""

return [subject_.strip(), object_.strip()]
object_subject = [get_object_subject(i) for i in df["Предложения"]]
relations = [get_relation(i) for i in df['Предложения']]
· формируем набор данных для построения графа:

result_df = pd.DataFrame({'subject_':[i[0] for i in object_subject], 'object_':[i[1] for i in object_subject], 'relation_':relations})
· обработанные данные выглядят следующим образом:

75d4c3f478a05439fbeafc7a7d862241.png

· построение графа на основе выделенных из предложений параметров:

G=nx.from_pandas_edgelist(result_df, "subject_", "object_",
edge_attr=["relation_"], create_using=nx.MultiDiGraph())
nt = Network(height='750px', width='100%')
nt.from_nx(G)
for node in nt.nodes:
if node['label'] == 'Компания Магнит':
node['color'] = 'red'
elif node['label'] == 'Компания Роснефть':
node['color'] = 'yellow'
elif node['label'] == 'Компания Норникель':
node['color'] = 'blue'
else :
node['color'] = 'grey'
nt.show('nx.html')
Полученный граф выглядит:

7fd3d1f3ec6db9ac97bd862927549eff.png

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

Источник статьи: https://habr.com/ru/post/567688/
 
Сверху