Проверка орфографии каждой строки - PullRequest
2 голосов
/ 10 апреля 2011

Я хотел бы написать фильтр bash, который будет принимать файл предложений, разделенных символом новой строки, и возвращать предложения, которые не написаны с ошибками. Я думал об Aspell, но я не уверен, что с этим делать. Есть идеи?

Ответы [ 3 ]

2 голосов
/ 10 апреля 2011

Вот скрипт, который делает то, что вы хотите.

#!/bin/bash

# Regex for lines describing "good words":
# - empty lines (after each line of input, i.e. at the end)
# - lines with only a '*' (indicating a good word)
# - a line with '@(#) '   (at the start of the output)
# All other lines indicate a bad word.
good_words='^[*]?$|^@\(#\) '

while read # read one line of input
do
    echo $REPLY | # pipe the line to aspell
    aspell pipe | # let aspell check the line
    egrep -q -v $good_words || # have a look if aspell found misspellings
    # no words with mistake, output the line
    echo $REPLY
done
2 голосов
/ 10 апреля 2011

Эта труба должна давать желаемые результаты. Обратите внимание, что вы должны что-то направить в это, так что добавьте, например, cat input.txt | для быстрого теста.

while read line; do [ "$(ispell -l <<< "$line" | wc -l)" -gt 0 ] && echo "$line"; done

Чтобы также добавить номер строки:

nl -b a -p | while read number line; do [ "$(ispell -l <<< "$line" | wc -l)" -gt 0 ] && echo "$number: $line"; done

Если вы хотите вместо этого вернуть строки с ошибками, просто замените -gt на -le (или, конечно, замените && на ||)


Конечно, вы можете сохранить эти строки в виде скрипта, а затем просто сделать

script.sh < input.txt

если вы так предпочитаете

0 голосов
/ 10 апреля 2011
grep -v "$(aspell list < file)" file
...