系列文章:

基于京东家电商品知识图谱的自动问答系统(一) -- Neo4j构建知识图谱

基于京东家电商品知识图谱的自动问答系统(二) -- IDEA搭建开发环境

基于京东家电商品知识图谱的自动问答系统(三) -- Java实现问答系统

目录

爬取数据

数据处理

前期准备

Neo4j安装

使用Python处理

生成图谱


爬取数据

电脑打开京东首页,搜索冰箱、空调、电视机、洗衣机、热水器、电饭煲等常用的家用电器关键词,复制弹出的搜索结果界面的链接。

下载安装“八爪鱼”爬虫工具,这是一个通过定义规则自动生成脚本抓取数据的工具,注册免费版即可使用常用功能,也可以用教育邮箱注册一年专业版。

可以先学习官方提供的新手入门教程,就能快速学会自定义模板。比如自动点击下一页,自动点击每个商品链接,自动爬取价格、品牌、详情等数据。爬取足够数量的数据后导出,选择以Excel格式保存为.xlsx文件。

数据处理

前期准备

将表格内第一行删除(一般是一行无用数据,如字段名,由于京东页面元素的问题,这里没有必要设置),然后开始处理。

本项目中,根据三元组抽取实体与关系,导入neo4j数据库生成初步的知识图谱,所以先要把表格数据转换为三元组,存储于文本文档中(比如:海尔变频空调1型,价格,3899.00)。

Neo4j安装

在neo4j官网或者我的百度网盘链接(提取码4b9x)下载社区版zip压缩包或安装版exe文件。

在win10的此电脑-属性-高级系统设置-环境变量中,添加系统变量NEO4J_HOME,路径为安装包所在的路径如D:\neo4j-community-3.5.5。

再配置Path路径,系统变量的Path中添加一行%NEO4J_HOME%\bin。

管理员身份启动命令行输入neo4j.bat console测试安装结果。

安装成功后在浏览器中输入http://localhost:7474,以图形界面查看图数据库,用户名和密码一般都默认为neo4j,首次登陆后会让你修改密码。

管理员身份启动命令行输入neo4j install-service注册neo4j为计算机的服务项,输入neo4j start启动服务。

使用Python处理

已经爬取的表格形式的数据,可以用python的openpyxl包提供的方法来处理。

pip install openpyxl  #管理员命令行输入,安装openpyxl包
pip install --upgrade openpyxl  #更新openpyxl包
Python  -m pip install --upgrade pip  #更新pip
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl  #使用清华镜像
pip install -i http://pypi.douban.com/simple openpyxl  #使用豆瓣镜像

处理步骤(建议使用Python安装后自带的Shell,比PyCharm启动快):

1、在Python脚本中导入openpyxl模块。

2、调用openpyxl.load_workbook()功能获取一个Workbook对象。

3、读取active成员变量或调用get_sheet_by_name()工作簿方法获取一个Worksheet对象。

4、使用索引或通过row和column关键字参数调取Worksheet对象中的cell()表方法获取一个Cell对象。

5、读取Cell对象的value属性,即可获得单元格的内容。

处理思想:按行读取,将每行的第一格(商品名称)存至变量,将本行其余的每一个单元格前面加上变量的值存入csv文件中。

import csv
import openpyxl# 创建csv文件对象 #可以是别的名字,可以是绝对地址
f = open('init_csv_xyj.csv','w',encoding='utf-8',newline='')
# 基于文件对象构建csv写入对象
csv_writer = csv.writer(f)#获取一个Workbook对象 #可以是别的名字,可以是绝对地址
wb = openpyxl.load_workbook('洗衣机.xlsx')
#获取一个Worksheet对象
sheet = wb.get_sheet_by_name('Sheet1')# 对行进行遍历,按行读取每个单元格内容
for row in sheet.rows:name = "123" #只是为了让变量不在循环结束前销毁,在这里创建for cell in row:if(cell.column == 1): #我的数据里第一列是商品名称name = cell.valueelif(cell.column == 2): #京东的价格字段只有一个数,特殊处理一下# 写入csv文件内容if(cell.value != ''): #爬取时会有因为网络问题的空字段,这里去空一下csv_writer.writerow([name,'价格',cell.value])else:if(cell.value != ''):csv_writer.writerow([name,cell.value]) #不必写入第三个空参数# 关闭csv文件
f.close()

