文章目录
文本数据可视化
一、实验目的
- 深入理解文本可视化的概念和应用场景。
- 熟练掌握文本可视化的相关技术,包括文本信息提取、词云生成等。
- 学会运用Python库进行文本处理、图像处理和数据可视化操作。
- 尝试构造文本指纹,并将其以可视化的方式呈现。
二、实验原理
- 文本可视化:是将文本数据通过图形化的方式呈现,以直观展示文本的特征、结构和信息。不同人对文本信息需求多样,如想了解文本涉及事物或获取关键词等。句法分析算法和主题抽取算法可用于提取不同层面的文本信息。
- 词云生成:根据文本中词语的出现频率,将词语以不同大小、颜色和位置展示在图形中,频率越高的词语在词云中显示越大越突出,能快速呈现文本的关键信息。
- 文本指纹构造:通过对文本内容进行特定处理,如提取关键词、结合文献元数据(若为XML或BibTeX格式),再计算哈希值,将哈希值以像素点颜色深浅表示,生成类似马赛克图的文献指纹图片,用于标识和区分文本。
三、实验环境
- 编程语言:Python 3.11
- 相关库:jieba(用于中文分词)、wordcloud(生成词云)、matplotlib(数据可视化)、numpy(数值计算)、PIL(图像处理)、hashlib(计算哈希值)、xml.etree.ElementTree(解析XML文件)、bibtexparser(处理BibTeX文件)
四、实验步骤
- 数据准备:获取实验所需的文本文件,本实验使用“E:\technology\The_sixth_theaper\《师说》-韩愈.txt”和“E:\technology\The_sixth_theaper\千千阙歌-歌词.txt”两个文件作为数据来源。
- 环境配置:确保Python环境中已安装实验所需的所有库,若未安装,使用
pip install命令进行安装。 - 文本预处理:使用
jieba库对文本进行分词,去除停用词,将处理后的文本以空格连接成字符串,便于后续词云生成和文本指纹构造。停用词列表包含常见的无意义词汇,如“的”“了”“在”等,扩展停用词以提高词云质量。 - 形状蒙版生成:编写函数生成不同形状的蒙版,包括心形、星形和云朵形状。通过数学公式计算形状的轮廓点,使用
PIL库的ImageDraw绘制形状,将绘制好的形状转换为numpy数组作为词云生成的蒙版。 - 颜色函数生成:根据不同的颜色方案,生成自定义颜色函数。颜色方案包括蓝色、红色、绿色、粉色、紫色和彩虹色等。函数根据随机数选择颜色列表中的颜色,为词云图中的单词上色。
- 词云生成与保存:使用
wordcloud库生成词云图,设置词云的各种参数,如字体、背景颜色、蒙版、颜色函数、轮廓宽度和颜色、最大词数、最小和最大字体大小等。将生成的词云图显示并保存到指定目录,文件名根据文本文件名和形状类型命名。
使用jieba进行分词
精确模式分词
jieba的默认分词模式是精确模式,它试图将句子最精确地切开,适合文本分析。这里使用lcut方法,它返回一个包含分词结果的列表。
全模式分词
全模式会把句子中所有的可以成词的词语都扫描出来,速度非常快,但不能解决歧义。
搜索引擎模式分词
搜索引擎模式在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
8. 文献指纹图片生成:
- 文本内容读取与关键信息提取:使用open函数读取文本文件内容,利用jieba库进行分词操作,将分词结果转换为集合去重后,再用空格连接成字符串,初步提取文本的关键信息。对于可能存在的XML格式文献,使用xml.etree.ElementTree库的parse方法解析文件,遍历根节点下的所有元素,若元素标签为title、author或date,则将其文本内容添加到关键信息字符串中。对于BibTeX格式文献,通过bibtexparser库的load函数加载文件内容,遍历文献条目,若条目中存在title、author或year字段,同样将其内容添加到关键信息字符串。
- 哈希值计算:将包含文本关键词和可能的元数据信息的字符串进行编码(采用utf-8编码),使用hashlib库的md5方法计算其哈希值,得到一个固定长度(32位十六进制字符串)的文本指纹哈希值。
- 图片生成与颜色映射:根据哈希值的长度计算所需的像素块数量,通过np.ceil(np.sqrt(num_pixels))计算出正方形布局的边长,由此确定图片大小为边长乘以每个像素块的大小(本实验中每个像素块为20x20)。使用PIL库的Image.new创建一个指定大小的白色背景RGB图像,利用ImageDraw和ImageFont进行图像绘制。定义颜色映射为红白过渡色,通过plt.cm.get_cmap('Reds')获取颜色映射表。遍历哈希值的每个字符,将字符转换为对应的颜色索引(通过int(fingerprint[i], 16) * 16 % 256计算),根据颜色索引从颜色映射表中获取颜色,将颜色转换为整数元组后,使用draw.rectangle在图像上绘制对应的像素块。
- 图片保存:根据原文本文件路径,在文件名后添加_literature_fingerprint.png作为文献指纹图片的文件名,使用img.save方法将生成的图像保存到指定路径。
五、实验结果
- 词云图:成功生成了《师说》和《千千阙歌》的多种形状词云图,包括心形、星形和云朵形状。每个形状的词云图都根据设定的颜色方案进行上色,词云图中词语的大小和颜色直观反映了其在文本中的出现频率。
(1)师说
心形词云

