> 文章列表 > 知识图谱实战应用5-基于知识图谱的创建语义搜索功能

知识图谱实战应用5-基于知识图谱的创建语义搜索功能

知识图谱实战应用5-基于知识图谱的创建语义搜索功能

大家好,我是微学AI,今天给大家讲一下知识图谱实战应用5-基于知识图谱的创建语义搜索功能。基于知识图谱的语义搜索功能是一种能够理解用户意图、并根据语义关系在知识图谱中进行查询的搜索方式。相比于传统的文本搜索,它可以更准确地回答用户的问题,提高搜索效率和搜索质量。

一、语义搜索步骤

自然语言理解:将用户输入的自然语言转化为机器可理解的形式,并提取其中的实体、属性、关系等关键信息。

实体识别:在知识图谱中识别与用户输入相关的实体,例如人物、地点、事件等。

关系抽取:根据用户输入的查询条件,从知识图谱中抽取符合条件的实体之间的关系,如“A是B的子类”、“A与B有关联”等。

结果生成:根据查询结果,生成符合用户需求的结果列表,并按照一定的排序方式进行排列,以便用户快速找到所需信息。

 二、语义搜索代码实践

现在基于neo4j构建知识图谱,从实体的创建和关系的创建开始,构建企业中的数据关系。

以企业数据为样例,创建一个简单的知识图谱数据结构。后续大家可以根据实际的应用场景自行创建。

我这里将创建一个简单的企业与其相关的员工、部门和产品的关系。
企业 - 有 -> 部门
企业 - 有 -> 员工
部门 - 有 -> 员工
部门 - 生产 -> 产品

代码实战:

from py2neo import Graph, Node, Relationship# 1. 连接到 Neo4j 数据库
graph = Graph("http://localhost:7474/browser/", auth=("neo4j", "neo4j"))# 2. 创建企业节点
company_node = Node("Company", name="微学AI有限公司")
graph.create(company_node)# 3. 创建部门节点及其与企业的关系
department_names = ["研发部", "市场部", "人事部"]
department_nodes = []
for name in department_names:department_node = Node("Department", name=name)department_nodes.append(department_node)company_department_relationship = Relationship(company_node, "HAS", department_node)graph.create(company_department_relationship)# 4. 创建员工节点及其与企业和部门的关系
employee_data = [{"name": "张三", "age": 30, "department_index": 0},{"name": "李四", "age": 28, "department_index": 1},{"name": "王五", "age": 35, "department_index": 2},
]
employee_nodes = []
for data in employee_data:employee_node = Node("Employee", name=data["name"], age=data["age"])employee_nodes.append(employee_node)department = department_nodes[data["department_index"]]company_employee_relationship = Relationship(company_node, "HAS", employee_node)department_employee_relationship = Relationship(department, "HAS", employee_node)graph.create(company_employee_relationship)graph.create(department_employee_relationship)# 5. 创建产品节点及其与部门的关系
product_data = [{"name": "产品1", "price": 100, "department_index": 0},{"name": "产品2", "price": 200, "department_index": 0},{"name": "产品3", "price": 120, "department_index": 1},
]
product_nodes = []
for data in product_data:product_node = Node("Product", name=data["name"], price=data["price"])product_nodes.append(product_node)department = department_nodes[data["department_index"]]department_product_relationship = Relationship(department, "PRODUCES", product_node)graph.create(department_product_relationship)# 语义搜索函数
def semantic_search(keyword):result = graph.run(f"MATCH (n) WHERE n.name CONTAINS '{keyword}' RETURN n").data()return resultif __name__ == "__main__":keyword = input("请输入搜索关键词:")search_result = semantic_search(keyword)if search_result:print(f"搜索到以下包含'{keyword}'的实体:")for result in search_result:print(dict(result["n"]))else:print(f"未找到包含’{keyword}'的实体")

我们进行数据添加到图数据库中,就可以进行查询了,图数据库创建图像如下:

 根据以上关系进行查询,这个是初步的项目,更深的应用在后续发布,谢谢支持。