背景概述
诗歌是构筑唐代文化史高峰的一座巨大丰碑,唐代的诗歌空前繁荣,达到完美的艺术境界,成为大唐王朝时代的文化标志。本人热爱唐诗,希望从文本挖掘的角度去探索全唐诗,挑战不同场景下文本处理和分析的过程,锤炼自己的数据分析技能;结合数据之美和诗歌之雅,分享诗词之美,感受诗词之趣。
分析框架
数据获取
《全唐诗》是在网上下载的免费文本数据,全文总共4.8W+首诗,文件中每一行为一首诗,包括编号、题目、作者、诗歌内容。
全唐诗字词频率分析
用Python统计分析全唐诗的字频、词频和词性,并使用Tableau进行可视化展示。其中字频分析维度包括全唐诗中的全局高频词、季节、植物、动物和颜色等;词频分析为全局高频词语,词性分析维度包括全唐诗全局词性分析、地名词性和时间词性等。
def cut_qts_to_words(qts_file,saved_words_file):
save_dir = os.path.dirname((saved_words_file))
dumped_file=os.path.join(save_dir,"qts_words_stat_result.pkl")
char_counter = Counter() # 字频统计
author_counter = Counter() # 每个作者的写诗篇数
vocab = set() # 词汇库
word_counter = Counter() # 词频统计
genre_counter = defaultdict(Counter) # 针对每个词性的Counter
lex_analyzer=thulac.thulac() #分词器
with open(qts_file,'r',encoding='utf-8') as f:
for line in f:
text_segs=line.split()
#作者诗篇统计
author=text_segs[2]
author_counter[author]+=1
#字频统计
poem=text_segs[-1]
valid_char_list=[c for c in poem if '\u4e00' <= c <= '\u9fff' or c == ',' or c == '。']
for char in valid_char_list:
char_counter[char]+=1
#词汇库统计、词频统计、词性统计
regularized_poem=''.join(valid_char_list)
word_gener_pairs=lex_analyzer.cut(regularized_poem)
for word,gener in word_gener_pairs:
vocab.add(word)
word_counter[word]+=1
genre_counter[gener][word]+=1
#存储结果
dumped_data=[char_counter, author_counter, vocab, word_counter, genre_counter]
with open(dumped_file, 'wb') as f:
pickle.dump(dumped_data, f)
return char_counter, author_counter, word_counter,genre_counter
f_qts_words=open("qts_words_stat_result.pkl","rb")
char_counter, author_counter,vocab, word_counter,genre_counter=pickle.load(f_qts_words)
#1、字频分析——全局高频字
stopwords=[",","。","不","而","第","何",