东风何处是人间
- Avenger - 车东[Blog^2]再次神经短路,突然想看看宋词里面什么样的意象是最常见的,比如可以做个频率分析什么的. 当然文本挖掘需要分词,我没法在其中花太多时间,于是想出了一个土办法. 宋词的句子都很短,如果穷举可能的字的组合的话并不是太多,况且最常见的词语一般是两三个字,这样可能的组合就更少了. 比如“犹解嫁东风”这句话,可能的二字组合是“犹解”“解嫁”“嫁东”“东风”,三字组合是“犹解嫁”“解嫁东”“嫁东风”,词的字数越多,可能的组合就越少.
再次神经短路,突然想看看宋词里面什么样的意象是最常见的,比如可以做个频率分析什么的。当然文本挖掘需要分词,我没法在其中花太多时间,于是想出了一个土办法。宋词的句子都很短,如果穷举可能的字的组合的话并不是太多,况且最常见的词语一般是两三个字,这样可能的组合就更少了。比如“犹解嫁东风”这句话,可能的二字组合是“犹解”“解嫁”“嫁东”“东风”,三字组合是“犹解嫁”“解嫁东”“嫁东风”,词的字数越多,可能的组合就越少。如果把每句话可能的字的组合都列举出来,就可以整体统计频率了。
当然里面会有很多无意义的字的组合,不过这类“词语”本身的出现就是一个偶然,所以可以预期的是它们整体的频数会很低,是入不了“大雅之堂”的。话不多说,直接上代码和结果。
数据:《全宋词》文本
代码:
l=scan("Ci.txt","character",sep="\n"); l.len=nchar(l); # 某些行是作者和标题,所以选取长度大于10的行; # 另外这个文本文件不太规整,有些网址什么的, # 所以也要排除那些长度太长的。 ci=l[l.len>10 & l.len<500]; # 句子用标点符号分割。 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 Word Freq 1 1485 51 天上 368 2 东风 1382 52 杨柳 362 3 何处 1230 53 西湖 356 4 人间 1202 54 桃花 354 5 风流 857 55 扁舟 353 6 归去 812 56 消息 351 7 春风 802 57 憔悴 344 8 西风 779 58 何事 339 9 归来 771 59 芙蓉 338 10 江南 765 60 神仙 334 11 相思 753 61 一片 334 12 梅花 732 62 桃李 333 13 千里 676 63 人生 332 14 回首 656 64 十分 331 15 明月 651 65 心事 329 16 多少 648 66 黄花 328 17 如今 642 67 一声 325 18 阑干 630 68 佳人 324 19 年年 613 69 长安 321 20 万里 590 70 东君 319 21 一笑 582 71 断肠 316 22 黄昏 550 72 而今 315 23 当年 542 73 鸳鸯 314 24 天涯 537 74 为谁 313 25 相逢 528 75 十年 310 26 芳草 527 76 去年 309 27 尊前 516 77 少年 308 28 一枝 512 78 海棠 307 29 风雨 505 79 寂寞 306 30 流水 472 80 无情 306 31 依旧 472 81 不是 305 32 风吹 471 82 时候 304 33 风月 461 83 肠断 303 34 多情 457 84 富贵 303 35 故人 451 85 蓬莱 303 36 当时 450 86 昨夜 303 37 无人 445 87 行人 302 38 斜阳 438 88 今夜 301 39 不知 430 89 谁知 300 40 不见 429 90 不似 299 41 深处 422 91 江上 298 42 时节 403 92 悠悠 296 43 平生 398 93 几度 295 44 凄凉 398 94 青山 295 45 春色 394 95 何时 294 46 匆匆 383 96 天气 293 47 功名 383 97 惟有 293 48 一点 378 98 一曲 291 49 无限 377 99 月明 291 50 今日 369 100 往事 290
不知各位看官看到上面这些既熟悉又悠远的话语又将作何感想?或许,她们就是我们千百年来的精神寄托吧。