目 录

目 录 i
第 1 章 绪论 1
1.1 研究背景及意义 1
1.2 研究目标 1
1.3 研究内容 2
1.4 相关介绍 2
1.4.1 知识图谱 2
1.4.2 Python 3
1.4.3 Neo4j 4
1.4.4 Flask 4
1.4.5 Echarts 5
1.5 本文的组织结构 5
1.6 本章小节 6
第 2 章 需求分析 7
2.1 可行性分析 7
2.1.1 经济可行性 7
2.1.2 技术可行性 7
2.1.3 时间可行性 7
2.2 系统需求分析 7
2.3 系统性能需求 9
2.4 本章小结 9
第 3 章 系统设计 11
3.1 系统流程设计 11
3.2 系统功能模块设计 11
3.3 数据爬取模块 12
3.4 数据处理模块 13

3.5 知识图谱构建模块 14
3.6 数据可视化模块 15
3.7 本章小结 16
第 4 章 系统实现 17
4.1 网页爬虫实现 17
4.2 知识图谱构建实现 18
4.3 Web 页面实现 20
4.3.1 人物关系知识图谱页面 21
4.3.2 人物关系查询页面 22
4.3.3 智能问答页面 23
4.4 本章小结 24
第 5 章 系统测试 25
5.1 测试目的 25
5.2 测试环境 25
5.3 功能网页测试 25
5.4 数据库测试 26
5.5 本章小结 26
第 6 章 总结和展望 27
6.1 总结 27
6.2 展望 27
参考文献 29
致 谢 31

基于 Neo4j 的《三体》知识图谱构建与可视化交互系统的设
计与实现

作者: 罗月 指导教师: 张映玉 讲师
(海南师范大学信息科学技术学院,海口 571158)

摘 要:
随着科技的进步,知识图谱作为一种强大的数据表示和查询工具,在多个领域得到了广泛的应用。本课题针对《三体》这部科幻小说中的复杂人物关系进行研究, 旨在构建一个三体人物关系知识图谱系统。该系统首先对《三体》中的人物关系数据进行整理和处理,然后将这些数据存储到 Neo4j 图数据库中。通过这样的方式,能够更好地理解和分析《三体》中的人物关系网络,为读者提供一个直观的人物关系视图。
为了实现上述目标,采用了 Flask 框架搭建了一个网页平台。该平台不仅实现了知识图谱的可视化展示,还提供了人物关系的查询功能和智能问答系统。在实际应用中,用户可以通过网页界面直观地浏览《三体》中的人物关系网络,查询特定人物的关系以及进行智能问答,从而深入了解小说中的人物关系和情节。通过本系统,成功地将复杂的《三体》人物关系知识图谱整合到了一个用户友好的平台上,实现了知识的可视化展示和高效查询,为读者提供了一个全新的阅读和研究体验。
关键词: 自然语言处理;Python; 社交网络; 文本分析; 三体

Online training platform based on SaaS mode

Author: Zhijun ZHU Supervisor: lecturer. Rao Zeng
(School of Information Science and Technology,
Hainan Normal University, Haikou 571158, P. R. China)

Abstract:
With the progress of science and technology, knowledge graph has been widely used in many fields as a powerful data representation and query tool. This topic studies the complex character relationship in the science fiction novel three-Body Problem, aiming to construct a knowledge graph system of three-body character relationship. The system first sorts out and processes the character relationship data in the Three-Body Problem, and then stores these data in the Neo4j graph database. In this way, we can better un-

derstand and analyze the character relationship network in the Three-Body Problem, and provide readers with an intuitive view of the character relationship.
To achieve the above goals, we adopted the Flask framework to build a web plat- form. The platform not only realizes the visual display of knowledge graph, but also pro- vides the query function of character relationship and intelligent question and answering system. In practical application, users can intuitively browse the relationship network of characters in the Three-Body Problem through the web interface, query the relationship of specific characters and conduct intelligent questions and answers, so as to have an in- depth understanding of the relationship and plots of characters in the novel. Through this system, we successfully integrate the complex character relationship knowledge graph of the Three-Body Problem into a user-friendly platform, realize the visual display and efficient query of knowledge, and provide readers with a new reading and research ex- perience.
Keywords: natural language processing; Python; social networking; text analysis; three- body

