数据可视化实验:文本数据可视化

一、引言与实验原理

文本是语言和沟通的载体,文本的含义以及读者对文本的理解需求均纷繁复杂。例如,对于同一个文本,不同的人的解读也是不一样的,有的人希望了解文本中涉及到的事物,而有的人希望得到文本中的关键词。鉴于对文本信息需求的多样性,需要从不同层级提取与呈现文本信息。一般把对文本的理解需求分成三级:词汇级(Lexical Level)、语法级(Syntactic Level ) 和语义(Semantic Level)。不同级的信息挖掘方法也不同,词汇级当然是用各类分词算法,语法级用一些句法分析算法,语义级用主题抽取算法。文本文档的类别多种多样,包括单文本、文档集合和时序文本数据三大类,这使得文本信息的需求更为丰富。

二、实验目的与实验环境

本次实验学习的是比例数据可视化技术的操作方法。使用Python完成。主要包括:

  1. 了解什么是文本可视化
  2. 掌握文本可视化的相关技术
  3. 文本信息的提取和可视表达
  4. 本次实验是将某一文本进行可视化生成词云图片
  5. 尝试构造文本指纹

实验环境:

  • OS:win11
  • python:v3.11.5

三、实验步骤

1、读入数据

下载千千阙歌-歌词.txt 文件后,将其存储在工作目录下

lyrics_path = r'e:\Microsoft VS Code\BDV\BDV Exam\Chapter 6\千千阙歌-歌词.txt'
with open(lyrics_path, 'r', encoding='utf-8') as file:
    lyrics = file.read()
    print(lyrics)

2、安装依赖

打开终端,检查是否安装了matplotlib、jieba、wordcloud运行库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、构造词云

(1)读入文本数据

lyrics_path = r'e:\Microsoft VS Code\BDV\BDV Exam\Chapter 6\千千阙歌-歌词.txt'
with open(lyrics_path, 'r', encoding='utf-8') as file:
    lyrics = file.read()
    print(lyrics)

(2)使用结巴分词

生成字符串,默认精确模式,如果不通过分词,无法直接生成正确的中文词云

import jieba

lyrics_path = r'e:\Microsoft VS Code\BDV\BDV Exam\Chapter 6\千千阙歌-歌词.txt'
with open(lyrics_path, 'r', encoding='utf-8') as file:
    lyrics = file.read()
    # 使用jieba进行精确模式分词
    words = jieba.cut(lyrics, cut_all=False)
    # 将分词结果用空格连接成字符串
    result = ' '.join(words)
    print("分词结果:")
    print(result)

运行代码之后,可以看到已经完成了分词

在这里插入图片描述

(3)生成词云图

需要注意的是 WordCloud 默认不支持中文,所以这里需已下载好的中文字库

import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt

lyrics_path = r'e:\Microsoft VS Code\BDV\BDV Exam\Chapter 6\千千阙歌-歌词.txt'
with open(lyrics_path, 'r', encoding='utf-8') as file:
    lyrics = file.read()
    words = jieba.cut(lyrics, cut_all=False)
    result = ' '.join(words)

    wordcloud = WordCloud(
        font_path="simhei.ttf",  
        width=800,
        height=400,
        background_color='white',
        max_words=200
    )

    wordcloud.generate(result)
    
    plt.figure(figsize=(10, 5))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')
    plt.show()

运行后生成词云图
在这里插入图片描述

4、文献指纹

数据来源:《师说》-韩愈.txt

在这里插入图片描述

接下来将构造该文本内容的文献指纹。文献指纹类似于人类指纹,通过分析文档的词语模式、结构特征或格式差异生成独一无二的标识符。

(1)步骤说明

  1. 读取文本文件内容
  2. 对文本进行预处理 ,去除其标点符号和空格
  3. 统计字符频率
  4. 使用SHA-256哈希计算文本指纹
  5. 输出结果

(2)原理解释

  1. 文本预处理

    • 使用正则表达式去除所有非中文字符
    • 保留纯中文内容以确保指纹计算的准确性
  2. 频率统计

    • 使用 Counter 类统计每个字符出现的次数
    • 计算每个字符的出现频率百分比
    • 频率分析可以帮助识别文本的特征
  3. 指纹生成

    • 使用 SHA-256 哈希算法生成文献指纹
    • SHA-256 能够生成唯一的、固定长度的哈希值
  4. 输出展示

    • 显示原始文本和处理后文本的长度对比
    • 展示最常见的 10 个字符及其频率
    • 输出最终的文献指纹
import hashlib
import re
from collections import Counter

def read_text_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        return f.read()

def preprocess_text(text):
    # 移除标点符号和空格
    return re.sub(r'[^\u4e00-\u9fa5]', '', text)

def calculate_char_frequency(text):
    # 统计字符频率
    char_count = Counter(text)
    total_chars = len(text)
    # 计算频率百分比
    frequency = {char: count/total_chars * 100 for char, count in char_count.items()}
    return frequency

def generate_fingerprint(text):
    # 使用SHA-256生成文献指纹
    return hashlib.sha256(text.encode('utf-8')).hexdigest()

def main():
    file_path = r'e:\Microsoft VS Code\BDV\BDV Exam\Chapter 6\《师说》-韩愈.txt'
    
    # 1. 读取文件
    original_text = read_text_file(file_path)
    print("原始文本长度:", len(original_text))
    
    # 2. 预处理文本
    processed_text = preprocess_text(original_text)
    print("\n处理后文本长度:", len(processed_text))
    
    # 3. 计算字符频率
    char_frequency = calculate_char_frequency(processed_text)
    print("\n字符频率统计(top 10):")
    for char, freq in sorted(char_frequency.items(), key=lambda x: x[1], reverse=True)[:10]:
        print(f"{char}: {freq:.2f}%")
    
    # 4. 生成文献指纹
    fingerprint = generate_fingerprint(processed_text)
    print("\n文献指纹(SHA-256):")
    print(fingerprint)

if __name__ == "__main__":
    main()

在运行代码之后,生成了独一无二的文献指纹。

在这里插入图片描述

四、总结与心得

本次重点探索了词云生成与文献指纹构造两种技术方法。通过处理中文歌词和古文文本,结合Python中的分词工具jieba、词云库WordCloud以及哈希算法库hashlib,实验实现了从文本信息提取到可视化呈现的全流程。

在词云生成部分,实验以《千千阙歌》歌词为数据源,首先使用jieba进行精确分词,解决了中文文本因无空格分隔导致的词云生成难题。通过配置WordCloud参数,生成了直观展示歌词高频词汇的可视化词云图。在文献指纹构造部分,实验选取韩愈的《师说》作为分析对象。通过正则表达式去除标点符号和空格,保留纯中文字符后,统计字符频率并计算SHA-256哈希值。生成的64位哈希指纹具有唯一性和不可逆性,能够作为文本的“数字身份证”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值