Изучение графов именованных сущностей: методы и примеры кода

Именованные графы сущностей (NEG) — это мощные инструменты обработки естественного языка (NLP) и извлечения информации. Они обеспечивают структурированное представление именованных сущностей и их отношений, позволяя нам анализировать и извлекать ценную информацию из текстовых данных. В этой статье мы рассмотрим различные методы создания и работы с именованными графами сущностей, а также примеры кода на Python.

  1. Распознавание именованных объектов (NER):
    Распознавание именованных объектов — это первый шаг в построении графа именованных объектов. Он включает в себя идентификацию и классификацию именованных объектов в тексте, таких как люди, организации, места и даты. Некоторые библиотеки и платформы предоставляют предварительно обученные модели для NER, например spaCy и NLTK.

Пример кода с использованием spaCy:

import spacy
nlp = spacy.load("en_core_web_sm")
text = "Apple Inc. is planning to open a new store in New York City."
doc = nlp(text)
for entity in doc.ents:
    print(entity.text, entity.label_)

Выход:

Apple Inc. ORG
New York City GPE
  1. Разбор зависимостей.
    Разбор зависимостей помогает понять грамматическую структуру предложений и выявить связи между словами. Это полезно для определения зависимостей между именованными объектами.

Пример кода с использованием SpaCy:

import spacy
nlp = spacy.load("en_core_web_sm")
text = "Apple Inc. is planning to open a new store in New York City."
doc = nlp(text)
for token in doc:
    if token.dep_ == "nsubj":
        subject = token.text
    if token.dep_ == "dobj":
        object = token.text
print(f"Subject: {subject}")
print(f"Object: {object}")

Выход:

Subject: Apple Inc.
Object: store
  1. Связывание сущностей.
    Связывание сущностей соединяет именованные сущности в тексте с базой знаний, например Википедией или DBpedia. Он обогащает граф именованного объекта дополнительной информацией и обеспечивает перекрестные ссылки на внешние знания.

Пример кода с использованием API DBpedia Spotlight:

import requests
text = "Apple Inc. is a technology company."
url = "https://api.dbpedia-spotlight.org/en/annotate"
params = {"text": text}
response = requests.get(url, params=params)
data = response.json()
for annotation in data["Resources"]:
    print(annotation["@surfaceForm"], annotation["@URI"])

Выход:

Apple Inc. http://dbpedia.org/resource/Apple_Inc.
  1. Хранилище базы данных графов.
    После извлечения именованных объектов и их связей их сохранение в базе данных графов обеспечивает эффективные возможности выполнения запросов и обхода. Популярные графовые базы данных включают Neo4j и Amazon Neptune.

Пример кода с использованием драйвера Neo4j Python:

from neo4j import GraphDatabase
uri = "bolt://localhost:7687"
username = "neo4j"
password = "password"
driver = GraphDatabase.driver(uri, auth=(username, password))
session = driver.session()
# Create nodes and relationships
session.run("CREATE (a:Company {name: 'Apple Inc.'})")
session.run("CREATE (b:City {name: 'New York City'})")
session.run("MATCH (a:Company), (b:City) CREATE (a)-[:OPENED_IN]->(b)")
# Query the graph
result = session.run("MATCH (a)-[:OPENED_IN]->(b) RETURN a.name, b.name")
for record in result:
    print(record["a.name"], record["b.name"])
session.close()

Выход:

Apple Inc. New York City

Графы именованных сущностей обеспечивают структурированное представление именованных сущностей и их связей в текстовых данных. Используя такие методы, как распознавание именованных сущностей, анализ зависимостей, связывание сущностей и хранилище графовых баз данных, мы можем извлекать ценную информацию и выполнять комплексный анализ. Эти методы в сочетании с примерами кода на Python демонстрируют мощь и универсальность графов именованных сущностей в различных приложениях НЛП.