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

共现网络原理与《釜山行》项目环境搭建(一)

共现网络原理与《釜山行》项目环境搭建(一)

标签:Python3|共现网络|NLP|jieba|Gephi|人物关系提取
实验环境: 华为云 FlexusX 4 节点 Ubuntu 24.04 / Python 3.12.3

1. 什么是共现网络(Co-occurrence Network)

共现网络是文本挖掘社交网络分析中的基础工具。它的核心思想非常直观:

如果两个词语(或人物、实体)在同一段文本“窗口”内一起出现,就认为它们之间存在某种关系;共同出现的次数越多,关系越强。

1.1 共现网络三要素

要素含义本项目对应
节点(Node)研究对象《釜山行》电影人物
边(Edge)两个对象之间的关联两个人物在文本中共同出现
权重(Weight)关联强度共现次数

1.2 文本窗口的两种取法

  • 段落窗口:同一自然段内出现的人物即视为共现,适合宏观把握篇章结构。
  • 句子窗口:同一句子内出现的人物才视为共现,适合提取更紧密的语义关系。

本系列第一篇使用段落窗口构建全图;第二篇会对比不同窗口对网络结构的影响。

2. 项目整体架构

四台 8 vCPU / 16 GiB 的 FlexusX 服务器按如下方式分工,既充分使用资源,又把每个环节解耦:

192.168.0.195 (公网 1.94.202.19) ┌─────────────────────────────────┐ │ node-01 主力开发服务器 │ │ jieba 分词 + 文本处理 │ └────────────┬────────────────────┘ │ 192.168.0.215 (公网 120.46.159.92) │ ┌─────────────────────────────────┐ │ │ node-02 数据服务器 │ │ │ 电影文本 + 人物自定义词典 │ │ └────────────┬────────────────────┘ │ │ │ v v 192.168.0.147 (公网 124.70.105.142) 192.168.0.157 (公网 120.46.44.194) ┌─────────────────────────────────┐ ┌─────────────────────────────────┐ │ node-03 分析服务器 │ │ node-04 可视化服务器 │ │ NetworkX 构建图 │ │ matplotlib 静态图 │ │ 计算中心性 / 密度 / 路径 │ │ Gephi 安装与 GEXF 导入 │ └─────────────────────────────────┘ └─────────────────────────────────┘

3. 服务器基本信息

节点公网 IP私网 IP角色主要软件
node-011.94.202.19192.168.0.195jieba 分词 / 文本处理Python 3.12.3, jieba 0.42.1
node-02120.46.159.92192.168.0.215数据 / 自定义词典Python 3.12.3, jieba
node-03124.70.105.142192.168.0.147网络分析Python 3.12.3, networkx 3.6.1
node-04120.46.44.194192.168.0.157可视化Python 3.12.3, matplotlib 3.11.0

4. 环境准备

4.1 系统环境确认

四台服务器均使用 Ubuntu 24.04 LTS,已自带 Python 3.12.3:

root@ecs-11e6-0001:~# hostname && cat /etc/os-release | head -3 && python3 --versionecs-11e6-0001PRETTY_NAME="Ubuntu 24.04.4 LTS"NAME="Ubuntu"VERSION_ID="24.04"Python3.12.3

4.2 安装 Python 依赖

Ubuntu 24.04 启用了PEP 668,直接pip3 install会被拒绝,需要加--break-system-packages

# 所有节点都安装 jiebapip3install--break-system-packages jieba# node-03 / node-04 额外安装 networkx 和 matplotlibpip3install--break-system-packages networkx matplotlib

⚠️ 踩坑记录:第一次批量安装时,因网络较慢且多个pip进程并发,导致 node-01 / node-04 出现死锁。处理办法:先killall -9 pip3 python3,然后每个节点单独用nohup后台安装,并通过python3 -c "import jieba; print(jieba.__version__)"验证。

4.3 依赖版本确认

root@ecs-11e6-0001:~# python3 -c "import jieba; print(jieba.__version__)"0.42.1 root@ecs-11e6-0003:~# python3 -c "import networkx; print(networkx.__version__)"3.6.1 root@ecs-11e6-0004:~# python3 -c "import matplotlib; print(matplotlib.__version__)"3.11.0

5. 中文字体准备(可视化节点 node-04)

matplotlib 在无头服务器上默认找不到中文字体,会导致中文乱码。需要安装fonts-noto-cjk

root@ecs-11e6-0004:~# apt-get install -y fonts-noto-cjk

脚本中动态查找字体:

font_paths=fm.findSystemFonts()cn_fonts=[]forfpinfont_paths:try:font=fm.FontProperties(fname=fp)name=font.get_name()if"cjk"inname.lower()or"noto"inname.lower():cn_fonts.append((fp,name))except:passifcn_fonts:fm.fontManager.addfont(cn_fonts[0][0])plt.rcParams["font.sans-serif"]=[cn_fonts[0][1]]

实际输出:

找到中文字体: Noto Serif CJK JP

6. 数据准备(node-02)

6.1 电影文本

node-02上准备/root/busan_text.txt,内容覆盖《釜山行》主要情节段落,确保主要人物在同一段落中自然共同出现。文本结构示例:

《釜山行》人物关系分析文本 石宇是一个忙碌的基金经理,工作狂人,很少陪伴女儿秀安。秀安是个懂事的小女孩,母亲住在釜山。石宇决定带秀安乘坐KTX列车前往釜山找母亲。 在首尔站,石宇和秀安登上了前往釜山的列车。列车上还有许多人,尚华和他的妻子盛京,盛京怀着身孕。珍熙是一个活泼的女高中生,和她的男朋友容国一起出行。容国是棒球队的主力队员。英国是一家公司的运营部长,自私冷酷,只顾自己。列车上还有一对老姐妹,老姐姐和老妹妹,以及一个流浪的乞丐。列车长负责本次列车的运行。 ...

6.2 自定义 jieba 词典

由于《釜山行》人名是音译,默认jieba不会识别为专有名词,必须自定义词典/root/busan_dict.txt

石宇 999 nr 秀安 999 nr 尚华 999 nr 盛京 999 nr 珍熙 999 nr 英国 999 nr 容国 999 nr 老姐姐 999 nr 老妹妹 999 nr 乞丐 999 nr 列车长 999 nr

每一行格式为:

词语 词频 词性
  • nr表示人名(Named Entity)。
  • 词频999只是为了让 jieba 优先切出这些词。

7. 文件清单

项目涉及的文件及所在节点:

文件所在节点说明
busan_text.txtnode-01 / node-02 / node-03原始电影文本
busan_dict.txtnode-01 / node-02 / node-03自定义人名词典
busan_segment.pynode-01jieba 分词与共现提取
nodes.csv/edges.csvnode-01 / node-03节点与边
stats.jsonnode-01 / node-03统计信息
busan_network.pynode-03NetworkX 网络分析
busan_network.gexfnode-03 / node-04Gephi 导入格式
busan_network.graphmlnode-03GraphML 备用格式
busan_visualize.pynode-04matplotlib 可视化
busan_visualize_filtered.pynode-04过滤版核心网络可视化
install_gephi.pynode-04Gephi 安装脚本

8. 下一篇预告

第二篇将在这套环境上运行jieba分词,基于段落窗口提取人物共现矩阵,并生成nodes.csv/edges.csv。会给出真实的服务器输出、完整的 Python 代码和每一行代码的注释。

9. 参考

  • jieba 官方仓库:https://github.com/fxsjy/jieba
  • NetworkX 文档:https://networkx.org/documentation/stable/
  • Gephi 官方下载:https://gephi.org/users/download/
http://www.jsqmd.com/news/1151513/

相关文章:

  • 踏入次世代数字世界:虚幻引擎(Unreal Engine)全景指南
  • 新优化组合黄金分割单阳不破趋势飘带买卖点通达信主图源码、买卖点无未来
  • 存在强度:知识图谱中实体显著性的拓扑-语义协同度量框架(世毫九实验室原创研究)
  • 线代笔记:通俗理解行变换法求A⁻¹B
  • Nginx Unit的动态配置与语言模块
  • 来自圳天帝的新人介绍
  • 【SQL 专栏】1. 零基础入门!4 个语法搞定薪资报表查询
  • 5分钟快速上手:PvZ Toolkit植物大战僵尸修改器完整指南
  • 三维光学轮廓仪选型:三款国产设备横向解读
  • 4个国产模型组队PK一个旗舰模型,成本只要1/3——OpenSquilla 0.5.0多模型Agentic Routing vs 6大旗舰深度横评
  • 国产AI编程模型怎么选?几个月消耗50亿Token后,我的一些真实感受
  • 为什么Agent越来越聪明,却越来越难进入企业?丨FDE重新理解Agent工程
  • CoT ≠ 分步写,而是认知压缩术:一位NLP首席科学家的8年链式建模心法
  • 从AI行业大奖看下一代人工智能技术趋势与工程实践
  • RAG 检索优化:混合搜索、Reranking、多路召回
  • 力扣hot100简单题(三)
  • 基于Java的健身房管理系统
  • LangChain Agent 入门实战:从报错到跑通带记忆的交互式智能体(初学者保姆级教程)
  • 开源分析-joyagent多模态RAG实现
  • 半导体供应链安全与国产化替代实战指南
  • GLM5.2模型自部署实战:vLLM加速与量化技术实现推理性能超越
  • 曲辕RPA-激活曲辕办公软件
  • 运维与后端的绝对刚需之 Linux 性能调优与故障排查
  • 预算有限怎么选论文 AI 工具?高性价比口碑清单 + 避坑提醒
  • CoreDNS 调优:NDots 设不对,每次 DNS 查询都多走一步
  • 华为MetaERP 先把你那个前提纠一下——“华为 MetaERP 基本原理和 Oracle EBS 一致“这个说法不太准,得区分“功能表层“和“架构原理“:EBS 原理:R12 是单体 SOA +
  • 渲染管线选型实战:Forward+ 与 Deferred 的权衡及实时光追落地考量
  • 第一篇:基于移位变种的古典密码破解竞赛
  • Linux 定时任务不执行?cron 排错别只盯表达式
  • 【维克】海外量化行业扫描:美国的量化对冲基金有多强?