2012年5月4日星期五

东风何处是人间 - 空气博客

再次神经短路,突然想看看宋词里面什么样的意象是最常见的,比如可以做个频率分析什么的。当然文本挖掘需要分词,我没法在其中花太多时间,于是想出了一个土办法。宋词的句子都很短,如果穷举可能的字的组合的话并不是太多,况且最常见的词语一般是两三个字,这样可能的组合就更少了。比如“犹解嫁东风”这句话,可能的二字组合是“犹解”“解嫁”“嫁东”“东风”,三字组合是“犹解嫁”“解嫁东”“嫁东风”,词的字数越多,可能的组合就越少。如果把每句话可能的字的组合都列举出来,就可以整体统计频率了。
当然里面会有很多无意义的字的组合,不过这类“词语”本身的出现就是一个偶然,所以可以预期的是它们整体的频数会很低,是入不了“大雅之堂”的。话不多说,直接上代码和结果。
数据:《全宋词》文本
代码:

l=scan("Ci.txt","character",sep="n");
l.len=nchar(l);
# 某些行是作者和标题,所以选取长度大于10的行;
# 另外这个文本文件不太规整,有些网址什么的,
# 所以也要排除那些长度太长的。
ci=l;
# 句子用标点符号分割。
sentences=strsplit(ci,",|。|!|?|、");
sentences=unlist(sentences);
sentences=sentences[sentences!=""];
s.len=nchar(sentences);
# 单句太长了说明有可能是错误的字符,去除掉。
sentences=sentences[s.len<=10];
s.len=nchar(sentences);
# 暴力挨个拆分,比如“犹解嫁东风”的所有二字组合为
# “犹解”“解嫁”“嫁东”“东风”,
# 无意义的词其频数自然就落在后面了。
splitwords=function(x,x.len) substring(x,1:(x.len-1),2:x.len);
words=mapply(splitwords,sentences,s.len,SIMPLIFY=TRUE,USE.NAMES=FALSE);
words=unlist(words);
words.freq=table(words);
words.freq=sort(words.freq,decreasing=TRUE);
data.frame(Word=names(words.freq[1:100]),Freq=as.integer(words.freq[1:100]));

结果(排在第一的是无效字符,这跟数据源有关):
Word Freq
1 1485
2 东风 1382
3 何处 1230
4 人间 1202
5 风流 857
6 归去 812
7 春风 802
8 西风 779
9 归来 771
10 江南 765
11 相思 753
12 梅花 732
13 千里 676
14 回首 656
15 明月 651
16 多少 648
17 如今 642
18 阑干 630
19 年年 613
20 万里 590
21 一笑 582
22 黄昏 550
23 当年 542
24 天涯 537
25 相逢 528
26 芳草 527
27 尊前 516
28 一枝 512
29 风雨 505
30 流水 472
31 依旧 472
32 风吹 471
33 风月 461
34 多情 457
35 故人 451
36 当时 450
37 无人 445
38 斜阳 438
39 不知 430
40 不见 429
41 深处 422
42 时节 403
43 平生 398
44 凄凉 398
45 春色 394
46 匆匆 383
47 功名 383
48 一点 378
49 无限 377
50 今日 369
51 天上 368
52 杨柳 362
53 西湖 356
54 桃花 354
55 扁舟 353
56 消息 351
57 憔悴 344
58 何事 339
59 芙蓉 338
60 神仙 334
61 一片 334
62 桃李 333
63 人生 332
64 十分 331
65 心事 329
66 黄花 328
67 一声 325
68 佳人 324
69 长安 321
70 东君 319
71 断肠 316
72 而今 315
73 鸳鸯 314
74 为谁 313
75 十年 310
76 去年 309
77 少年 308
78 海棠 307
79 寂寞 306
80 无情 306
81 不是 305
82 时候 304
83 肠断 303
84 富贵 303
85 蓬莱 303
86 昨夜 303
87 行人 302
88 今夜 301
89 谁知 300
90 不似 299
91 江上 298
92 悠悠 296
93 几度 295
94 青山 295
95 何时 294
96 天气 293
97 惟有 293
98 一曲 291
99 月明 291
100 往事 290


不知各位看官看到上面这些既熟悉又悠远的话语又将作何感想?或许,她们就是我们千百年来的精神寄托吧。

没有评论:

发表评论