第 1 章 绪论

1.1 研究背景及意义
随着人工智能和数据技术的迅猛发展,知识图谱作为一种重要的知识表示和查询工具,正在被广泛应用于各个领域,包括自然语言处理、智能搜索、推荐系统等[1] 。而在文学研究领域,尤其是对于具有复杂人物关系的文学作品,如科幻小说《三体》等, 构建人物关系知识图谱更是具有重要的意义。《三体》是中国知名作家刘慈欣的科幻小说,以其深刻的哲学思考和复杂的人物关系而备受瞩目。小说中的众多角色之间存在着错综复杂的关系网络,包括友情、爱情、敌对等各种关系,这些关系构成了小说丰富的情节和人物形象。然而,由于人物众多、情节复杂,想要全面理解《三体》中的人物关系并非易事,特别是对于新读者来说更是一项挑战。
因此,构建《三体》人物关系知识图谱系统具有重要的实际意义。首先,通过整理和分析《三体》中的人物关系数据,可以帮助读者更好地理解小说中的情节发展和人物心理。其次,将这些数据存储到图数据库中,可以提供高效的查询和分析功能,为读者提供一个直观、高效的阅读和研究工具。最重要的是,通过可视化展示人物关系网络,可以帮助读者更深入地探索小说的内涵和意义,从而提升阅读体验和研究效率[2] 。
此外,构建《三体》人物关系知识图谱系统还具有一定的学术意义。通过对小说中人物关系的深入分析和挖掘,可以为文学研究提供新的视角和方法,探讨人物塑造、情节构建等方面的规律和技巧, 进而促进中国科幻文学的发展和繁荣。因此,构建《三体》人物关系知识图谱系统不仅是一项技术挑战,更是对文学理解和人文关怀的探索,具有重要的理论和实践意义[3] 。
1.2 研究目标
本研究旨在构建基于《三体》科幻小说的人物关系知识图谱系统[4] 。首先,通过对小说文本的分析和整理,提取其中的人物关系数据。然后,利用图数据库技术将这些数据存储到 Neo4j 中,构建人物关系网络。接着,采用 Flask 框架搭建网页平台,实现知识图谱的可视化展示、人物关系的查询功能以及智能问答系统。通过该系统,用户可以直观地浏览《三体》中的人物关系网络,查询特定人物的关系,甚至进行智能问答,从而深入理解小说中的情节发展和人物心理。该研究旨在为科幻文学爱好者和研究者提供一个全新的阅读和研究工具,同时也探索了

知识图谱在文学作品分析和研究中的应用前景[5] 。
1.3 研究内容
本次研究的主要内容为通过文本挖掘等功能构建《三体》任务关系知识图谱[6] ,并基于知识图谱进行人物关系的查询功能。具体研究内容包括:
1)数据获取。在完成本设计目标之前,需要收集信息,利用 Python 编写爬虫代码,使用深度学习的方法从小说目标网址站上收集《三体》章节信息和具体内容信息,将网站上收集的信息保存到文件中,但由于从文本中获取人物关系三元组设计自然语言处理难度较大且《三体》总共有三部工程量巨大容易出错,所以从已有的官方网站中获取人物关系 csv 文件较为理想。
2)数据处理。在爬取到对应数据之后, 需要对数据进行处理,包括数据的读取、停用词的过滤、词频统计等。利用文本处理技术,对小说的文本数据进行处理和分析,同时对文本进行数据收集、分词、实体识别、词性标注等。
3)知识图谱构建。对于处理好的数据, 要进行知识图谱的构建,使用 Neo4j作为图谱的存储媒介,将人物和人物之间的关系进行关系型存储,构建对应的《三体》人物关系知识图谱[7] 。
4)智能问答系统:对于构建好的知识图谱,需要利用 ltp 模型获取用户输入的问题,解析问题里面的实体,根据实体信息查询 Neo4j 数据库,获取到对应的答案信息[8] 。
5)数据可视化。经过对数据资料的处理加工与分析, 要把解析的成果呈现在网页上展示,把成果以图表的形式呈现出来,要符合简洁、直观、交互性强等特定的目的和需求,从而成为人物的分析基础。使用 Flask 搭建 Web 页面,对数据分析结果进行展示,包括知识图谱图的展示、词频分析结果展示等等。
1.4 相关介绍
本节将阐述基于 Neo4j 的《三体》人物关系知识图谱可视化构建开发过程中所使用的技术。后端以 Python 语言为基础,采用Flask 框架,数据存储层使用了Neo4j 数据库。前端以 Python 语言为基础,采用了Echarts 可视化图表库。
1.4.1 知识图谱
知识图谱(Knowledge Graph)是一种语义网络,作为一种对现实生活中的知识进行表达与储存,并以图的方式对其进行组织。网络拓扑是一种以结点、边为单位组成的图数据结构,在图中,结点代表着实体或概念,而边则代表着事物间的联系。知识地图是一种对知识进行形式化描述的方法,它可以帮助电脑对其进行更好地理解和加工。

