spellfix enhancements
Ed Reeder
oer at isosvax.UUCP
Sat Oct 12 08:40:09 AEST 1985
Enclosed is yet another set of enhancements to spellfix, a spelling
corrector previously distributed by Bill Silvert. I corrected a
few minor bugs, made it also operate on XENIX systems, added an
ability to look up correct spellings in real time (using look),
and way to specify an editor other than vi. I am enclosing Bill's
original commentary. I have tested this on UCB 4.2 and Intel's
version of XENIX (a superior, and compatible, version of the XENIX
available on the PC/AT).
Ed Reeder
Intel Corporation
Phoenix, AZ
-----------------Bill's Commentary---------------------------------
Here is an enhanced version of spellfix with the following features:
menu driven rather than requiring editing of spell.errors in vi;
supports user dictionary $HOME/dict/words and menu allows user to
add words to this dictionary;
option for automatic correction of words.
This was created by modifying Rex Saunders' script, and he gets most
of the credit for it. My changes are inspired mainly by the CP/M
spelling checker "The Word Plus", which is a superb utility with
these and more features.
It has been suggested that spellfix check for complete words.
That is too messy for my taste -- my spelling isn't that bad!
Also, a recent item in net.sources.bugs points out that you can
get into trouble with troff commands.
Another problem which I haven't a fix for is case differences.
I have chosen to ignore all words with embedded numerals (this
includes 2nd) and anything which is all in capitals (since I
write a lot of stuff with embedded Fortran code).
---------------------------cut here-------------------------------
#! /bin/sh
# run through /bin/sh to create script and manual entry
cat > spellfix << xxSHELLxx
#! /bin/sh
# <@(#)spellfix Ver. 1.7, 85/09/27 12:03:48> - interactive spelling checker and fixer
# Rex Sanders, USGS Pacific Marine Geology
# Modifications by Bill Silvert, MEL
# Modifications by Ed Reeder, Intel
t1=/tmp/spf$$.1
t2=/tmp/spf$$.2
t3=/tmp/spf$$.3
prog=`basename $0`
udict=$HOME/dict
uwords=$udict/words
SPELLEDITOR=${SPELLEDITOR-'vi +/###/'}
case $# in
1) trap 'rm -f $t1 $t2 $t3; exit' 0 1 2 15 ;;
*) echo "Usage: $prog filename" >&2
exit 1 ;;
esac
echo "Looking for spelling errors in $1 ..."
# ignore upper-case 'words' and alphnumerics
spell $1 | egrep "[a-z]" | egrep -v "[0-9]" | sort > $t2
if test -s $uwords
then uwexists=y
sort -u -f $uwords -o $uwords # clean up user's dictionary.
sort $uwords | comm -23 $t2 - > $t1 # comm won't work with folded order
else mv $t2 $t1
fi
test -s $t1 || exit 0
test -d $udict || mkdir $udict
echo "Found `wc -l <$t1` misspellings"
echo "Responses: A=add to user dictionary, B=bypass, C=correct"
echo " L=look for correct spelling, M=mark for correction"
for word in `cat $t1`
do
egrep $word $1
while :
do
echo -n "${word}: (A/B/C/L/M?) "
read response
case $response in
A|a) echo $word >> $uwords
break ;;
B|b) break ;;
C|c) echo -n "Correct spelling: "
read response
case $response in
"") continue ;;
esac
echo "s/${word}/${response}/" >> $t3
break ;;
L|l) echo -n "First letters of word: "
read response
case $response in
"") continue ;;
esac
case $uwexists in
y) look -f $response $uwords > $t2
look $response | sort -f -m - $t2 ;;
*) look $response ;;
esac | more ;;
M|m) echo "/${word}/i\\" >> $t3
echo "### spell: ${word} %%%" >> $t3
mark=y
break ;;
*) ;;
esac
done
done
test -s $t3 || exit 0
if (sed -f $t3 < $1 > $t2 2> /dev/null)
then case "$mark" in
y) echo "Here is a temporary copy of $1 to edit: use n to find next error"
echo "The errors are marked by the ### character string"
sleep 3
$SPELLEDITOR $t2
sed -e '/^### spell: .* %%%$/d' $t2 > $t3 ;;
*) mv $t2 $t3 ;;
esac
while :
do
echo -n "Do you want to overwrite $1 <y/n>? "
read reply
case "$reply" in
y*|Y*) cp $t3 $1
exit 0 ;;
n*|N*) exit 0 ;;
*) continue ;;
esac
done
else echo "$prog: error marking misspelled words - file $1 unchanged." >&2
fi
xxSHELLxx
chmod +x spellfix
cat >spellfix.1 <<xxMANxx
.ta .5i 1i 1.5i 2i 2.5i 3i
.TH SPELLFIX 1 "Local Utility"
.SH NAME
spellfix - interactively fix spelling errors
.SH SYNOPSIS
.B spellfix
.I file
.SH DESCRIPTION
.PP
.I spellfix
is an interactive spelling checker and fixer.
It calls
.I spell, look
and also uses a local word list of the user.
Using
.I spellfix
is a 4 step process:
.TP
1.
Type:
.sp
.B
spellfix
.I file
.sp
where
.I file
is the name of your manuscript.
.I spellfix
only handles one file at a time.
.TP
2.
.I spellfix
will list all apparent misspellings in your manuscript,
along with all lines in which each occurs.
Respond to each with:
.B A
if you want it added to your word list;
.B B
to bypass the word;
.B C
to correct it immediately;
.B L
to look up the correct spelling;
and
.B M
to mark it for later correction via a text editor.
If you respond with C,
.I spellfix
will prompt you for the correct spelling.
Make sure that you want this correction made in all lines shown!
If you respond with L,
.I spellfix
will ask you to enter the first letters of the word. Enter as many
letters as you are sure of. All words in the system and user word
lists beginning with those letters will be shown.
.TP
3.
Optionally edit any
.I Marked
words in a temporary copy of your original file.
The words you marked in step 2 will be flagged with lines like:
.br
.sp
.ec +
### spell: foobar %%%
.ec
.br
.sp
where
.I foobar
is a misspelled word.
You should correct the misspellings on the text lines that follow.
The flag lines will be removed automatically before the next step.
.TP
4.
Answer
.IR spellfix 's
question:
.sp
overwrite
.I file
?
.sp
with
.B yes
or
.BR no .
If your answer is yes,
.I spellfix
will replace your original file with the file containing your corrections.
.SH NOTES
In step 3, the search string for
.IR vi (1)
is set to "###";
you can conveniently search for the next marked spelling error with the
"n" request.
.PP
If you have specified a different SPELLEDITOR, use its search techniques to
find the "###" string.
.PP
.I spellfix
was inspired by
.IR error (1).
.SH FILES
.in +1.5i
.ti -1.5i
~/dict/words user word list
.ti -1.5i
/usr/dict/words system word list
.ti -1.5i
$SPELLEDITOR variable containing the pathname of the
.I Mark
editor, and any desired parameters. Defaults to 'vi +/###/'.
.in -1.5i
.SH SEE ALSO
error(1), look(1), more(1), sed(1), spell(1), vi(1).
.SH BUGS
.PP
.I spellfix
can change more lines than needed.
For example, if
.I spell
rejects 'teache',
lines with 'teacher' will be marked as erroneous.
.SH AUTHOR
Rex Sanders, U.S. Geological Survey, Pacific Marine Geology.
Modifications by William Silvert, Marine Ecology Laboratory;
Ed Reeder, Intel Corporation.
xxMANxx
--
Ed Reeder
Intel Corporation
Phoenix, AZ
hplabs!hao!noao!terak!asuvax!isosvax!oer
More information about the Comp.sources.unix
mailing list