Проверка орфографии файла с помощью командной строки, не в интерактивном режиме

У меня есть большой текстовый файл, содержащий много английских слов с ошибками и ошибками. Я ищу способ отредактировать этот файл с помощью средства проверки орфографии командной строки в Linux. Я нашел несколько способов сделать это, но, судя по моим поискам, все они работают в интерактивном режиме. То есть, увидев пропущенное/ошибочно написанное слово, они предлагают пользователю какие-то исправления, и он должен выбрать одно из них. Поскольку мой файл довольно большой и содержит много неправильных слов, я не могу редактировать его таким образом. Я ищу способ сообщить программе проверки орфографии, которая заменит все неправильные слова, используя первый кандидат. Есть какой-либо способ сделать это? Есть ли у заклинания (a/hun) возможность сделать это?

С уважением.


person Hakim    schedule 17.09.2012    source источник
comment
Режим проверки орфографии GNU emacs, кажется, отвечает всем требованиям, поскольку вы можете заменить все ошибки сразу.   -  person Basile Starynkevitch    schedule 17.09.2012
comment
Итак, я должен открыть файл в emacs?   -  person Hakim    schedule 17.09.2012
comment
Могу ли я открыть файл размером 200 МБ в emacs и без проблем проверить орфографию?   -  person Hakim    schedule 17.09.2012
comment
Да, вы можете (при условии, что у вас есть несколько гигабайт оперативной памяти и недавний emacs).   -  person Basile Starynkevitch    schedule 17.09.2012
comment
и могу ли я добавить и использовать свой собственный словарь? Я имею в виду, можно ли кормить emacs с помощью словаря, разработанного пользователем, и хотите, чтобы emacs также использовал его?   -  person Hakim    schedule 17.09.2012
comment
Да, вы можете добавить свой собственный словарь.   -  person Basile Starynkevitch    schedule 17.09.2012
comment
Как я могу добавить свой собственный словарь?   -  person Hakim    schedule 17.09.2012
comment
Автокоррекция не в интерактивном режиме не поддерживается разумными программами проверки орфографии, потому что она просто заменит правильные слова (с ошибками) на идеально написанную чепуху. Кто бы этого хотел? Или это какая-то шутка, или демонстрация доведения до абсурда?   -  person mivk    schedule 08.05.2014
comment
мой ответ ниже ответил на ваш вопрос? Любые комментарии? Я спрашиваю, потому что вы не приняты любой ответ.   -  person rsp    schedule 11.01.2017


Ответы (2)


Вы можете поэкспериментировать с такими командами:

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

or:

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
person rsp    schedule 02.02.2016

Если вам не нужно заменять каждое неправильное слово, а просто указывать на ошибки и печатать предложения в неинтерактивной форме, вы можете использовать ispell:

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

К сожалению, я не знаю ни одной стандартной утилиты Linux, которая делает то, что вы запрашиваете, из командной строки, хотя предложение emacs в комментариях выше подходит близко.

person Kyle Barbour    schedule 09.03.2014