其中,节点能够表现人物、地点、事件、概念等多种类型的主体,而边能表现出实体间的关系,如人物之间的互动关系,地点间的位置关系,事件间的原因等。这样的地图结构赋予了知识地图的高度表示与柔性,能够更好地对真实社会中存在的各种知识联系进行建模。
知识图谱的建立一般由知识提取、表示和连接三个阶段组成。首先,我们要将已有或不具结构性的资料来源中,提取出其中的资讯,并将其关联起来。之后,以图表的形式来表达这种认识,并存储到图数据库或其他存储系统中。最后,对知识图谱进行链接和扩充,以丰富其内容和提高其覆盖范围[9] 。
知识图谱在自然语言处理、智能检索、推荐系统以及智能问答等领域具有广泛的应用前景。在自然语言处理领域,知识地图能够有效地辅助分析文本中的实体与关联,从而提升文本理解的精度和效率。在智能检索方面,基于知识地图的检索方法能够将检索到的信息与检索对象建立联系,实现检索的准确性和个性化。此外,知识地图还能根据用户的使用习惯和相关知识地图,向用户推荐适合他的商品。在智能问答中,知识图谱可以基于图谱结构和推理算法,回答用户提出的复杂问题,实现更智能的问答功能[10] 。
1.4.2 Python
Python 是 1991 年由 Guido van Rossum 发行的一种高层程序设计语言,由于其易于阅读和书写,且文法结构简单明了,所以在网络开发,数据科学,人工智能等诸多方面得到了广泛应用。Python 也因为其简洁,易学,并且拥有一个强大的生态的特性,已经被很多开发人员所选择运用。
Python 的文法简洁而直接,可以让初学的人很快就能掌握它。因为 Python 简单、简洁、简明的特点,不使用其他语言中复杂的圆括和分号,而是使用了一条显式的缩排规则,所以这个清晰的文法让 Python 的语言更容易阅读,也更容易编写,减少了学习和了解所需要的代价。
Python 提供了大量的、功能强大的标准类库以及第三方类库。 Python 标准库集包括多种类型的文件处理,网络通讯,图形界面等多种函数。另外, Python 社区非常活跃,提供了一批面向大数据分析与可视化的第三方类库,包括 NumPy, Pandas, Matplotlib, Django, Flask, Web 开发,TensorFlowPyTorch,以及面向机器学习与深度学习的 TensorFlowPyTorch。它们的出现极大地提升了软件的开发效率,帮助开发人员迅速地建立起一个较为复杂的软件。Python 作为一种很好的跨平台的语言,能够在多种不同的 OS 上工作,包括 Windows, Linux, macOS 等。这样,就可以方便地在多个平台上进行软件的开发与配置,增强了软件的柔性与可移植性。另外,Python 在科学运算与资料处理方面也有很大的用途。在 NumPySciPy,

