枫林晚 发表于 7-12-2011 16:42:40

东风何处是人间

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

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

数据:《全宋词》文本

代码:
l = scan("Ci.txt", "character", sep = "\n");
l.len = nchar(l);

# 某些行是作者和标题,所以选取长度大于10的行;
# 另外这个文本文件不太规整,有些网址什么的,
# 所以也要排除那些长度太长的。
ci = l;

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

# 单句太长了说明有可能是错误的字符,去除掉。
sentences = sentences;
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), Freq = as.integer(words.freq));
结果(排在第一的是无效字符,这跟数据源有关):

   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

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

y2kgo 发表于 7-12-2011 16:59:54

举个栗子
今天是2012年12月7日,选了20/12/7
看到这个帖子的时候是17点53分 选17/5/3

万里梅花春风
如今风流何处

y2kgo题: all gone
:yct_77

[ 本帖最后由 y2kgo 于 7-12-2011 18:01 编辑 ]

四香油饼 发表于 7-12-2011 17:39:36

原帖由 枫林晚 于 7-12-2011 17:42 发表 http://www.freeoz.org/ibbs/images/common/back.gif
再次神经短路,突然想看看宋词里面什么样的意象是最常见的,比如可以做个频率分析什么的。当然文本挖掘需要分词,我没法在其中花太多时间,于是想出了一个土办法。宋词的句子都很短,如果穷举可能的字的组合的话并不 ...

发现就把这些词放一起,就成了辞了

东风何处,
人间风流。
归去春风,
西风归来。

江南相思,
梅花千里。
回首明月,
多少如今。

mason00 发表于 8-12-2011 00:35:07

中文牛X的地方啊,词性改变而形式不变。
中文难读的地方哦,看着有点意思,其实没有太大意思

江南柴进 发表于 8-12-2011 09:58:20

请问是不是原创?原创就加精,转载就高亮。:D

江南柴进 发表于 8-12-2011 09:59:52

回复 #4 mason00 的帖子

词汇只是表象。背后的意境才是最重要的。
王国维说,无意境无诗,楼主的暴力拆解,其实就是印证了这句话。:)

y2kgo 发表于 8-12-2011 10:59:43

回复 #5 mohan29 的帖子

前几天就在网上看到过的
要是这是这位楼主原创的话那就太太太厉害啦
:yct_16
页: [1]
查看完整版本: 东风何处是人间