转自mysas.net——一个供SASor技术交流,袒露心声,求职问路,八卦灌水的好地方,欢迎加入!
近来热议“东风何处是人间”,具体背景可以google之。
不用分词的蛮力统计规律是很赞的想法,这方法也是基于数学和统计研究文学的基本方法吧,纯属外行之言。
闲来无事,用SAS模仿之,取字长为2和3的所有词组,考虑标点的短句。文本使用随便下载的《全宋词》。由于没有做很精细的排版读入,所以有部分词牌名以及乱码出现,但是无关大局。仅供参考,希望博君一笑。
以下是2,3字长各自的出现频率top20排名
词 频数 排名
东风 1329 1
何处 1186 2
人间 1151 3
风流 818 4
归去 797 5
春风 779 6
西风 759 7
归来 743 8
相思 727 9
江南 713 10
梅花 697 11
千里 654 12
回首 633 13
明月 631 14
如今 628 15
多少 627 16
阑干 602 17
万里 583 18
一笑 574 19
年年 570 20
正道是:东风何处是?人间风流归去。春风西风?归来相思!江南梅花,千里回首望明月......
词 频数 排名
倚阑干 114 1
知何处 96 2
广寒宫 91 3
到如今 89 4
东风吹 84 5
水调歌 75 6
留不住 75 7
调歌头 73 8
人何处 73 9
三十六 70 10
有谁知 70 11
歌头( 67 12
西风吹 64 13
云深处 63 14
人不见 62 15
人间世 60 16
不知何 56 17
满江红 55 18
不如归 54 19
与谁同 54 20
这个会有词牌名出现,读入太粗糙了......
附上代码,无注释,清吐槽......
代码:
data a;
infile "E:全宋词.txt";
input x:$1.;
str=compress(_infile_);
if kindex(str,",") or kindex(str,"。");
keep str;
run;
data _null_;
if _N_=1 then do;
declare hash myhash();
myhash.definekey("y");
myhash.definedata("y","cnt");
myhash.definedone();
end;
set a END=EOF;
h=1;
do until (compress(kscan(str,h,",。、")=""));
x=kscan(str,h,",。、");
do i=1 to klength(x);
do j=2 to min(3,klength(x)-i+1);
y=ksubstr(x,i,j);
rc=myhash.find();
if rc then do;
cnt=1;
rc=myhash.add();
end;
else do;
cnt+1;
rc=myhash.replace();
end;
end;
end;
h+1;
end;
if EOF then do;
rc=myhash.output(dataset:"b");
end;
run;