Pandas 等类库的帮助下,Python 已经是一种被数据科学家和科研人员所青睐的语言。其简单易用的语法结构和丰富的数据处理工具使得数据分析工作变得更加高效和便捷[11] 。
1.4.3 Neo4j
Neo4j 是一款备受好评的图数据存储、管理和查询数据库管理系统。该系统立足于图论原理,以图数据库为核心,对复杂关系数据进行高效检索与分析。图数据模式构成了 Neo4j 的核心理念。Neo4j 采用节点与关系两种方式对数据进行结构化处理,其中节点代表图表中的实体,用以描述实体间的关联。这种图数据模式具有灵活性和表达力,能够充分描绘现实社会中各种复杂关系[12] 。
Neo4j 为 Cypher 提供了一个非常丰富的查询语言。Cypher 是一种与 SQL 相似的、针对图形化数据库进行查询与处理的查询语言。该系统可以实现对结点和关联的条件筛选,路径查询,聚集操作等功能,可以适应不同类型的查询需要。 Neo4j 还具有高性能和可扩展性。它采用了内存映射存储引擎和索引技术,能够快速地执行复杂的图形查询。同时,Neo4j 支持分布式部署和集群模式,可以通过水平扩展来处理大规模的图形数据,保证系统的性能和稳定性。
此外,Neo4j 为开发人员提供了丰富的可视化、分析及应用程序的工具和库来帮助开发者进行工作。例如, Neo4jBrowser 就是一款强大的图表检索工具,使用户能够对图谱数据进行可视化查询与分析。同时,Neo4j 的多语言客户端驱动和 API 还支持开发者在多种程序环境中开发各类应用程序[13] 。
1.4.4 Flask
Flask,一款源自 2010 年由Armin Ronacher 创立的 Python Web 应用程序轻量级框架,以其简洁、灵活和易学的特性而备受赞誉, 成为众多开发者在构建 Web程序时首选的工具。Flask 秉持着简洁、灵活的原则, 尽管其内核规模相较其他架构较小,但具备众多可扩展方法,使开发者能够根据需求选择和整合所需特性。这一精简的设计使得 Flask 在小规模项目或进行模型化时成为理想选择,同时也能满足大规模程序的需求。
Flask 因其出色的路由和模板引擎而闻名。在此基础上, 提出了一种新的路径定义方法,该方法可以方便地将 URL 与相应的视图功能相匹配,并赋予网络程序路由功能。此外,Flask 还支持 Jinja2 模板引擎,它能够使 Python 程序在 HTML模板中进行简单和灵活地转换,提高了模板的复用性和可维护性。另外, Flask 具有良好的扩展性和社区支持。本系统为使用者提供了表格校验、数据库整合、身份验证等不同的扩充功能。在此基础上, 开发者可以根据需求选择合适的扩展项,并对其进行简单的配置,使之与 Flask 软件集成在一起。同时, Flask 也为开发人

员提供了一个活跃的社区,使他们能够从社区中获得帮助,共享经验,加速软件开发。
在此之外,Flask 还具有良好的文档和学习资源。官方文档详尽清晰, 涵盖了Flask 的各个方面,包括基础教程、进阶指南、扩展库等。而且, 存在有大量的教程、博客和视频教程可以帮助开发者快速入门和掌握 Flask 框架,使得学习成本降低,开发效率提高[14] 。
1.4.5 Echarts
ECharts 是百度自主研发的一款以 JavaScript 为基础的视觉图形库,专为开发人员设计,使用方便,使用灵活,内容丰富的视觉效果。该软件支持曲线图、柱状图、饼图、散点图等常用图形,并具有丰富的互动与动态显示能力,可以适应不同的资料显示与分析需要[15] 。
ECharts 可以支持各种常用图形,如折线、柱状图、饼图、散点图、雷达图等,可满足一般图形表达的需要。通过对图表风格、布局以及交互的设计,开发人员只需对图表进行一些设置,就可以达到对图表进行个性化的可视化。ECharts 提供了大量的互动特性,包括数据放大,数据过滤,图表链接等,这让使用者可以更直接地与数据互动并探究索[16] 。
1.5 本文的组织结构
论文主要包括以下几个部分:
第一章是绪论部分。在引言中,首先介绍了本文的研究背景,阐明了本文研究的目标与意义,归纳了目前国内外的研究状况,并对本文的研究内容及结构进行了整理,介绍系统的基本原理和实现方法,阐述 Python 中的一些基本原理和技术,其中有 Python 技术,Neo4j 技术,Flask 技术,Echarts 技术等。
第二章为实证研究。这一节重点是对该体系进行了剖析,对该体系进行了详细的研究,对该体系进行了总体的要求,确定了该体系的数据采集、数据处理、知识地图构建以及可视化分析等方面的要求,同时还给出了该体系的性能要求。
第三章为本论文的制度建设。对该系统的总体设计进行了总体设计,主要分为系统流程设计、系统功能模块设计两个大方面,详细介绍该系统的数据爬取、数据处理、知识图谱构建、数据可视化,并对系统总体功能模块框图及系统流程进行了说明。
第四章为具体的软件开发。文中还介绍了该系统中的一些关键技术,如:数据爬取的实现,知识图谱的构建,网页的实现等。
第五章是对完成的系统进行实验测试,确保系统如预期效果运行,查看系统是否存在 BUG,包括对网页模块和数据库的运行测试。

