再次神经短路,突然想看看宋词里面什么样的意象是最常见的,比如可以做个频率分析什么的。当然文本挖掘需要分词,我没法在其中花太多时间,于是想出了一个土办法。宋词的句子都很短,如果穷举可能的字的组合的话并不是太多,况且最常见的词语一般是两三个字,这样可能的组合就更少了。比如“犹解嫁东风”这句话,可能的二字组合是“犹解”“解嫁”“嫁东”“东风”,三字组合是“犹解嫁”“解嫁东”“嫁东风”,词的字数越多,可能的组合就越少。如果把每句话可能的字的组合都列举出来,就可以整体统计频率了。
当然里面会有很多无意义的字的组合,不过这类“词语”本身的出现就是一个偶然,所以可以预期的是它们整体的频数会很低,是入不了“大雅之堂”的。话不多说,直接上代码和结果。
数据:《全宋词》文本
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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
不知各位看官看到上面这些既熟悉又悠远的话语又将作何感想?或许,她们就是我们千百年来的精神寄托吧。

流行语:东风何处在人间...
统计了一下唐诗,总结一下为 何处不知万千里,今日春风不可见。
不知客官是否方便公布一下唐诗的词频?
台湾有些作者做过这个事情,他们是通过中文分词,然后统计的频率。其中包括了单个字的意向,比如月、花等。
非常非常赞你的这种方法,化繁为简啊;我当初还找人要分词后的宋词,结果别人不给;你这个方法倒是绕过去了啊。
我觉得可以抽出李清照、柳永、苏轼、辛弃疾等人的诗词,看看个人的风格!
赞~
真给力,把这些词用到文章里一定非常出彩~ 排名第一的怎么是框框?
因为那个txt里面很多字没有正确显示,因此是框框,这个和我小时候一直觉得佚名这个人真厉害,写了很多文章是一个道理:)
呵呵,还有三个字的词,也不错:)
Word Freq Word Freq 1 893 51 在何处 40 2 204 52 断人肠 39 3 倚阑干 125 53 水晶宫 39 4 108 54 月清风 39 5 知何处 107 55 落花飞 38 6 广寒宫 94 56 如归去 38 7 到如今 89 57 无消息 38 8 东风吹 85 58 花无数 37 9 留不住 76 59 人间天 37 10 人何处 76 60 随流水 37 11 有谁知 74 61 TXT 36 12 三十六 70 62 杜鹃啼 36 13 西风吹 66 63 歌金缕 36 14 云深处 63 64 个人人 36 15 不知何 62 65 故人相 36 16 人间世 61 66 间天上 36 17 人不见 60 67 明月清 36 18 君知否 58 68 送春归 36 19 人千里 58 69 影横斜 36 20 与谁同 57 70 春消息 35 21 不如归 54 71 人间何 35 22 春归去 54 72 一番新 35 23 年今日 53 73 一年春 35 24 何处是 52 74 一枝春 35 25 凝伫 52 75 二十年 34 26 归去来 51 76 寄相思 34 27 归去 48 77 去来兮 34 28 二十四 47 78 去年今 34 29 归何处 47 79 人如玉 34 30 花深处 47 80 是人间 34 31 江南春 46 81 寿阳妆 34 32 向尊前 46 82 无觅处 34 33 知否 46 83 有个人 34 34 花飞絮 45 84 此时情 33 35 花流水 45 85 江南路 33 36 记当年 44 86 留春住 33 37 长安道 43 87 然一笑 33 38 雨初晴 43 88 噫 33 39 42 89 唱阳关 32 40 倚东风 42 90 分付与 32 41 功名事 41 91 何处去 32 42 海棠开 41 92 江南岸 32 43 谁知道 41 93 人憔悴 32 44 知多少 41 94 人去后 32 45 东风里 40 95 十年前 32 46 海棠花 40 96 天如水 32 47 老人星 40 97 无绪 32 48 那堪更 40 98 休休 32 49 桥流水 40 99 须信道 32 50 山无数 40 100 一枝斜 32第二和第四个也有点小问题……
求高手解释“三十六”“二十四”。:)
二十四难道不是二十四桥明月夜吗?三十六不懂。
三十六计- -
二十四是出现的比较多的了,单拿姜夔的词为例,就有“二十四桥明月夜”、“二十四桥仍在”、“红桥二十四”等,另又有二十四节气、二十四番花信等,算是高频词了;三十六也多次在姜夔的词中出现,如“一叶凌波缥缈,过三十六离宫,遣游人回首”、“问甚时同赋,三十六陂秋色”、“三十六陂人未到,水佩风裳无数”,王安石词中也有用到三十六陂句“三十六陂烟水,白头想见江南”,至于三十六计,是否在宋词中被引用过,就不清楚了
最讨厌的就是倚阑干,每次读到这些地方就发怵,以及类似的拍栏杆、莫凭栏、不忍登高等等,典型的毫无个性之闷骚+不爱护公物嘛~
有时候觉得很多词实在是过于雕琢堆砌了,很多都是陈词滥调、缺乏新意、言之无物、情感苍白。话别离,必古道长亭、灞桥杨柳;叹不遇,必登高临远、拍遍阑干;弄凄凉,必风雨黄昏、残灯孤雁;说相思,必伤春凝眸、肠断天涯。此外再辅之以风花雪月酒色烟尘鸟兽草树等熟透了的意象,时不时还故作深沉地发问:几处、谁家、何处、多少、不知等等。比如柳永的词初读还蛮有意思的,多读几篇发现格调总是如此,离不开宋玉、鸿雁、斜阳等字眼,慢慢地也就审美疲劳了。
个人觉得宋词本身就是娱乐的东西,算不上正式文学作品;宋词之所以表现力不强除了很多意象被用庸人玩烂了之外,更重要的原因是宋词的自由度太小,格调音韵字数限制的很死,要写篇词很是费劲,因此一般的词人不得不堆砌拼凑。当然,也有极少数词音韵和谐、感情真挚、语言新雅,比如我最喜欢的词人易安居士之许多作品。
借地发牢骚,原谅~
东坡\稼轩的词也不错呀
找了个解释,唐宋词中的“凭栏”意象:
http://kanghua99.spaces.live.com/blog/cns!7F16277E59FD0A00!328.entry
哈哈,叹服太云兄之博学多才啊!发个牢骚都写的跟诗一样,佩服,佩服:)
没有啦,胡扯一通。或许有些偏激,应该辩证地来看~
此外,我快成留言霸了:)
百无聊赖看到此文~瞬时神清气爽之~
突然想起上次去京竟然没有向你索要墨宝, 啊, 失误失误,哈哈
论音韵和谐程度,他二人不比易安,当然内容很赞:)
若要细究词理,参加易安居士之《词论》
建议这篇文章上COS主站,结果如何无所谓,这想法很好,很有新意。文章不必再刻意扩展,就这样发出来就可以了。
把数据更新了一下放上去了,就是最后的结果没想好用什么环境,又不想用HTML表格。
pre环境就很好了,不必用表格,我也不爱用表格
非常有意思,这些大概就是中华文化的文字密码了。
人间、江南、相思、梅花、千里、回首、明月、黄昏、当年、天涯、相逢、芳草、尊前、流水、多情、故人、杨柳、桃花、佳人、长安——这些词默念出来感觉意向万千——
希望您能把全唐诗也做一次同样的解析O(∩_∩)O~
之前整理出来这些词语后一直不知道该怎么形容,看到你的回复后觉得“文字密码”这个词非常贴切。:D
看完统计的数据,突然有一种幸福感,古人活的真不容易,100个词中,没有一个是明显带着快乐,幸福的感情色彩的,宋代的人活的很憋屈啊……
请问博主用的什么语言,看着像python,但又不是。
R语言,www.r-project.org,统计分析之神器。:D
天涯……!!对这个词特别有感情,你懂的~
嗯,我没写完,其实排在第101位的是“猫扑”。
我要加衣服了
有意思,西湖排名这么高
我觉得你应该给你的这个分词手法取个名字。比如冒泡分词法或者沉淀分词法,抑或 冒泡沉淀分词法
請問是什麼語言?
R语言。:D
哈哈太给力了...
我现在也在学R... 这个想法太nb了
顶一个
你好,方便联系下嘛?想就这个事采访你一下,哈哈
您好,我把我的想法都写在博客里了:http://yixuan.cos.name/cn/2011/12/some-notices/,望理解。:-)
太牛了!我写穿越小说的,正好是程序员穿越,可以引用你这篇文里的内容吗?
随意随意,等大作问世了吼一嗓子啊,我去围观。
穿越必备,比医学院的姐妹们轻松多了
冒味问一下,我是计算机盲,由于你的文章让我对计算机的神奇很向往,问一下:你的编译器是什么?不知如何操作可得到这美妙的结果
我也是。。。不过真相肯定是一点美感都没有的,呵呵。
觉得那个1485很喜感
前来膜拜
呵呵,过往的精神寄托原来只是一些能够数字化的堆叠游戏,人类的每一个创作,也不过是一次稍有不同的重复。或者今日沉迷在愤怒的小鸟上的人们也就并非有多么的不可理喻了。。。字韵文心,曾经都是些说不清道不明的意境,能生在在数字化的今日清晰看到根本的我们真的很幸福。
请谁把好事做下去:
1)把这100个词注上平仄
2)把一些词牌的平仄模块列出。
这样人人都能填词了,一定会百花争艳。
原来宋词的统计是源自这里呀,佩服。
我按照这份统计编了个小工具软件“宋词傻瓜机”,它不但可以把任意一串数字转换为词,还提供了八个常用词牌格式及名家范例做参考,用起来轻松又有趣 。
http://mrsunli.com/2011/songci/
程序神马的完全看不懂啊……
但是觉得古人好憋屈,几千年了,怎么高频词竟然比英语四六级还少?!
真是好创意,但是,文科生的鸭梨也越来越大了……
有错误:
> l.len = nchar(l)
Error in nchar(l) : invalid multibyte string 1
l.len>500的都去掉是不对的,博主应该查一下l[l.len>500]都是什么内容--我看了一下,有27行符合这个条件,全部是宋词正文,并非网址。另外网址可以用regex去掉:l = grep('txt', l, ignore.case=True)
哈哈,谢谢指出。
报告一下我的结果,稍微有一些不同:
Word Freq Rank
1 □□ 1485 0
2 东风 1382 1
3 何处 1230 2
4 人间 1202 3
5 风流 857 4
6 归去 812 5
7 春风 802 6
8 西风 779 7
9 归来 771 8
10 江南 765 9
11 相思 753 10
12 梅花 732 11
13 千里 676 12
14 回首 656 13
15 明月 651 14
16 多少 648 15
17 如今 642 16
18 阑干 630 17
19 年年 613 18
20 万里 590 19
21 一笑 582 20
22 黄昏 550 21
23 当年 542 22
24 天涯 537 23
25 相逢 528 24
26 芳草 527 25
27 尊前 516 26
28 一枝 512 27
29 风雨 505 28
30 依旧 472 29
31 流水 472 30
32 风吹 471 31
33 风月 461 32
34 多情 457 33
35 故人 451 34
36 当时 450 35
37 无人 445 36
38 斜阳 438 37
39 不知 430 38
40 不见 429 39
41 深处 422 40
42 时节 403 41
43 凄凉 398 42
44 平生 398 43
45 春色 394 44
46 功名 383 45
47 匆匆 383 46
48 一点 378 47
49 无限 378 48
50 今日 369 49
51 天上 368 50
52 杨柳 362 51
53 西湖 356 52
54 桃花 354 53
55 扁舟 353 54
56 消息 351 55
57 憔悴 344 56
58 何事 339 57
59 芙蓉 338 58
60 一片 334 59
61 神仙 334 60
62 桃李 333 61
63 人生 332 62
64 十分 331 63
65 心事 329 64
66 黄花 328 65
67 一声 325 66
68 佳人 324 67
69 长安 321 68
70 东君 319 69
71 断肠 316 70
72 而今 315 71
73 鸳鸯 314 72
74 为谁 313 73
75 十年 310 74
76 去年 309 75
77 少年 308 76
78 海棠 307 77
79 寂寞 306 78
80 无情 306 79
81 不是 305 80
82 时候 304 81
83 富贵 303 82
84 昨夜 303 83
85 肠断 303 84
86 蓬莱 303 85
87 行人 302 86
88 今夜 301 87
89 谁知 300 88
90 不似 299 89
91 江上 298 90
92 悠悠 296 91
93 几度 295 92
94 青山 295 93
95 何时 294 94
96 天气 293 95
97 惟有 293 96
98 一曲 291 97
99 月明 291 98
100 往事 290 99
博主这个R语言貌似很强大呀
不知道用java能不能写出来呢,好像那个高频词用java挺难统计出来的哈
请问作者是用什么语言写的?如用C++该怎么写。。求指导
第一段:词的字数越多,可能的组合就越少?
组合越多否?