统计单词的出现率

在一篇正规的英文文档中,单词都会以空格、逗号、句号或回车分隔,“-”符号表示连接回车符前后的字符为一个单词。

现有一篇符合上述特征的文档MobyDick.txt,请找出其中一共出现过多少个不同的单词,以及每个单词的次数,并找出出现频率最高的单词。

读取文档内容,将文档内容拆成单词序列。统计每个单词出现的次数,出现次数最多的即为出现频率最高的单词。


A

1

MobyDick.txt

2

=file(A1).read()

3

=A2.words()

4

=A3.groups(~:Word;count(~):Count)

5

=A4.len()

6

=A4.maxp(Count)

A2f.read()读出文本文件中的字符串SPL中可以用s.words()将字符串按单词拆开,如A3中结果如下:

..

A4将单词序列按照不同的单词分组,并计算每个单词出现的次数,结果如下:

..

SPL中用groups能很方便地做分组统计计算,结果按分组值升序排序。这里大小写不同认为是不同的单词,如果不考虑大小写不同的情况,可以将A4中代码修改为=A3.groups(lower(~):Word;count(~):Count),即将单词全转为小写再统计。

A5len就能获取共有多少个不同的单词:

..

A6maxp就可找到哪个单词出现的频率最高,以及它的使用次数:

..

熟练之后,可以用一句代码找到出现频率最高的单词及其出现次数:=file("MobyDick.txt").read().words().groups(~:Word;count(~):Count).maxp(Count)

如果需要统计的文档数据量比较大,或者计算机的内存比较小,无法把所有数据同时读出做统计,此时可以使用游标,将数据逐步取出,并将统计结果合并计算,如:


A

1

MobyDick.txt

2

=file(A1).cursor@i()

3

=A2.(~.words()).conj()

4

=A3.groups(~:Word;count(~):Count).maxp(Count)

A2用文件生成游标,逐步读取数据,添加@i选项,将结果返回为每行文字构成的序列。

A3将游标中每一行文字拆分为单词,并用conj将单词逐个返回。A4对游标直接用groups对游标中返回的单词做统计,并从中取出出现频率最高的单词的数据:

..

上面的代码同样也可以直接写为一句代码:=file("MobyDick.txt").cursor@i().(~.words()).conj().groups(~:Word;count(~):Count).maxp(Count)