Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

2.7 用简单 Unix 工具进行词语词元化

对于英语,可以用一条 Unix 命令行完成简单朴素的词语词元化和频率计算。正如 Church(1994)指出的,当我们需要快速了解一个文本语料库时,这种方法很有用。这里会用到几个 Unix 命令:tr,用于系统地修改输入中的特定字符;sort,用于按字母顺序对输入行排序;以及 uniq,用于合并并统计相邻的相同行。

例如,假设莎士比亚“全集”的内容保存在文件 sh.txt 中。我们可以使用 tr 对词语进行词元化,把每个非字母字符序列转换成换行符。A-Za-z 表示字母,选项 -c 表示对该集合取补集(即从字母变成非字母),因此二者结合会选中每个非字母字符,再由 tr 把它们转换成换行符。选项 -s(squeeze,压缩)会把连续多次转换所得的结果替换成单个输出,因此一连串相邻的非字母字符都会“压缩”成一个换行符:

tr -sc 'A-Za-z' '\n' < sh.txt

这条命令的输出是:

THE
SONNETS
by
William
Shakespeare
From
fairest
creatures
...

现在每行只有一个词,可以对这些行进行排序,再把结果传给 uniq -c,由后者合并并计数:

tr -sc 'A-Za-z' '\n' < sh.txt | sort | uniq -c

输出如下:

1945 A
72 AARON
19 ABBESS
25 Aaron
6 Abate
1 Abates

或者,我们可以把所有大写字母转换成小写字母:

tr -sc 'A-Za-z' '\n' < sh.txt | tr A-Z a-z | sort | uniq -c

其输出为:

14725 a
97 aaron
1 abaissiez
10 abandon
2 abandoned
2 abase
1 abash
14 abate

接下来可以再次排序,找出高频词。sort-n 选项表示按数值而不是字母顺序排序,-r 选项表示采用逆序,即从高到低排序:

tr -sc 'A-Za-z' '\n' < sh.txt | tr A-Z a-z | sort | uniq -c | sort -n -r

结果表明,与其他语料库一样,莎士比亚作品中最高频的词是冠词、代词、介词等较短的功能词:

27378 the
26084 and
22538 i
19771 to
17481 of
14725 a
13826 you
...

这类 Unix 工具非常适合快速构建任意英语语料库的词频统计。如果任务更加复杂,我们通常会转而使用前文介绍的更精细词元化算法。