|
|||||||||||||||||||||||||||
Morten Bo Johansen <sslug@sslug> wrote:
> I forbindelse med DBL, tænkte jeg at det måske ville være nemmest at
> lave rettelser i den scannede tekst, hvis nogle frivillige hver tog en
> bid af den ordliste jeg henviste til på min hjemmeside, og så lavede
> hver deres liste over fejlstavede/fejlformaterede ord og sendte disse
> til Lars, som så via et script med f.eks. sed indføjede rettelserne i et
> hug.
> Jeg sidder lige og roder med en løsning. Hvis jeg kommer frem til
> noget brugbart, hører I nærmere.
Okay, så har jeg et forslag til en procedure for korrekturlæsning af
Projekt Runeberg-filer:
1) Lars Aronsson (eller anden ansvarlig på projektet) laver en fil som
den jeg henviste til i går, dvs. en fil der indeholder én instans af
samtlige scannede ord i et bogværk, hver på en linje for sig.
2) Korrekturlæseren kigger listen igennem og returnerer en rettet liste
til Lars.
3) Lars bruger vedlagte script til at foretage rettelserne.
ad 1: Jeg brugte flg. kommando til at lave listen
find ... | tr -cs '[a-zA-ZæøåÆØÅ0-9-]' '[\n*]' | sort -u >dbl_ordliste
ad 3: Her er mit forslag til et script (kan sikkert forbedres):
---- erstat.sh start -----
#!/bin/bash
## erstat.sh - et script der ud fra en rettelsesfil rekursivt erstatter n
## forekomster af ord i n antal filer med et andet.
## Filen med rettelser skal have flg. format:
##
## forkert_ord_1 rigtigt_ord_1
## ...
## forkert_ord_n rigtigt_ord_n
rettelsesfil=./rettelser
sti=$HOME/tmp/dbl
if [ ! -f $rettelsesfil ]; then
echo $rettelsesfil ikke fundet
exit 1
fi
erstat ()
{
for fil in $(find $sti -type f -name \*.txt);
do
cp $fil $fil~
sed "s/$1/$2/g" $fil~ >$fil
rm $fil~
done
}
# slet alle blanke linjer i bunden af fil
cp $rettelsesfil $rettelsesfil~
sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' $rettelsesfil~ >$rettelsesfil
rm $rettelsesfil~
antal_rettelser=$(cat $rettelsesfil | wc -l)
let "rettelse = 1"
# sørg for at rettelsesfil har to ord på hver linje
while [ ! $rettelse -gt $antal_rettelser ]
do
set $(sed ''$rettelse'!d' $rettelsesfil)
if [ ! $# == 2 ]; then
echo "Rettelsesfil skal have to ord på hver linje"
exit 1
fi
let "rettelse = rettelse + 1"
done
let "rettelse = 1"
# skriv ændringer linje for linje fra rettelsesfil til filer
while [ ! $rettelse -gt $antal_rettelser ]
do
erstat $(sed ''$rettelse'!d' $rettelsesfil)
let "rettelse = rettelse + 1"
done
---- erstat.sh slut -----
Hvis den rettelsesfil som korrekturlæseren har sendt tilbage ser
således ud:
0jeblikke Øjeblikke
Admi-ralitetsadjudant Admiralitetsadjudant
ArenstorfF Arenstorff
...
så er det bare at køre scriptet, så bliver samtlige rettelser i
rettelsesfilen tilføjet til samtlige filer i den angivne sti.
Lad mig høre hvad I (især Lars) mener.
Morten
|
||||||||||||||
|
||||||||||||||