Spell checking a file using command line, non-inte

2019-04-06 05:59发布

问题:

I have a large text file, containing many miss/bad-spelled English words. I'm looking for a way to edit this file using a command-line spell checker in Linux. I found some ways to do this, But according to my searches all of them work in an interactive manner. I mean, seeing a miss/bad-spelled word, they suggest some corrections to the user and he/she should choose one of them. Since my file is rather large, and contains many wrong words, I can't edit it in this manner. I am looking for a way to tell the spell-checker that replace all the wrong words using the first candidate. Is there any way to do this? does (a/hun)spell have any option for doing so?

Regards.

回答1:

You can experiment with commands like these:

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

or:

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

But keep in mind that the results can be poor even for simple things:

$ 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

It seems to be even worse with aspell so probably it's better to go with ispell.

You need the script command because some commands like ispell doesn't want to be scripted. Normally you would pipe the output of yes 0 to a command to simulate hitting the "0" key all the time but some commands detect being scripted and refuse to cooperate:

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

Fortunately they can be fooled with the script command:

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

You can use other file than /dev/null to log the output:

$ 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


回答2:

If you don't need it to replace every wrong word, but simply point out the errors and print suggestions in a non-interactive manner, you can use ispell:

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

I'm unfortunately not aware of any standard Linux utility that does what you're requesting from the command line, although the emacs suggestion in the comments above comes close.