本项目源自网络、群体与市场课程的期末课程设计,程序支持使用结巴分词获取人物、地点、机构三类实体名,以
项目文件夹下包括源代码目录 src
,已计算好的各类分值及预处理后的 data_Json
,以及从$\text{gov.cn}$ 上获取的新闻数据
本项目的实现使用 python3.7
和 Neo4j-3.5.11
。
**注:**不同版本的 src/Gov_neo4y.py
和src/utils.py
中的部分
-
utils.py
参数 功能 $-d$ 需附加参数,参数为预处理结果保存目录,默认为$\text{'../data/new_data_Json'}$ -
Gov_networkx.py
参数 功能 $-d$ 需附加参数,参数为网络关系文件路径,由数据预处理过程得到,默认为$\text{'../data/data_Json/relation_filtered.json'}$ $-n$ 需附加参数,参数为结果文件保存目录,默认为 $\text{'../data/data_Json'}$ $-v$ 图的验证,输入一个人名,查询与其关系最强的10个邻居 $-s$ 图的统计,获取图的结点个数、边数、连通分量个数、最大连通分量大小 $-cp$ 计算并返回 $\text{PageRank}$ 影响力$\text{Top 10}$ 人物及分数,将所有人物的分值保存在结果目录下的$\text{pagerank_networkx.json}$ $-cc$ 使用 $\text{Louvain}$ 算法社区挖掘,并将各人所属社区编号保存至结果目录下的$\text{community_networkx.json}$ $-cf$ 计算并返回聚集系数 $\text{Top 10}$ 人物及分值,将所有人物的聚集系数保存至结果目录下的$\text{clustering_coef_networkx.json}$ $-p$ 读取结果目录下的 $\text{pagerank_networkx.json}$ 文件,获取$\text{Top 10}$ $-f$ 读取结果目录下的 $\text{clustering_coef_networkx.json}$ ,获取$\text{Top 10}$ $-w$ 获取两节点间的 前$10$ 条最短路径 -
Gov_neo4j.py
参数 功能 $-d$ 需附加参数,参数为网络关系文件路径,由数据预处理过程得到,默认为$\text{'../data/data_Json/relation_filtered.json'}$ $-n$ 需附加参数,参数为结果文件保存目录,默认为 $\text{'../data/data_Json'}$ $-c$ 创建 $Neo4j$ 数据库$-cpr$ 计算 $\text{PageRank}$ 分值,并保存至$Neo4j$ 数据库,作为节点属性$-pr$ 获取 $Neo4j$ 中保存的$\text{PageRank}$ 分值,并保存至结果文件夹下$\text{pagerank_neo4j.json}$ $-cbc$ 计算中介中心性,并保存至$Neo4j$ 数据库,作为节点属性 $-bc$ 获取$Neo4j$ 中保存的$\text{Betweenness centrality}$ 分值,并保存至结果文件夹下 $\text{betweenness_centrality.json}$ $-cl$ 使用 $\text{Louvain}$ 算法划分社区,并将各节点所属社区编号保存至$Neo4j$ 数据库,作为节点属性$-l$ 获取各社区包含的所有节点,并保存至结果文件夹下 $\text{community_neo4j.json}$
数据预处理部分代码在src/utils.py
中,如下运行即可对新闻数据进行预处理:
cd src #进入代码目录文件
python utils.py # 使用默认存储目录../data/new_data_Json
python utils.py -d ../data/new_data_Json # 自定义存储目录
预处理结果已存放在目录src/data_Json
中,用户可直接利用该目录中的数据文件。
**注:**推荐使用src/data_Json
中的
该文件主要包括以下两部分功能:
-
结巴分词及频度统计:
使用结巴分词对人名、地名、机构名进行抽取和词频统计,并根据新闻共现关系建立联系。存储在指定目录下的
$\text{human.json,places.json,organs.json}$ 和$\text{relation.json}$ 中。 -
实体名排序及过滤
对三类实体按频度排序,并存储在
$\text{human_sorted1.json, places_sorted.json,organs_sorted.json}$ 文件中。进一步对人名处理,过滤掉其中单字人名,并相应删除对应的关系。保存在$\text{human_sorted2.json}$ 和$\text{relation_filtered.json}$ 中。
使用 src/Gov_networkx.py
中。
-
图的验证
如下运行
$\text{Gov_networkx.py}$ ,获取目标人物的$\text{Top 10}$ 强关系节点。cd src python Gov_networkx.py -v # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -v #使用自定义关系数据路径
根据提示输入人名,输入
$\text{quit}$ 即可退出。若输入的人名不存在,则程序给出提示,可重新输入人名。 -
图的统计
如下运行
$\text{Gov_networkx.py}$ ,获取图的统计信息:cd src python Gov_networkx.py -s # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -s #使用自定义关系数据路径
输出结点数、边数、连通分支数、极大连通分支节点数:
-
$\text{PageRank}$ 影响力用户可直接使用计算好的文件输出
$\text{PageRank Top 10}$ ,也可以选择重新计算$\text{PageRank}$ 并保存。a. 计算
$\text{PageRank}$ 并保存结果 如下运行
$\text{Gov_networkx.py}$ ,在输出$\text{Top 10}$ 人物的同时,将所有节点的分值保存至指定目录下的$\text{pagerank_networkx.json}$ :cd src python Gov_networkx.py -cp # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -n ../data/data_Json -cp #使用自定义关系数据路径,自定义输出结果目录
b. 直接获取
$\text{PageRank}$ 如下运行
$\text{Gov_networkx.py}$ ,在输出$\text{Top 10}$ 人物的同时,将所有节点的分值保存至指定目录下的$\text{pagerank_networkx.json}$ :cd src python Gov_networkx.py -p # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -n ../data/data_Json -p #使用自定义关系数据路径,自定义结果目录(pagerank_networkx.json所在目录)
-
聚集系数计算
用户可直接使用计算好的文件输出聚集系数
$\text{Top 10}$ ,也可以选择重新计算聚集系数并保存。a. 计算聚集系数并保存结果
如下运行
$\text{Gov_networkx.py}$ ,在输出$\text{Top 10}$ 人物的同时,将所有节点的分值保存至指定目录下的$\text{clustering_coef_networkx.json}$ :cd src python Gov_networkx.py -cf # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -n ../data/data_Json -cf #使用自定义关系数据路径,自定义输出结果目录
b. 直接获取聚集系数
如下运行
$\text{Gov_networkx.py}$ ,在输出$\text{Top 10}$ 人物的同时,将所有节点的分值保存至指定目录下的$\text{clustering_coef_networkx.json}$ :cd src python Gov_networkx.py -p # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -n ../data/data_Json -p #使用自定义关系数据路径,自定义结果目录(clustering_coef_networkx.json所在目录)
-
$\text{Louvain}$ 社区挖掘如下运行
$\text{Gov_networkx.py}$ ,将所有节点所属社区保存至指定目录下的$\text{community_networkx.json}$ :cd src python Gov_networkx.py -cc # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -n ../data/data_Json -cc #使用自定义关系数据路径,自定义结果目录
正确运行输出如下:
-
小世界现象:$\text{K}$ 短路径
如下运行
$\text{Gov_networkx.py}$ ,使用$\text{Yen's}$ 算法获取节点间最短路径:cd src python Gov_networkx.py -w # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -w #使用自定义关系数据路径
根据提示输入源节点和目标节点人名,输入
$\text{quit} $ 即可退出。
使用图数据库 src/Gov_neo4j.py
中。
**注:**使用该部分代码需要用户安装或在线使用
-
向
$Neo4j$ 数据库导入数据,构建网络如下运行
$\text{Gov_neo4j.py}$ ,构建图数据库:cd src python Gov_neo4j.py -c # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -w #使用自定义关系数据路径
代码正确运行输出如下,首先连接
$Neo4j$ 数据库,然后清空当前数据库,将网路节点及关系插入数据库。 -
$\text{PageRank}$ 影响力首次运行时,用户需先调用
$-cpr$ 计算$\text{PageRank}$ 分值并保存至数据库,再调用$-pr$ 获取分值。此后可直接调用$-pr$ 获取分值。调用$-pr$ 在输出$\text{Top 10}$ 的同时,也将结果保存至结果目录下的$\text{pagerank_neo4j.json}$ 文件中。cd src # 首次运行示例 python Gov_neo4j.py -cpr -pr # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -n ../data/data_Json -cpr -pr #使用自定义关系数据路径,自定义结果保存目录 # 非首次运行示例 python Gov_neo4j.py -pr python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -n ../data/data_Json -pr #使用自定义关系数据路径,自定义结果保存目录
-
中介中心性
$\text{Betweenness centrality}$ 首次运行时,用户需先调用
$-cbc$ 计算$\text{Betweenness centrality}$ 分值并保存至数据库,再调用$-bc$ 获取分值。此后可直接调用$-bc$ 获取分值。调用$-bc$ 在输出$\text{Top 10}$ 的同时,也将结果保存至结果目录下的$\text{beteenness_centrality_neo4j.json}$ 文件中。cd src # 首次运行示例 python Gov_neo4j.py -cbc -bc # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -n ../data/data_Json -cbc -bc #使用自定义关系数据路径,自定义结果保存目录 # 非首次运行示例 python Gov_neo4j.py -bc python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -n ../data/data_Json -bc #使用自定义关系数据路径,自定义结果保存目录
-
$\text{Louvain}$ 社区挖掘首次运行时,用户需先调用
$-cl$ 划分社区并保存至数据库,再调用$-l$ 将结果保存至结果目录下的$\text{Louvain_neo4j.json}$ 文件中,且文件形式为社区及其内部成员名单。cd src python Gov_neo4j.py -cl -l # 使用默认关系数据路径 python Gov_networkx.py -d ../data/data_Json/relation_filtered.json -n ../data/data_Json -cl -l #使用自定义关系数据路径,自定义结果保存目录