Именованные графы сущностей (NEG) — это мощные инструменты обработки естественного языка (NLP) и извлечения информации. Они обеспечивают структурированное представление именованных сущностей и их отношений, позволяя нам анализировать и извлекать ценную информацию из текстовых данных. В этой статье мы рассмотрим различные методы создания и работы с именованными графами сущностей, а также примеры кода на Python.
- Распознавание именованных объектов (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
- Разбор зависимостей.
Разбор зависимостей помогает понять грамматическую структуру предложений и выявить связи между словами. Это полезно для определения зависимостей между именованными объектами.
Пример кода с использованием 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
- Связывание сущностей.
Связывание сущностей соединяет именованные сущности в тексте с базой знаний, например Википедией или 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.
- Хранилище базы данных графов.
После извлечения именованных объектов и их связей их сохранение в базе данных графов обеспечивает эффективные возможности выполнения запросов и обхода. Популярные графовые базы данных включают 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 демонстрируют мощь и универсальность графов именованных сущностей в различных приложениях НЛП.