powell@ole.UUCP (Gary Powell) (03/06/88)
Submitted-By: "Gary Powell" <powell@ole.UUCP> Archive-Name: correct Comp.sources.misc: Volume 2, Issue 71 Submitted-By: "Gary Powell" <powell@ole.UUCP> Archive-Name: correct #--------------------------------CUT HERE------------------------------------- #! /bin/sh # # This is a shell archive. Save this into a file, edit it # and delete all lines above this comment. Then give this # file to sh by executing the command "sh file". The files # will be extracted into the current directory owned by # you with default permissions. # # The files contained herein are: # # -rw-r--r-- 1 allbery System 5303 Mar 5 18:32 correct.csh # -rw-rw-rw- 1 allbery uucp 829 Mar 5 18:33 correct.l # echo 'x - correct.csh' if test -f correct.csh; then echo 'shar: not overwriting correct.csh'; else sed 's/^X//' << '________This_Is_The_END________' > correct.csh X#! /bin/csh -f X X# X# This script takes a file name as an argument and looks for misspellings. X# If you want to change the file, a sed script is provided, or you X# can change your personal dictionary. It will add one if you need it. X# X# Author : G. Powell Seattle Silicon Co. 11/3/87 X# X X# extract the file name from the command line. Xset text = $1 X X# Your personal dictionary, and lookup table file names. Xset mylist = ~/.myhdict Xset mylook = ~/.mylook X X# Temp files for use while this script is running Xset temptext = /tmp/$1.$$ Xset tempfile = /tmp/tmp_file.$$ Xset tmplist = /tmp/myhdict_tmp.$$ Xset tmplook = /tmp/mylook_tmp.$$ Xset sedfile = /tmp/sed_spell.$$ X X# Delilimaters of a "word" Xset delim = '\([\.,?\!(){}\[\]""";: ]\)' X Xecho "Checking spelling in $text." X X# X# if you have a personal dictionary use it. X# Xif (-e $mylist) then X set list = $mylist Xelse X set list = /usr/dict/hlista Xendif X Xset llook = $mylook X Xecho "Type h for help" X Xforeach i (`spell -d $list $text`) X set word = $i X Query: X echo -n "< $word > ? " X switch ($<) X case 'a': X Addword: X echo "Adding $word to list $mylist." X# X# Add word to your personal dictionary X# X if (! -e $tmplist) then X cp $list $tmplist X set list = $tmplist X endif X echo $word | spellin $list > $tempfile X mv -f $tempfile $list X# X# Add word to your personal lookup list X# X if (! -e $tmplook && -e $mylook) then X cp $mylook $tmplook X endif X set llook = $tmplook X echo $word >> $tmplook X cat $tmplook | sort | uniq > $tempfile X mv -f $tempfile $tmplook X breaksw X case 'c': X echo -n "New spelling? " X set neword = ($<) X echo "-> Changing occurances of $word to $neword in $text." X# X# Look for new word word in dictionary X# X @ change = 0 X set foundword = `echo $neword | spellout $list` X if ($foundword == $neword) then X echo "$neword was not found in your dictionary." X echo -n "Do you still want to change it? [y/n] " X if ('y' != $<) then X goto Query X endif X @ change = 1 X endif X X if (! -e $temptext) then X cp $text $temptext X endif X echo /$word/s/'^'$word"$delim"/$neword'\1'/g > sedfile X echo /$word/s/"$delim"$word'$'/'\1'$neword/g >> sedfile X echo /$word/s/"$delim"$word"$delim"/'\1'$neword'\2'/g >> sedfile X mv $temptext $tempfile X sed -f sedfile $tempfile > $temptext X /bin/rm sedfile X /bin/rm $tempfile X X if ( $change == 1) then X echo -n "Do you want add $neword to your dictionary? [y/n] " X if ('y' == $<) then X set word = $neword X goto Addword X endif X endif X breaksw X case 'd': X if (-e $temptext) then X diff $text $temptext | less -emQ X else X echo "You haven't made any changes yet." X endif X goto Query X breaksw X case 'h': X echo " a - add this word to your personal directory $mylist" X echo " c - change all occurances of this word in the file $text" X echo " d - diff file $text and the tempfile changes." X echo " h - help (this command)" X echo " l - look up the word for near spellings" X echo " p - print the context of the words." X echo " q - quit (you can save current changes.)" X echo " r - remove a word from your dictionary, $mylist." X echo " s - look up an entered word for near spellings" X echo "<cr> - skip to the next word." X goto Query X breaksw X case 'l': X set lookup = $word X Lookup: X @ ccount = `echo $lookup | wc -c` X Lookagain: X look $lookup > $tempfile X if (-e $llook) then X look $lookup $llook >> $tempfile X endif X @ wcount = `cat $tempfile | wc -l` X if ( $wcount <= 0 ) then X if ($ccount > 3) then X @ ccount -- X set lookup = `echo $lookup | colrm $ccount` X echo "Nothing found yet, trying...$lookup" X goto Lookagain X else X echo "No words found." X /bin/rm $tempfile X goto Query X endif X endif X cat $tempfile | sort | uniq | less -emQ X /bin/rm $tempfile X goto Query X breaksw X case 'p': X set search = '\<'$word'\>' X if (-e $temptext) then X grep "$search" $temptext | less -emQ X else X grep "$search" $text | less -emQ X endif X goto Query X breaksw X case 'q': X echo "quit." X goto Done X breaksw X case 'r': X if (-e $tmplook) then X /bin/rm $list X cp $mylist $list X else X if (-e $mylook && -e $mydict) then X cp $mylook $tmplook X set llook = $tmplook X cp /usr/dict/hlista $tmplist X set list = $tmplist X else X echo "You don't have a personal word list." X goto Query X endif X endif X echo -n "Enter word to remove : " X sed -e "/$</d" $llook > $tempfile X mv -f $tempfile $llook X foreach k (`cat $llook`) X echo $k | spellin $list > $tempfile X mv -f $tempfile $list X end X goto Query X breaksw X case 's': X echo -n "Enter word to find near derivations : " X set lookup = $< X goto Lookup X breaksw X endsw Xend X X# X# Save changes X# XDone: Xset answer = y Xif (-e $temptext) then X echo -n "Would you like to see your changes? " X if ('y' == $<) then X diff $text $temptext | less -emQ X endif X echo -n "Do you want to keep your changes? " X set answer = $< X if ('y' == $answer) then X mv -f $temptext $text X else X /bin/rm $temptext X endif Xendif X X# X# Save new Dictionary X# Xif (-e $tmplist && $answer == 'y') then X echo -n "Do You want to save your updated dictionary? [y/n] " X if ('n' == $<) then X /bin/rm $tmplist X /bin/rm $tmplook X else X mv -f $tmplist $mylist X mv -f $tmplook $mylook X endif Xendif X Xecho "Done." ________This_Is_The_END________ if test `wc -c < correct.csh` -ne 5303; then echo 'shar: correct.csh was damaged during transit (should have been 5303 bytes)' fi fi ; : end of overwriting check echo 'x - correct.l' if test -f correct.l; then echo 'shar: not overwriting correct.l'; else sed 's/^X//' << '________This_Is_The_END________' > correct.l X.TH CORRECT l "2 FEBRUARY 1988" X.UC 4 X.SH NAME Xcorrect - Correct the spelling in a ascii text file. X.SH SYNOPSIS X.LP X.nf Xcorrect filename X.fi X.SH DESCRIPION X.PP Xcorrect is a shell script which runs interactively to Xhelp you correct your spelling and manage a personal dictionary Xand word list. It uses the UNIX calls to spell, list, and grep Xto perform the work. X.PP X.SH FILES X.nf X /usr/local/bin/correct shell script X X ~/.myhdict personal dictionary X ~/.mylook personal word list X XTemp files for use while this script is runs X /tmp/$1.$$ X /tmp/tmp_file.$$ X /tmp/myhdict_tmp.$$ X /tmp/mylook_tmp.$$ X /tmp/sed_spell.$$ X X.fi X.SH AUTHOR X.nf X Gary Powell X.fi X.SH BUGS X.PP XIf you attempt to substitute two words for one the script dies. ________This_Is_The_END________ if test `wc -c < correct.l` -ne 829; then echo 'shar: correct.l was damaged during transit (should have been 829 bytes)' fi fi ; : end of overwriting check exit 0 -- _Q _Q _Q _Q _Q_Q _Q _Q _Q /_\) /_\) /_\) /_\)/_/\\) /_\) /_\) Gary Powell /_\) _O|/O_O|/O__O|/O___O|/O_OO|/O__O|/O__O|/O__________________________________O|/O_ UUCP!uw-beaver!tikal!ole!powell Seattle Silicon Corp. (206) 828-4422