处理完后,csv文件中是以这样的方式存储的,还需进一步处理。

这里直接使用记事本打开,使用编辑中的替换功能就可以完成处理。先将商品名称:替换为空,再将剩下的中文冒号替换为英文逗号。

      

处理完后变成了标准三元组(这里还可以用正则表达式对其他带单位的数据进行处理,便于后期的问答),将几个家电的三元组文件合并为一个,便于处理。

接下来对总的三元组文件进行抽取实体和关系操作。

import pandas as pd
import csvfilePath = "init_csv.csv"
# 读取三元组文件
n_r_b_name = [":START_ID", "relationship", ":END_ID"]
#n_r_b = pd.read_csv("init_csv_csv.csv", sep=',', names=n_r_b_name)# 使用少量的测试数据#
n_r_b = pd.read_csv(filePath, sep=',', names=n_r_b_name)# 使用全量的数据print(n_r_b.info())
print(n_r_b.head())# 去除重复实体
entity = set()
entity_n = n_r_b[':START_ID'].tolist()
entity_b = n_r_b[':END_ID'].tolist()
for i in entity_n:entity.add(i)
for i in entity_b:entity.add(i)
# print(entity)# 保存节点文件-entity.csv
csvf_entity = open("entity.csv", "w", newline='', encoding='utf-8')
w_entity = csv.writer(csvf_entity)
# 实体ID,要求唯一,名称,LABEL标签,可自己不同设定对应的标签
w_entity.writerow(("entity:ID", "name", ":LABEL"))
entity = list(entity)
entity_dict = {}
for i in range(len(entity)):w_entity.writerow(("e" + str(i), entity[i], "my_entity"))entity_dict[entity[i]] = "e"+str(i)
csvf_entity.close()# 生成关系文件-relationship.csv
# 起始实体ID,终点实体ID,要求与实体文件中ID对应,:TYPE即为关系
n_r_b[':START_ID'] = n_r_b[':START_ID'].map(entity_dict)
n_r_b['name'] = n_r_b['relationship']
n_r_b[':END_ID'] = n_r_b[':END_ID'].map(entity_dict)
n_r_b[":TYPE"] = n_r_b['relationship']
n_r_b.pop('relationship')
n_r_b.to_csv("relationship.csv", index=False)

生成的实体与关系文件如图。

               

生成图谱

将这两个文件导入neo4j数据库。

neo4j stop #先停止neo4j服务
#然后删掉安装目录neo4j-community-3.5.5\data\databases里的默认数据库neo4j-admin import --mode csv --database graph.db --nodes  "D:\entity.csv" --relationships "D:\relationship.csv" #注意文件路径neo4j start #重启数据库
match(n) return n #查询所有节点

图数据库建立完成,但是精准与否全取决于数据获取和处理阶段。

