2.14 拼写检查与词典操作

Linux大多数发行版都含有一份词典文件。然而,我发现几乎没人在意过这个文件,更别提利用它了。还有一个叫做aspell的命令行工具,其作用是进行拼写检查。让我们通过一些脚本来看看如何使用词典文件和拼写检查工具。

2.14.1 实战演练

目录 /usr/share/dict/ 包含了一些词典文件。“词典文件”就是包含了词典单词列表的文本文件。我们可以利用这个列表来检查某个单词是否为词典中的单词。

$ ls /usr/share/dict/
american-english  british-english

为了检查给定的单词是否为词典中的单词,可以使用下面的脚本:

#!/bin/bash
#文件名: checkword.sh
word=$1
grep "^$1$" /usr/share/dict/british-english -q
if [ $? -eq 0 ]; then
  echo $word is a dictionary word;
else
  echo $word is not a dictionary word;
fi

这个脚本的用法如下:

$ ./checkword.sh ful
ful is not a dictionary word
$ ./checkword.sh fool
fool is a dictionary word

2.14.2 工作原理

grep中,^标记着单词的开始,$标记着单词的结束。

-q禁止产生任何输出。

另外,我们也可以用拼写检查命令aspell来核查某个单词是否在词典中:

#!/bin/bash
#文件名: aspellcheck.sh
word=$1

output=`echo \"$word\" | aspell list`

if [ -z $output ]; then
        echo $word is a dictionary word;
else
        echo $word is not a dictionary word;
fi

当给定的输入不是一个词典单词时,aspell list命令产生输出文本,反之则不产生任何输出。-z用于确认$output是否为空。

列出文件中以特定单词起头的所有单词:

$ look word filepath

或者使用

$ grep "^word" filepath

在默认情况下,如果没有给出文件参数,look命令会使用默认词典(/usr/share/dict/words)

并返回输出。

$look word
# 像这样使用时,look命令以默认词典作为文件参数

例如:

$ look android
android
android's
androids