Chinaunix首页 | 论坛 | 博客
  • 博客访问: 832702
  • 博文数量: 330
  • 博客积分: 9641
  • 博客等级: 中将
  • 技术积分: 3181
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
文章分类

全部博文(330)

文章存档

2012年(17)

2011年(135)

2010年(85)

2009年(57)

2008年(36)

我的朋友

分类:

2011-03-20 09:14:08

文章来源:

再次神经短路,突然想看看宋词里面什么样的意象是最常见的,比如可以做个频率分析什么的。当然文本挖掘需要分词,我没法在其中花太多时间,于是想出了一个土办法。宋词的句子都很短,如果穷举可能的字的组合的话并不是太多,况且最常见的词语一般是两三个字,这样可能的组合就更少了。比如“犹解嫁东风”这句话,可能的二字组合是“犹解”“解嫁”“嫁东”“东风”,三字组合是“犹解嫁”“解嫁东”“嫁东风”,词的字数越多,可能的组合就越少。如果把每句话可能的字的组合都列举出来,就可以整体统计频率了。

当然里面会有很多无意义的字的组合,不过这类“词语”本身的出现就是一个偶然,所以可以预期的是它们整体的频数会很低,是入不了“大雅之堂”的。话不多说,直接上代码和结果。

数据:《全宋词》文本

代码:

  1. l=scan("Ci.txt","character",sep="\n");
  2. l.len=nchar(l);

  3. # 某些行是作者和标题,所以选取长度大于10的行;
  4. # 另外这个文本文件不太规整,有些网址什么的,
  5. # 所以也要排除那些长度太长的。
  6. ci=l[l.len>10 & l.len<500];

  7. # 句子用标点符号分割。
  8. sentences=strsplit(ci,",|。|!|?|、");
  9. sentences=unlist(sentences);
  10. sentences=sentences[sentences!=""];
  11. s.len=nchar(sentences);

  12. # 单句太长了说明有可能是错误的字符,去除掉。
  13. sentences=sentences[s.len<=10];
  14. s.len=nchar(sentences);

  15. # 暴力挨个拆分,比如“犹解嫁东风”的所有二字组合为
  16. # “犹解”“解嫁”“嫁东”“东风”,
  17. # 无意义的词其频数自然就落在后面了。
  18. splitwords=function(x,x.len) substring(x,1:(x.len-1),2:x.len);

  19. words=mapply(splitwords,sentences,s.len,SIMPLIFY=TRUE,USE.NAMES=FALSE);
  20. words=unlist(words);
  21. words.freq=table(words);
  22. words.freq=sort(words.freq,decreasing=TRUE);
  23. data.frame(Word=names(words.freq[1:100]),Freq=as.integer(words.freq[1:100]));

结果(排在第一的是无效字符,这跟数据源有关):

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

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

阅读(395) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~