星形词云

云朵词云

(2)千千阙歌
心形词云

星形词云

云朵词云

- 文献指纹图片:为《师说》和《千千阙歌》生成了文献指纹图片,图片以红白过渡色的像素块展示,每个像素块的颜色根据文本哈希值的字符映射确定,不同的文本生成的文献指纹图片具有明显差异,可用于区分不同文本。
(1)师说

(2)千千阙歌

六、实验总结
(一)实验收获
通过本次实验,我对文本可视化技术有了更深入的理解和实践经验,熟练掌握了多种文本处理和可视化库的使用方法。学会了从文本中提取关键信息,生成具有特定形状和颜色的词云图,以及构造和可视化文本指纹。
(二)学习文献指纹的困难、好奇及解决过程
在初次接触文献指纹时,我面临诸多困难。首先,理解文献指纹的概念存在障碍,难以把握它如何精准地代表一篇文献的独特特征。在实际构造过程中,对于如何从文本中有效提取能全面反映文献特征的关键信息感到困惑,简单的关键词提取似乎无法涵盖文献的所有重要方面。
同时,我对文献指纹的应用场景充满好奇,想知道在实际的学术研究、文献管理等领域,它到底能发挥多大的作用,以及如何与其他技术结合使用。
为解决这些问题,我查阅了大量相关资料,深入研究了不同的文本特征提取算法,了解到除了关键词,文献的结构、引用关系等信息也至关重要。在代码实现上,不断调试和优化关键信息提取部分的代码,尝试不同的方法处理XML和BibTeX格式文件,确保能完整地获取元数据。对于颜色映射部分,反复调整参数,使生成的图片能更清晰地区分不同文献的指纹特征。经过不断努力,最终成功构造出文献指纹图片,并对其原理和应用有了更深刻的理解。
(三)问题与解决方法
- 在颜色转换过程中,遇到
AttributeError: 'tuple' object has no attribute 'astype'错误,原因是对元组使用了astype方法。通过调整代码,先将元组转换为numpy数组,再进行类型转换,解决了该问题。 - 在生成文献指纹图片时,最初的黑白配色和大量空白不符合要求,通过修改颜色映射为红白过渡色,并根据哈希值长度调整图片尺寸和像素块布局,解决了这些问题。
(四)实验改进方向
在文本指纹构造方面,可以探索更复杂、更准确的算法,不仅仅依赖关键词和简单的哈希计算。在词云生成方面,可以进一步优化参数设置,提高词云图的美观度和信息传达效果。同时,可以尝试更多的文本数据源和可视化形式,拓展实验的应用范围。

被折叠的 条评论
为什么被折叠?



