数据可视化实验:文本数据可视化
一、引言与实验原理
文本是语言和沟通的载体,文本的含义以及读者对文本的理解需求均纷繁复杂。例如,对于同一个文本,不同的人的解读也是不一样的,有的人希望了解文本中涉及到的事物,而有的人希望得到文本中的关键词。鉴于对文本信息需求的多样性,需要从不同层级提取与呈现文本信息。一般把对文本的理解需求分成三级:词汇级(Lexical Level)、语法级(Syntactic Level ) 和语义(Semantic Level)。不同级的信息挖掘方法也不同,词汇级当然是用各类分词算法,语法级用一些句法分析算法,语义级用主题抽取算法。文本文档的类别多种多样,包括单文本、文档集合和时序文本数据三大类,这使得文本信息的需求更为丰富。
二、实验目的与实验环境
本次实验学习的是比例数据可视化技术的操作方法。使用Python完成。主要包括:
- 了解什么是文本可视化
- 掌握文本可视化的相关技术
- 文本信息的提取和可视表达
- 本次实验是将某一文本进行可视化生成词云图片
- 尝试构造文本指纹
实验环境:
- 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)步骤说明
- 读取文本文件内容
- 对文本进行预处理 ,去除其标点符号和空格
- 统计字符频率
- 使用SHA-256哈希计算文本指纹
- 输出结果
(2)原理解释
-
文本预处理:
- 使用正则表达式去除所有非中文字符
- 保留纯中文内容以确保指纹计算的准确性
-
频率统计:
- 使用 Counter 类统计每个字符出现的次数
- 计算每个字符的出现频率百分比
- 频率分析可以帮助识别文本的特征
-
指纹生成:
- 使用 SHA-256 哈希算法生成文献指纹
- SHA-256 能够生成唯一的、固定长度的哈希值
-
输出展示:
- 显示原始文本和处理后文本的长度对比
- 展示最常见的 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位哈希指纹具有唯一性和不可逆性,能够作为文本的“数字身份证”。