三国演义文本挖掘实战:从词云到多维交互式分析

当提到文本可视化,大多数人的第一反应往往是词云——这种色彩斑斓但信息密度低的图表早已成为入门级分析的代名词。本文将带您突破传统词云的局限,使用Python构建一个完整的《三国演义》分析仪表盘,涵盖人物社交网络、章节结构、高频人物统计等维度,并通过Pyecharts实现交互式可视化。

1. 文本分析的基础工程

文本分析的第一步永远是数据清洗与结构化处理。《三国演义》作为古典文学作品,存在大量别名、称谓变化等需要规范化的内容。我们需要建立人物别名映射表,确保"玄德"、"刘豫州"等不同称谓都能正确归并为"刘备"。

核心清洗步骤:

# 人物别名映射字典
name_mapping = {
    '孔明': '诸葛亮', 
    '云长': '关羽',
    '玄德': '刘备',
    '孟德': '曹操',
    # 其他映射关系...
}

def normalize_name(raw_name):
    return name_mapping.get(raw_name, raw_name)

处理后的数据应包含以下关键字段:

字段名 类型 说明
chapter int 章节编号
character str 标准化后的人物名
count int 出现次数
relation dict 人物共现关系

2. 人物维度分析体系

2.1 出场频次统计

使用Pyecharts构建交互式柱状图,不仅能展示TOP15人物的出场次数,还能通过点击查看细节:

from pyecharts.charts import Bar
from pyecharts import options as opts

bar = (
    Bar()
    .add_xaxis(top_characters)
    .add_yaxis("出场次数", frequencies)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="三国人物出场频次TOP15"),
        datazoom_opts=[opts.DataZoomOpts()]  # 添加数据缩放控件
    )
)
bar.render("character_frequency.html")

2.2 社交关系网络分析

人物关系网络能直观展示三国阵营分布。我们使用NetworkX构建图结构,并通过边权重表示人物关联强度:

import networkx as nx

G = nx.Graph()
for char1, char2, weight in co_occurrences:
    G.add_edge(char1, char2, weight=weight)

# 使用力导向布局算法
pos = nx.spring_layout(G, k=0.5, iterations=50)

关系强度分级策略:

  • 强关系(>0.6):绿色实线
  • 中等关系(0.3-0.6):黄色实线
  • 弱关系(<0.3):蓝色虚线

3. 文本结构可视化

3.1 章节字数趋势分析

通过折线图观察各章回字数变化,可发现原著的结构特点:

line = (
    Line()
    .add_xaxis(chapter_numbers)
    .add_yaxis("字数", word_counts,
               markline_opts=opts.MarkLineOpts(
                   data=[opts.MarkLineItem(type_="average")]
               ))
    .set_global_opts(title_opts=opts.TitleOpts(title="章回字数趋势"))
)

3.2 关键词演进分析

使用滑动窗口统计不同章节的关键词变化,制作热力图展示故事焦点转移:

from pyecharts.charts import HeatMap

heatmap = (
    HeatMap()
    .add_xaxis(chapter_ranges)
    .add_yaxis("关键词", keywords, frequency_matrix)
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(max_=100)
    )
)

4. 高级可视化技巧

4.1 交互式词云增强版

传统词云只能展示频率,我们增强为带交互功能的词云:

wordcloud = (
    WordCloud()
    .add(series_name="人物词频",
         data_pair=word_freq_pairs,
         word_size_range=[20, 100],
         tooltip_opts=opts.TooltipOpts(
             formatter="{b}: {c}次")
        )
)

4.2 多维数据联动

通过Pyecharts的联动功能,实现图表间交互:

// 在渲染后的HTML中添加JS联动代码
chart1.on('click', function(params) {
    // 根据点击的人物更新其他图表
    updateRelationGraph(params.name); 
});

5. 分析结论与项目扩展

通过本项目的多维分析,我们可以发现:

  • 曹操、刘备、诸葛亮构成核心人物三角
  • 章节字数呈现"战争章节膨胀"现象
  • 人物关系网络清晰反映魏蜀吴阵营划分

项目扩展建议:

  1. 添加时间轴展示故事发展
  2. 整合地理信息绘制势力范围变化
  3. 使用BERT等模型进行情感分析

完整项目代码已包含以下关键文件:

project/
├── data_processing.py  # 数据清洗
├── visualization.py    # 可视化模块
├── config.py           # 别名映射配置
└── main.py             # 主入口

更多推荐