Constructing a Knowledge Graph from Text Documents
1 导包(python+langchain)
from dotenv import load_dotenv
import os
# Common data processing
import json
import textwrap
# Langchain
from langchain_community.graphs import Neo4jGraph
from langchain_community.vectorstores import Neo4jVector
from langchain_openai import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQAWithSourcesChain
from langchain_openai import ChatOpenAI
# Warning control
import warnings
warnings.filterwarnings("ignore")
# Load from environment
load_dotenv('.env', override=True)
NEO4J_URI = os.getenv('NEO4J_URI')
NEO4J_USERNAME = os.getenv('NEO4J_USERNAME')
NEO4J_PASSWORD = os.getenv('NEO4J_PASSWORD')
NEO4J_DATABASE = os.getenv('NEO4J_DATABASE') or 'neo4j'
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
# Note the code below is unique to this course environment, and not a
# standard part of Neo4j's integration with OpenAI. Remove if running
# in your own environment.
OPENAI_ENDPOINT = os.getenv('OPENAI_BASE_URL') + '/embeddings'
# 全局变量
VECTOR_INDEX_NAME = 'form_10k_chunks'
VECTOR_NODE_LABEL = 'Chunk'
VECTOR_SOURCE_PROPERTY = 'text'
VECTOR_EMBEDDING_PROPERTY = 'textEmbedding'
2 查看并预分析一下10-K json文件(需要创建向量索引的文件)
打开就长下面这个样子(随便截了几张)
将上面的文件构建知识图谱之后就可以对这些金融数据进行问答对话了,但是下载下来是XML 格式,需要对XML进行解析并对数据进行清洗。
2.1 数据清洗流程(得到JSON文件):
- 首先进行一些正则表达式清理,浏览XML,尝试找到我们真正想要的片段
- 然后使用Beautiful Soup 将其中一部分XML转换成干净的Python数据结构
- 提取关键内容,比如 CIK标识符:它是一个中心索引,用于在SEC中识别公司
- 对于大段的文本,查看(1,1A,7和7A条款)
- 最后将他们转换成JSON,用于后面导入并开始创建知识图谱
2.2 JSON文件到可检索的大体流程规划:
- 由于数据复杂性,每种形式都有不同的文本,首先要把他们拆分成块(使用langchain的textsplitter)<