去年年初的时候,我曾经发布过某专业课期末作业研究过程中带来的一个有趣的副产品:汉字的字义网络图。不过,当时我是直接调用的 Mathematica 的相关函数,函数几乎不能调整参数,并且也无法处理边上权重不同的情况。最近在研究引力斥力绘图算法,突然想到把当时的数据重新画一张图。于是就有了汉字地图第二版(点击小图看大图):
昨天和同事聊到,汉语还真是奇怪,有“四分五裂”,有“五颜六色”,也有“七上八下”,但好像从没听说过六什么七什么的。于是想到,在汉语中,“数词 + 非数词 + 数词 + 非数词”的短语是怎样分布的呢?回到家后立即用 Mathematica 做了一个柱状图,绘出了九九八十一种数词短语模式在大规模真实语料中的出现频数。注意,这里统计的是总的出现频数,重复出现也会计算在内。另外,这是一个简单而机械的统计过程,因而 “三人一组”、“七天七夜”之类的非成语也被算了进来。

嗯,对,没有任何意义,纯属无聊之作。
今天,我拿到了梦寐以求的大规模中文语料库,总大小超过 1 G ,覆盖了各个时代各种文体的中文资料。有了这个语料库后,我便能完成很多早就想做的事情,比方说,统计各种文体中出现频率最高的四字词。给定一段文本后,基本的统计过程如下:
1. 统计所有连续四字的出现频数;
2. 按频数对所有四字组合从高到低排序;
3. 删掉所有包含非汉字字符(比如数字、标点)的四字组合;
4. 删掉明显不成词或者不成词组的四字组合(这一步有人为因素,因此下面的数据并不是 100% 客观的);
5. 列出频数最高的 10 个四字词。
所选用的统计对象基本上都是数十万字的篇幅,所有步骤都是用 Mathematica 实现的。下面是结果:
查看更多 »
最近忙于写学年论文,一直没时间更新 Blog 。不过,我却并没有停止在网上闲逛的习惯。这几天会慢慢把最近看到的有意思的东西写下来。今天学到的一个比较有趣的东西就是:平均等待时间往往大于平均间隔时间的一半。
比方说,有这么一趟公交车,平均每 10 分钟发一班车,但具体的发车时间是很不固定的。如果你在某个时刻来到车站,等到下一班车平均要花多久呢?很多人或许都觉得,平均等待时间应该是 5 分钟,毕竟平均间隔时间是 10 分钟嘛。然而事实上,平均等待时间是大于 5 分钟的。这是因为,10 分钟的发车间隔只是一个平均值,实际间隔有时是几分钟,有时是十几分钟。如果你出现在车站的时刻,正好位于几分钟的间隔中,你的平均等待时间显然就会小于 5 分钟;但如果你出现在车站的时刻,正好位于较长的间隔中,那么你的平均等待时间就会大于 5 分钟。关键就在这里:你出现在车站的时刻,更有可能落在了较长的发车间隔中。因而,平均等待时间会偏向于大于 5 分钟的情况。
那么,如果公交车发车的时间足够随机,概率均等地分布在时间轴上(假设平均间隔仍是 10 分钟),那么当你来到车站时,平均需要多久才能等到公交车呢?答案或许很出人意料——平均等待时间就是 10 分钟。下面我们就来证明这一点。
Mathematica 提供了一个看上去毫无用途的无厘头函数 Rasterize ,它可以以图片的格式输出运算结果。比如,下面这个句子可以打印出 (x+1)^n 的展开式的“倒影”:

今天我突然想到,我们可以利用这个函数很方便地分析汉字在图象上的性质。函数 Binarize 可以把图象转换为单色单通道, ImageData 则可以把图象转换成数组的形式,以便我们定量分析。因此,下面这句话就可以把一个汉字转换成 12*12 的 01 矩阵:

从小老师就教导我们,不会做的题就选C,因为选择题选C的概率是最高的。事实上真是如此吗?今天我突发奇想,利用Google做了一个小实验。统计显示,答案选C的题果然是最多的!
Results 1 - 10 of about 364,000 for "这道题选A".
Results 1 - 10 of about 352,000 for "这道题选B".
Results 1 - 10 of about 521,000 for "这道题选C".
Results 1 - 10 of about 254,000 for "这道题选D".
Results 1 - 10 of about 2,140 for "这道题为什么选A".
Results 1 - 10 of about 2,200 for "这道题为什么选B".
Results 1 - 10 of about 2,580 for "这道题为什么选C".
Results 1 - 10 of about 1,350 for "这道题为什么选D".



