当前位置: 首页 > news >正文

半结构化知识抽取案例

半结构化知识抽取是指从半结构化数据源(如HTML、XML、JSON等)中提取有用的信息,并将其转换为更易于理解和使用的知识形式。半结构化数据通常包含一些结构化的标记或标签,但不像完全结构化的数据那样严格。

比如抽取如下网页到neo

<!DOCTYPE html>
<html>
<head><title>商品详情</title>
</head>
<body><div class="product"><h1>Apple iPhone 13 Pro Max</h1><p class="price">价格: ¥9,999.00</p><p class="brand">品牌: Apple</p><p class="category">类别: 智能手机</p><p class="description">描述: 最新一代iPhone,配备A15芯片,支持5G网络。</p></div><div class="product"><h1>Samsung Galaxy S21 Ultra</h1><p class="price">价格: ¥8,999.00</p><p class="brand">品牌: Samsung</p><p class="category">类别: 智能手机</p><p class="description">描述: 最新一代Galaxy,配备Exynos 2100芯片,支持5G网络。</p></div>
</body>
</html>

 代码

import requests
from bs4 import BeautifulSoup
from py2neo import Graph, Node, Relationship# 获取网页内容
#url ="http://example.com/products.html"  # 替换为实际的URL
#response = requests.get(url)
#html_content = response.content# 打开本地文件
# 打开并读取本地文件
with open('product.html', 'r', encoding='utf-8') as file:html_content = file.read()# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_content, 'html.parser')# 提取所有商品信息
products = []
for product_div in soup.find_all('div', class_='product'):product_name = product_div.find('h1').text.strip()price = product_div.find('p', class_='price').text.replace('价格: ', '').replace('¥', '').strip()brand = product_div.find('p', class_='brand').text.replace('品牌: ', '').strip()category = product_div.find('p', class_='category').text.replace('类别: ', '').strip()description = product_div.find('p', class_='description').text.replace('描述: ', '').strip()product_info = {'name': product_name,'price': float(price.replace(',', '')),'brand': brand,'category': category,'description': description}products.append(product_info)# 连接到Neo4j数据库
neo4j_graph = Graph("bolt://localhost:7687", auth=("neo4j", "swpu@swpu"))# 清除已有数据(可选)
neo4j_graph.run("MATCH (n) DETACH DELETE n")# 定义节点和关系标签
PRODUCT_LABEL = "Product"
BRAND_LABEL = "Brand"
CATEGORY_LABEL = "Category"# 创建节点和关系
for product_info in products:# 创建商品节点product_node = Node(PRODUCT_LABEL, name=product_info['name'], price=product_info['price'],description=product_info['description'])neo4j_graph.create(product_node)# 创建品牌节点brand_node = Node(BRAND_LABEL, name=product_info['brand'])neo4j_graph.merge(brand_node, BRAND_LABEL, "name")# 创建商品与品牌的关系relationship = Relationship(product_node, "BRANDED_BY", brand_node)neo4j_graph.create(relationship)# 创建类别节点category_node = Node(CATEGORY_LABEL, name=product_info['category'])neo4j_graph.merge(category_node, CATEGORY_LABEL, "name")# 创建商品与类别的关系relationship = Relationship(product_node, "BELONGS_TO_CATEGORY", category_node)neo4j_graph.create(relationship)print("数据已成功导入到Neo4j知识图谱中。")

详细解释
获取网页内容:

  • 使用 requests.get 方法获取网页内容。
  • 将网页内容存储在 html_content 变量中。

解析HTML:

  • 使用 BeautifulSoup 解析HTML文档。
  • 提取所有商品信息,遍历每个 div 元素,提取商品名称、价格、品牌、类别和描述信息。

连接Neo4j数据库:

  • 使用 py2neo.Graph 连接到 Neo4j 数据库。需要提供 Neo4j 的 Bolt 地址和认证信息。
  • 可选步骤,清除 Neo4j 中已有的数据,以便重新导入。

创建节点和关系:

  • 为每件商品创建一个 Product 节点。
  • 为每个品牌创建一个 Brand 节点,并与商品节点建立 BRANDED_BY 关系。
  • 为每个类别创建一个 Category 节点,并与商品节点建立 BELONGS_TO_CATEGORY 关系。

注意事项

  • Neo4j 认证信息:请根据你的 Neo4j 实例配置正确的用户名和密码。
  • Bolt 地址:如果你的 Neo4j 实例不在本地运行,请提供正确的 Bolt 地址。
  • 数据清理:如果不需要每次都清除已有数据,可以注释掉 neo4j_graph.run("MATCH (n) DETACH DELETE n") 这一行。
http://www.lryc.cn/news/446125.html

相关文章:

  • Oracle Truncate和delete的区别
  • 应用层协议 --- HTTP
  • 网卡Network Interface Card
  • 9.1 Linux_I/O_基本知识
  • [Java]一、面向对象核心编程思想
  • 科研绘图系列:R语言多个AUC曲线图(multiple AUC curves)
  • JavaWeb--纯小白笔记06:使用Idea创建Web项目,Servlet生命周期,注解,中文乱码解决
  • jQuery——jQuery的2把利器
  • Day29笔记-Python操作pdfPython发送邮件
  • Seata分布式事务实践
  • 数字IC设计\FPGA 职位经典笔试面试整理--基础篇2
  • (务必收藏)推荐市面上8款AI自动写文献综述的网站
  • 【python】运算符
  • C++深入学习string类成员函数(1):默认与迭代
  • DataGrip远程连接Hive
  • go 读取excel
  • Linux进阶系列(四)——awk、sed、端口管理、crontab
  • 利用Metasploit进行信息收集与扫描
  • 基于Pytorch框架的深度学习MODNet网络精细人像分割系统源码
  • Go语言中的并发编程
  • python学习笔记(3)——控制语句
  • 关系数据库设计之Armstrong公理详解
  • 【Geoserver使用】SRS处理选项
  • python里面的单引号和双引号的区别
  • 为什么不要在循环,条件或嵌套函数中调用hooks
  • 将成功请求的数据 放入apipost接口测试工具,发送给后端后,部分符号丢失
  • N诺计算机考研-错题
  • vue3 数字滚动组件封装
  • 如何确保消息只被消费一次:Java实现详解
  • Web3技术在元宇宙中的应用:从区块链到智能合约