这几天在做一个有关拼音输入法与概率关系的课件,需要两个汉字之间的转移的概率,比如说输入我这个字,后面最大可能是跟着哪个字?当然这是与个人的输入习惯有关系的。我这里是从红楼梦这本书里进行统计计算。算出在红楼梦这本书里面,我字后面跟各个字的频率是多少。
如果是使用普通的程序设计,我只对c/c++熟悉,其它不熟,估计得做一段时间,没想到使用mathematica这么快,一会就可以了。代码如下:
(*本程序的目的是要找到一篇中文书中,比如以我字开头的词,或者说我字后面跟什么字,作一个统计,用在马尔可夫链中*)
txt=Import["E:\\学校材料\\生活中的数学课件\\红楼梦.txt"];
Length[txt]
0
StringLength[txt]
1764624
StringCount[txt,"想"]
1791
result=StringCases[txt,"想"~~_~~""]; (*这个命令是把紧跟着'想'的字一起输出来*)
Dimensions[result]
{1766}
result[[100]]
想到
CountDistinct[result]
227
single=DeleteDuplicates[result]
(*输出结果省略*)
Dimensions[single]
{227}
size=Dimensions[single][[1]]
227
num=Table[0,{i,size}];
For[i=1,i<= size,i++,{
n=Count[result,single[[i]]];
num[[i]]=n;
}]
Count[result,single[[6]]]
30
ListPlot[num/1791,PlotRange->All]
Max[num]
186
Table[{single[[i]],num[[i]],num[[i]]/1791},{i,1,size}]//MatrixForm
(*输出结果省略*)