基于京东家电商品知识图谱的自动问答系统(一) -- Neo4j构建知识图谱相关推荐

  1. 基于Python+Neo4j+民航数据 ,我搭建了一个知识图谱的自动问答系统

    最近耗时一周,我基于Python+Neo4j ,搭建了一个民航业知识图谱的自动问答系统. 文章目录 环境 运行 1.项目结构 2.数据组织 3.问题预处理 4.问题分类 5.Web APP 源码&am ...

  2. 利用Neo4j构建知识图谱

    Neo4j的介绍及使用 1. Neo4j简介 1.1 特点 2. Neo4j的安装 2.1 桌面版Neo4j的使用 2.2 Neo4j的语法 2.2.1 建立节点 2.2.2 建立关系 2.2.3 构 ...

  3. 知识图谱实战应用9-基于neo4j的知识图谱框架设计与类模型构建

    大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用9-基于neo4j的知识图谱框架设计与类模型构建.我将构建KnowledgeGraphs的类,用于操作Neo4j图数据库中的知识图谱数据.方便管 ...

  4. Python基于民航业知识图谱的自动问答系统(附源码)

    一.开发环境 Windows 10 x64 Python 3.7 Neo4j community 3.5.20 二.项目运行 1.确保安装所需依赖 pip install -r requirement ...

  5. python+neo4j构建基于知识图谱的电影知识智能问答系统

    目录 一.写在前面: 二.系统准备: 三.系统构建 四.总结反思: 五.完整代码: Author:qyan.li Date:2022.6.3 Topic:借助于python构建知识图谱的电影知识智能问 ...

  6. python京东预约抢购流程_[Python] 京东秒杀商品抢购-茅台抢购自动获取抢购时间【修改】...

    这是咋回事 2021-01-12 08:36:03,201 - 14344-MainThread - jd_spider_requests.py[line:462] - INFO: 商品名称:[茅台白 ...

  7. python京东抢购软件_[Python] 京东秒杀商品抢购-茅台抢购自动获取抢购时间【修改】...

    这是咋回事 2021-01-12 08:36:03,201 - 14344-MainThread - jd_spider_requests.py[line:462] - INFO: 商品名称:[茅台白 ...

  8. 【Neo4j构建知识图谱】官方服务图谱大型数据集下载与可视化方法【数据集包括:食谱数据、足球、权力的游戏、美国宇航局、英国公司注册、财产所有权、政治捐款】

    目录 1.服务端口免费查看知识图谱 2.关于 Neo4j 示例数据集的实现 3.下载离线数据集 4.项目概览与实现案例 还可以看到解析python源码 还可以看到解析cypher源码 各种数据集实现案 ...

  9. 【Neo4j构建知识图谱】配置知识图谱插件APOC与案例实现

    APOC (Awesome Procedures on Cypher) 是一个 Neo4j 的扩展库,可以在 Cypher 中使用各种额外的功能和过程. 目录 1.安装插件 2.验证是否安装成功 3. ...

  10. 【Neo4j构建知识图谱】Python调用cypher语言(1):只需5行代码一次性完成节点、关系、属性的创建

    目录 1.介绍[后续的文章就不介绍,直接上干货就行] 2.python代码直接实现 3.参考 1.介绍[后续的文章就不介绍,直接上干货就行] Cypher 是 Neo4j 的图形查询语言,可让您从图形 ...

最新文章

  1. 开源 免费 java CMS - FreeCMS1.5-信息管理
  2. 冒泡排序选择排序插入排序
  3. Maven配置ali镜像
  4. 面试后要请你吃饭_面试问同事请吃饭唯独不叫你咋办?小伙说这是好机会,当场被录取...
  5. 缠论108课_缠论108课第54课:股票具体的走势—图解分析示范
  6. C# 判断字符串为空的4种方法及效率
  7. [zz]KVM 虚拟机故障排除一例
  8. 那年我学过的Spring笔记
  9. ajax 解决csrf的3种方法,input标签的文件上传
  10. Gibbs Sampling\吉布斯采样(二)
  11. 当 p<1时,p 范数不满足三角不等式的证明 | p norm | triangle inequality
  12. 《Java从入门到放弃》JavaSE入门篇:异常
  13. frm考试可以用计算机,GARP协会:2021年FRM考试只能带这种计算器!
  14. Java保留2位小数 JS保留2位小数 Java截取2位小数 Math.round((1.0/3)*100)/100.0
  15. 【职业】什么是架构师?
  16. vs2015发布网站到IIS
  17. Google SEO入门教程,技术 SEO 简介
  18. android开发发送短信,Android开发入门之发送短信
  19. xshell (sed 命令)
  20. 系统开机进入boot menu app menu解决办法

热门文章

  1. 【机房收费系统C#版】——导出Excel
  2. 使用RandomAccessFile读写数据
  3. MVC视图与控制器分离简单描述
  4. QCon杭州2012技术开发大会感受
  5. 智能优化算法(源码)-生物地理学算法(Biogeography-Based Optimization,BBO)
  6. matlab-lsqcurvefit函数 初始值选取
  7. 【ArcGIS|空间分析】3D可视性分析(全国大学生GIS技能大赛试题)
  8. php 或取域名的ip,php如何获取域名IP地址代码函数
  9. java 雪崩效应,Jmeter模拟雪崩效应
  10. Alink、Tensorflow on Flink 在京东的应用