Skip to content

router8008/poetry-mining

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

全唐诗数据分析

这个项目尝试使用一些文本特征分析的方法,对全唐诗进行数据分析。

样例

分析的结果。

**基于统计的分析

写作数量排名:
白居易 2642
杜甫 1151
李白 897
 842 (佚名)
齐己 783
刘禹锡 727
元稹 593
李商隐 555
贯休 553
韦应物 551

最常用的词:
何处 1637
不知 1378
万里 1293
今日 1148
春风 1105
白云 1065
千里 1042
不可 987
不见 884
人间 864

最常用的名词:
人 7090
君 3189
风 2381
事 2071
水 2033
酒 1941
心 1855
山 1682
云 1681
客 1606

最常见的地名:
长安 658
青山 646
云 624
夕阳 465
香 459
江南 412
青云 396
洛阳 360
山川 348
南山 334

最常见的形容词:
远 2653
长 2592
新 2458
深 2189
高 2159
好 2048
老 1482
旧 1460
清 1411
难 1370

**基于词向量的分析

与 春 相关的词:
三月 0.8542773723602295
东风 0.852995753288269
芳草 0.8398303985595703
催 0.8364790678024292
花 0.8362865447998047
春风 0.83452969789505
春色 0.8293470740318298
杨柳 0.8261793851852417
风光 0.8201332092285156
鬓 0.8186365365982056

与 鸳鸯 相关的词:
芙蓉 0.9702868461608887
欹 0.969279408454895
翡翠 0.9670791625976562
槛 0.9654079675674438
檐 0.9595150947570801
锦 0.958173394203186
妆 0.9573670029640198
帘 0.957240641117096
枕 0.9514492750167847
烛 0.9498785734176636

与 垂柳 相关的词:
花影 0.9959638118743896
万株 0.9955847263336182
绮窗 0.9943434000015259
宫花 0.9942189455032349
小庭 0.9941931366920471
柳丝 0.993552565574646
画楼 0.993486762046814
榆叶 0.9933245182037354
日暖 0.9932219982147217
飘香 0.9931892156600952

与 枕 相关的词:
欹 0.9931267499923706
帘 0.9774231910705566
翡翠 0.9678566455841064
簟 0.9676691293716431
檐 0.9662747383117676
壁 0.9642165899276733
砌 0.9638965129852295
池 0.9621031284332275
窗 0.9597471952438354
冷 0.9595738649368286

与 李白 用词相近的诗人:
根据tf-idf标准: 杜甫
根据word2vector标准: 赵冬曦

与 杜甫 用词相近的诗人:
根据tf-idf标准: 白居易
根据word2vector标准: 韦应物

与 白居易 用词相近的诗人:
根据tf-idf标准: 元稹
根据word2vector标准: 王绩

对写诗数量前一百位的诗人的tf-idf词向量降维结果如下: 局部结果放大:

对写诗数量前一百位的诗人的word2vector词向量降维结果如下: 局部结果放大:

运行样例

依赖环境

程序使用了Anaconda的集成python环境进行开发,用到了内部例如numpy, sklearn, matplotlib等机器学习和数学处理库。

另外,还需要如下环境:

pip3 install jieba 		#用于中文分词
pip3 install gensim		#用于计算word2vec

运行方法

当配置好环境后,这样运行样例:

python3 example.py

实现介绍

词向量

首先,数据分析的一个重要部分是计算每个诗人所写的诗的集合词向量,可以看作是诗人的“文风”。关于词向量的计算,使用了两种方法:

  • tf-idf

    通过文本中词语的的tf-idf值计算诗人的用词特征,之后计算他们的余弦相似度,推荐一篇可以参考相关知识的blog:sklearn文本特征提取

    这种方法的的弊端在于没有考虑到词语之间的关联性,比如说"青","白"之间的关联程度,和"青","衣"之间的关联度肯定是不同的,所以引入了下一种计算词向量的方法。

  • word2vec

    Word2Vec的基本思想是把自然语言中的每一个词,表示成一个统一意义统一维度的短向量。通过word2vec训练后,得到每个词语的词向量,再通过求和平均的方法获得文本的词向量,则可以得到每个诗人的词向量。当然,求平均肯定不是一个计算文档词向量的最优方法,此处有待改进。

    关于这个方法可以参考:word2vec&doc2vec词向量模型

数据降维

为了便于显示,将计算结果降维,用到了t-SNE算法。

关于t-SNE算法可以参考:t-SNE聚类算法实践指南,其中的代码实现可以参考sklearn的官方文档:Manifold learning on handwritten digits: Locally Linear Embedding, Isomap…


欢迎对该样例进行补充和修改!

About

全唐诗数据挖掘,分析

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages