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

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

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

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

  • местоимения заменены на наименования компаний;
  • предложения разделены в список.

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

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

Процесс построения графа знаний состоит из нескольких этапов: анализ текстовой информации, затем построение графической интерпретации. Для работы с текстовой информацией используется библиотека 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})
  • обработанные данные выглядят следующим образом:
Построение графов с помощью библиотеки PYVIZ на основе текстового ESG стратегий отдельных компаний
  • построение графа на основе выделенных из предложений параметров:
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')

Полученный граф выглядит:

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

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

77 показов
312312 открытия
Начать дискуссию