第六章是对全文的一个结论和前景的分析。最后,在此基础上,对该课题的研究工作进行了综述,并提出了下一步的研究方向。
1.6 本章小节
该章节主要介绍了该知识图谱系统的研究背景及意义、研究目标、研究内容,以及本文的组织结构和开发该系统的相关技术,通过使用这些技术可以解决系统实际的业务需求,同时也可以提升系统的技术水平。

第 2 章 需求分析

本章将通过分析基于 Neo4j 的《三体》人物关系来确定系统的功能需求和非功能需求。
2.1 可行性分析
2.1.1 经济可行性
从资金投入来看,此次主要是利用 Python 和 Neo4j 等开放源代码来进行三体角色关系的知识图谱的建立和推断研究,在技术上不会有任何的经费支出,另外还必须有一种通用的服务器,即为学员所用的计算机。所以,该系统在经济上是具有较高可行性的。
2.1.2 技术可行性
在技术方面,这个系统的研发,拟采用 Python,Neo4j, Flask 等技术。在校和放假的时候,本人都有进行了一些研究和学习此方面的知识,有了这方面的技术发展的基础经验。因此,本次《三体》人物关系知识图谱的开发在技术上具备可行性。
2.1.3 时间可行性
该系统软件之研发计划为四个月,由二 ○ 二三年十二月起至二 ○ 二四年三月份,在此期间进行知识图谱方面的学习了解,查看各种类似案例,有足够的发展时间及完成本系统的研发时间上的可行性。
2.2 系统需求分析
本系统目标是完成《三体》人物关系知识图谱构建及推理研究,主要功能需求包括以下方面:

  1. 管理 Neo4j 数据库人物关系知识图谱关系型存储:将获取到的人物关系数据集放入 Neo4j 数据库中创建并导入关系节点,进行《三体》人物关系的知识图谱构建作为后台,确保 Web 网页中知识图谱的可视化运行[7] 。管理功能模块用例图如图 2.1所示。

图 2.1 管理用例图

  1. 用户Web 智能图谱展示、查询、问答系统: 对于在数据库中构建好的知识图谱,要把成果呈现在 Web 网页中进行展示,作为人物分析的基础,并利用 ltp模型获取用户输入的问题,解析问题里面的实体,根据实体信息查询 Neo4j 数据库,直观的获取到对应的答案信息,深度分析人物关系了解《三体》中的角色[8] 。管理功能模块用例图如图 2.2所示。

图 2.2 用户用例图

系统共有四个功能模块组成,系统总体功能模块如图 2.3所示。

图 2.3 系统总体功能模块

2.3 系统性能需求
系统性能优劣直接影响用户体验,其表现取决于体系结构的优良。优秀的体系结构通常包含以下要素:

  1. 明确的模块化设计。大型系统被划分为众多小型部分,各部分职责分明,作用清晰。同时,这些部分可灵活运用,实现较低的耦合度和较高的内聚力。
  2. 模块划分多样,确保通用模块易于灵活运用。针对特定模块,需随系统性能等变化进行适应性调整,增强制度弹性。
  3. 构建稳定、安全、高效的数据模型。唯有稳定、安全、高效的数据仓库, 方能保障优良的数据访问和修改能力。
  4. 总体架构稳健,不失弹性。在最初的配置阶段,整个体系的体系结构必须有很高的要求,不仅要有明确的框架,而且要有一个良好的操作稳定性,一旦发生故障,也要有迅速的处理方法。
    2.4 本章小结
    本章从经济、技术和时间三个方面说明了该系统的可行性,接着,对整个系统的总体要求做了详尽的分析与说明,并对系统的功能要求作了说明,从而为后续的系统的设计与实施打下了良好的基础。

