AcFun

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 110|回复: 1

宋词里有什么——基于python的文本分析

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2023-1-1 13:52:33 | 显示全部楼层 |阅读模式
引言

宋词里有什么?有春花秋月,有云雨风雪,有金戈城阙,有惊涛赤血。宋词,是宋代盛行的一种中国文学体裁,标志着宋代文学的最高成就,它与唐诗争奇,与元曲斗艳,都代表一时文学之盛。宋词是一种音乐文学,它的产生、发展、创作与流传都与音乐相关,因为它有长有短,便于歌唱,所以广为流传。
如果问你最容易想到的宋词是什么?想必每个人都有属于自己的回答。也许是回忆起初见的“胜却人间无数”,也许是伤感于离别的“今宵酒醒何处”,也许是思而不见的“槛菊愁烟兰泣露”;亦或者,在遥想当年的“气吞万里如虎”,在北望中原时哀“叹江山如故”,还是在感慨,“浪淘尽”了的“千古风流人物”?
据统计,全宋词中两宋词人数量达1300余人,词作共2万余首,除了耳熟能详、脍炙人口的少部分以外,其他的词中又有哪些内容呢?不妨在浩如烟海的宋词中探索一番。(本贴使用的数据仅包含两宋的词作,数据来源https://github.com/chinese-poetry/chinese-poetry/tree/master/ci)
import pandas as pd
import numpy as np
import glob,os
from pypinyin import lazy_pinyin
import re
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import networkx as nx
from pylab import show
import seaborn as sns
import stylecloud
import warnings
warnings.filterwarnings('ignore')

path = r'F:\'
os.chdir(path)

# 正确显示中文和负号
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 字体
font = "simkai.ttf"

#%% 读取数据
data = pd.read_excel('宋词.xlsx')

#%% 分词
row,col = data.shape
data["分词"] = ''
for i in np.arange(row):
    cutwords = list(jieba.cut(data.iloc[i,2], cut_all=True))
    cutwords = pd.Series(cutwords)[pd.Series(cutwords).apply(len)>1]
    data.iloc[i,-1] = cutwords.values
   
words = np.concatenate(data["分词"])
word_df = pd.DataFrame(words,columns=['词语'])
word_df['数量'] = 1
word_stat = word_df.groupby('词语').count()
word_stat = word_stat.reset_index()
word_stat = word_stat.sort_values(by="数量",ascending=False)
word_stat["wordlen"] = word_stat['词语'].apply(len)
# 剔除词数大于4的词语
word_stat = word_stat[word_stat["wordlen"]<5]
# 剔除出现数量小于10的词语
word_stat = word_stat[word_stat["数量"]>=100]
画像

在一千多名词人中,如果按水平进行排序,自然无法形成公认的榜单。苏轼、辛弃疾、陆游、柳永、李清照、晏殊、周邦彦等等,均是宋词大家,无法严格分出高下。那么换个角度,谁的作词最多呢?
答案一定出乎意料,他就是——无名氏(皮一下hhh)。
在流传下来的作品中,有些作者姓名不可考,便以无名氏来代指,作者不可考的宋词共计有1569首。除去这些无名氏的作品以外,宋词作品数量最多的词人便是辛弃疾,高达629首——真不愧是武将里最有才华的,文人里最能打仗的。宋词数量位于其后的作者依次是苏轼、赵长卿、刘辰翁、吴文英等。




author_num = data.groupby('作者')['正文'].count().reset_index()
author_num.columns =['作者','数量']
author_num = author_num.sort_values(by='数量',ascending=False)

author_img = author_num.iloc[1:16,:]

fig = plt.figure(figsize=(20,15))
ax1 = fig.add_subplot(111)
sns.barplot(x='作者', y='数量',color='red',data=author_img,ax=ax1)
ax1.set(title='宋词作者及其作词的数量')
plt.savefig('作者词数量.jpg')

author_cloud = author_num.iloc[1:101,:]
cloud_words = data[data['作者'].isin(author_cloud['作者'].to_list())]
cloud_words = '/'.join(cloud_words['作者'])

stylecloud.gen_stylecloud(text=cloud_words,
                          font_path=font,
                          output_name='作者词云图.jpg',
                          icon_name='fas fa-star',
                          palette = "cartocolors.qualitative.Bold_9",
                          size=500)词牌名是词的一种制式曲调的名称,宋词的词牌名共有1420个,哪些词牌名的作品数量最多呢?
自然是那些耳熟能详的词牌名,前五名依次是:浣溪沙、水调歌头、鹧鸪天、菩萨蛮、满江红。


词频

春夏秋冬,四季轮回,古人多有伤春悲秋之感,但是对于夏冬的描写似乎较少。通过统计“春”、“夏”、“秋”、“冬”的字频,可以大概看到四季出现的比例。


text_str = data['正文'].to_list()
text_str = ' '.join(text_str)

def get_number(word_colors,image_colors):
    colors_num = pd.DataFrame()
    colors_num['字'] = word_colors
    colors_num['num'] = colors_num['字'].apply(lambda x: text_str.count(x))   
    colors_num['color'] = image_colors
    return colors_num
            
# 季节
season_word = ['春','夏','秋','冬']
image_colors = ['pink','gold','cyan','snow']
season_num = get_number(season_word,image_colors)
plt.pie(season_num['num'], labels=season_num['字'],colors = season_num['color'], autopct='%3.1f%%')  #
plt.title('季节')     
plt.show()

宋词作者最喜欢描写的季节便是春天了。春天里,百花争奇斗艳,但是夏秋冬季也有花朵绽放,哪种花在宋词中出现的频率最高呢?答案既不是“晋陶渊明独爱”的“菊”,也不是“自李唐以来,世人盛爱”的牡丹,而是“零落成泥碾作尘,只有香如故”的梅花。也许,是因为梅花那种凌霜傲雪的品格与中华民族坚忍不拔的精神相契合,所以频频出现在宋人的词作品中。


花朵五颜六色,万紫千红,那么宋词里各种颜色出现的频率又是怎样的呢?答案很符合直觉,那就是红色。


古代诗词讲究借景抒情,情景交融,宋词也不例外。作者常常以自然景象来表达和寄托情感,这些景象被称为意象。在两万多首宋词中,出现频率最高的自然景观意象,主要有:东风、西风、春风、梅花、明月、阑干、流水、黄昏等等。


关联网络

提起“东风”,大家会想到哪句词?是“把酒祝东风,且共从容”,是 “东风杨柳欲青青。烟淡雨初晴”,还是“不肯嫁东风。殷勤霜露中”?是“东风夜放花千树,更吹落,星如雨”,是“杨柳东风,海棠春雨”?还是“东风恶,欢情薄,一杯愁绪”?
不妨假设出现在同一首词中的意象之间具有相关性,且共同出现的次数越多,则相关性越高,以直线距离越近表示相关性越高来绘图,则可以看到,与东风相关的词语主要有:芳草,江南,海棠等等。


相思,是人间亘古不变的话题,在词作者的笔下,相思之情,百转千回,最是苦痛,最是动人。
相思,在“心上”,在“弦上”,在“舴艋舟”上,在“丁香枝上”,不思量,自难忘。
相思,在“眉头”,在“长江头”,在“天尽头”,在“豆蔻梢头”,一眼樱泣,一语枫愁,这是最美的问候,亦是最伤的放手。

回复

使用道具 举报

1

主题

7

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2025-2-25 22:47:24 | 显示全部楼层
前排支持下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
QQ在线咨询
售前咨询热线
400-123-45678
售后咨询热线
010-12345678

Archiver|手机版|小黑屋|AcFun

GMT+8, 2025-3-15 00:16 , Processed in 0.122335 second(s), 61 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表