11

我有一个大文本文件,其中包含许多错误/拼写错误的英文单词。我正在寻找一种在 Linux 中使用命令行拼写检查器来编辑此文件的方法。我找到了一些方法来做到这一点,但根据我的搜索,它们都以交互方式工作。我的意思是,看到一个错过/拼写错误的单词,他们会向用户建议一些更正,他/她应该选择其中一个。由于我的文件相当大,并且包含许多错误的单词,我无法以这种方式对其进行编辑。我正在寻找一种方法来告诉拼写检查器使用第一个候选词替换所有错误的单词。有没有办法做到这一点?(a/hun)spell 有什么选择吗?

问候。

4

2 回答 2

7

您可以尝试以下命令:

yes 0 | script -c 'ispell text.txt' /dev/null

或者:

yes 1 | script -c 'aspell check text.txt' /dev/null

但请记住,即使是简单的事情,结果也可能很差:

$ echo The quik broown fox jmps over the laazy dogg > text.txt
$ yes 0 | script -c 'ispell text.txt' /dev/null
Script started, file is /dev/null
Script done, file is /dev/null
$ cat text.txt
The quick brown fox amps over the lazy dog

使用 aspell 似乎更糟,所以使用 ispell 可能会更好。

您需要该script命令,因为某些命令(例如 ispell)不想编写脚本。通常,您会将 的输出通过管道yes 0传输到命令以模拟一直按“0”键,但有些命令检测到正在编写脚本并拒绝合作:

$ yes 0 | ispell text.txt
Can't deal with non-interactive use yet.

幸运的是,他们可以被以下script命令愚弄:

$ yes 0 | script -c 'ispell text.txt' /dev/null
Script started, file is /dev/null
Script done, file is /dev/null

您可以使用 /dev/null 以外的其他文件来记录输出:

$ yes 0 | script -c 'ispell text.txt' out.txt
Script started, file is out.txt
Script done, file is out.txt
$ cat out.txt 
Script started on Tue 02 Feb 2016 09:58:09 PM CET

Script done on Tue 02 Feb 2016 09:58:09 PM CET
于 2016-02-02T20:59:47.320 回答
6

如果您不需要它来替换每个错误的单词,而只是以非交互方式指出错误并打印建议,则可以使用 ispell:

$ ispell -a < file.txt | grep ^\& > errors.txt

不幸的是,我不知道有任何标准的 Linux 实用程序可以执行您从命令行请求的操作,尽管上面评论中的 emacs 建议很接近。

于 2014-03-09T16:33:56.973 回答