第 3 章 系统设计

在第二章需求分析的基础上,本章针对各个模块的功能进行详细的设计。在这一阶段,我们将对系统的各个功能模块进行深入剖析,以便为后续的开发阶段提供明确的指导。
3.1 系统流程设计
《三体》人物关系知识图谱构建及推理研究时, 首先,需要展开需求分析,进而对系统进行全面的设计规划,包括设计系统功能模块、选择数据库等,本系统的开发流程如图 3.1所示。

图 3.1 系统开发流程图

本文从数据的采集、处理、知识图谱的建立、数据的可视化和软件的实现等方面进行了研究。
3.2 系统功能模块设计
系统的框架体系结构设计,要体现出使用者与整体系统各模块的界面是否有良好的交互作用,并且要清晰,这样才能保证以后的系统实际实施时,数据的可扩展性和安全性能,只有这样,所设计出来的系统,才能达到上述目的,具有较好的可扩充性,以满足今后的系统发展目标。
整个系统的设计中,系统必须满足以下要求:

(1)易用性
在用户的权利限制下,可以在一个统一样式的接口中进行有关的全部商业过程操作,或获得全部有关的资料,从而极大地提升了操作者的工作效率和使用方便,使该体系得到了更好地运用。
(2)柔软性
鉴于该系统涉及的业务领域较为多样,故其设计应具备较强的应变能力以处理应对各种可能的变化。
(3)扩展性
由于对人物关系数据爬取展示管理需求不断变化的需要,需要对系统进行升级和扩充,这就需要在开发初期设计进行一个较为良好的可扩充机制。系统整体框架结构如图 3.2所示。

图 3.2 系统整体框架结构

3.3 数据爬取模块
爬虫技术指的是一种根据页面代码的内容构建的规则,通过人工识别框架,使用软件从页面中获得现实中有用的信息以及我们所需要的信息。如果把整个网络比喻成一张巨型的蛛网,那么这些蠕虫就像是一只巡视的蜘蛛。爬虫会根据站点的源地址 URL 查找一个网页,接着从一个网页开始,将该网页的整个内容读出来,再利用这些网页间的相关关系,寻找其他的网页,如此反复,直至将整个网页都浏览一遍。[5] 。Python 爬虫爬行程序的全部流程如下:
(1)通过查询模块 requests 来开启Web 站点的源地址(URL),从而获得返回的 HTML Web 页面信息。
(2)查看 Web 源代码,查找 Web 下面每一个需要被爬行的子 Web URL 与源Web 页面的关联,并对需要检索的 Web 站点进行解析。
(3)使用常用的 bs4 、re 或者是 xpath 来提取想要的关键信息。
(4)将所获得的有用信息文件(csv) 下载或储存到指定的文件目录之下。

网络爬虫是指分析网页的构成,按照特定的规律,以脚本或编程方式获得互联网的组成的一种程序[17] 。Web 爬行器的详细作用见图 4-4 中的网络爬行器的流程,它会按照 URL 的地址来发出一个要求,然后在得到对应的页面之后,对页面DOM 文件进行分析,然后将所需要的数据和下一个页面的 URL 进行筛选,然后把得到的数据保存在当地,然后再用步骤 3 中所得到的 URL 进行一次遍历,直至循环完成为止,如图 3.3所示。

图 3.3 爬虫流程

3.4 数据处理模块
停用词是指数据中一些没有意义的词,例如中文文本当中常见的“的”、“了”等,还有一些书名号、省略号等内容,这些词对于研究的判断来说都没有什么作用,反而是增加了工作量,因此需要将这些停用词进行去除。常见的停用词表有哈工大停用词表、百度停用词表等如图 3.4所示。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