Verificação ortográfica da entrada do usuário pelo aspell, mas como invocar o modo INTERATIVO neste contexto?

0

Eu escrevi um script que recebe a sentença de um usuário, Eu gostaria de canalizar a string para aspell e, em seguida, obter as sugestões da tela INTERACTIVE (no caso do usuário ter alguns erros de digitação). Depois, as palavras seriam enviadas de volta para o script e eu substituiria os erros de digitação pelas palavras correspondentes.

Estou ciente das opções do aspell:

1) Verifique o arquivo em busca de erros de digitação e exiba uma lista de sugestões no modo interativo :

aspell check <file name>

2) Verifique o arquivo quanto a erros de digitação e exiba uma lista de sugestões que não estão no modo interativo :

cat <filename> | aspell -a

mas se eu tentar a opção um, recebo "Erro: o Stdin não é um terminal." , Ficarei feliz em receber alguma dica proveitosa de como superar esse problema? :)

Obrigado

    
por JammingThebBits 17.08.2018 / 21:56

2 respostas

0

Eu acho que você não pode sair sem usar um arquivo temporário. zsh tem suporte embutido para isso com sua forma =(...) de substituição de comando.

Aqui, para verificar a ortografia do conteúdo de uma variável (da saída de printf %s $string ):

{
  (){
    aspell check -x $1 >&3 3>&-
    cat $1
  } =(printf %s $string) | IFS= read -rd '' corrected_string
} 3>&1
    
por 19.08.2018 / 11:16
0

Aqui está a solução, que funcionou para mim:

TMP_FILE='mktemp'

echo "${USER_INPUT}" > "${TMP_FILE}"

# Allows me to read user input below, assigns stdin to keyboard
exec < /dev/tty

# I'm assuming you have a aspell (spell checker) installed on your system
# invoke aspell and check for typos
/usr/bin/aspell check "${TMP_FILE}"

ANSWER=$(cat $TMP_FILE )

if [[ "${ANSWER}" != "${USER_INPUT}" ]]; then
    echo "After applying fixes: ${ANSWER}"
fi

Aproveite!

    
por 19.08.2018 / 14:49