Hej!
Varför översätter inte OCR-programmet tankestreck till tankestreck, bindestreck till bindestreck och minustecken till minustecken? Jag har stött på "inte-tecken" (¬, eller ¬) som översatts till ett "minustecken". Det som scriptet ska bearbeta verkar ju vara s.k. "mjuka bindestreck", som har sin egen kod (­). Detta är definierat i HTML 4.0, om än inte Safari eller IE för Macintosh verkar ha det klart för sig...
Det finns även endel ord som är icke-svenska – exempelvis 1800-tals utgåvans "mytologi" ("lapsk mytologi"). Endel ord skrivs som bokstäver åtskilda med mellanrum, men bindestrecket fungerar både som hårt och mjukt.
Ordet "L u o t - c h o z i k" är ett sådant exempel, där bindestreck fungerar som både en ordseparation och radbrytning. Å andra sidan är "S t o r j u n - k a r e n" ett undantag, för där fungerar bindestrecket bara som (felaktig utsatt?) radbrytning. Kanske det borde finnas en regel "om bindestrecket förbigås eller efterföljs av ett ord med en bokstav, så lämna ordet orört".
Dessutom skulle jag vilja införa märkningar på orden, men detta är en annan diskussion. :-)
onsdagen den 28 januari 2004 kl 08.28 skrev Ketil Firing Hanssen:
Følgende unntak bør tas hånd om:
Vest- Tyskland
Regelen er at neste rad begynner med stor bokstav (evt. unntak hvis hele ordet er skrevet med store bokstaver)
Denne blir vel verre:
romersk- katolsk
mvh
Ketil F. Hanssen
------- Original Message -------
From : Tommy Riboe tommy.riboe@bbab.se Date : Wed, 28 Jan 2004 00:37:13 +0100
Jag byggde vidare på regexp-exemplet från Bengt och kan nu erbjuda
nedanstående förslag. Eftersom jag är så gott som nybörjare på Perl så skall mitt exempel tas som ett algoritmförslag och kompletteras med felhantering och liknande. Dessutom har jag säkert missat något undantagsfall. Det verkar i alla fall fungera med den medföljande texten utökad med enstaka instanser av mina undantag.
mvh Tommy Riboe
#============================================ #!/bin/perl # # huvudregel: # a) rader vars sista ord slutar med '-' bryts före avstavat ord # b) avstavat ord sammanfogas på nästa rad # c) indrag bibehålles # # undantag: # a) rad som slutar med tankstreck (ensamt '-') # b) rad som slutar med förled i upprepade sammansatta ord # c) avstavning i sidans sista rad # # vid undantag b) flyttas förledet till följande rad
seek(STDIN, 0, SEEK_SET); $line= ""; $nextline= ""; $spill = "";
#if () { # läs in första raden $line = ; { # avlägsna ord som slutar med bindestreck från # slutet av raden, med undantag för ensamma # bindestreck, placera avlägsnad text i $spill $line =~ s/(\s*)(.*)( +?)(\S+?)-$/\1\2/; $spill = $4; } print $line;
while () {
# testa om nästa rad börjar med "och", "eller" # (bör mer naturligt placeras efter nästa sats # och använda sig av $nextline) if (/^\s*(och|eller).*$/) { $spill = $spill . "- "; } # förbered nästa rad $nextline = $_; # sätt ihop marginal + spill + nästa_rad $nextline =~ s/(\s*)(.+?)$/$1$spill$2/; # gör nästa rad till aktuell rad $line = $nextline; # avlägsna ord som slutar med bindestreck från # slutet av raden, med undantag för ensamma # bindestreck, placera avlägsnad text i $spill $line =~ s/(\s*)(.*)( +?)(\S+?)-$/\1\2/; $spill = $4; print $line;
} #} print "\n(till nästa sida: " . $spill . ")\n"; #============================================
-----Ursprungligt meddelande----- Från: runeberg-admin@lists.lysator.liu.se [mailto:runeberg-admin@lists.lysator.liu.se]För Bengt J. Olsson Skickat: den 27 januari 2004 00:00 Till: runeberg@lists.lysator.liu.se; Hans Persson Ämne: [Runeberg] Re: [Runeberg] Vill du hjälpa Projekt Runeberg programmera?
Har inte något färdigt program men har följande brott-stycke av ett sånt program;
$line =~ s/(.*) (.+?)-$/$1/;
allt utom det avstavade ordet finns kvar i $1; första delen av det avstavade ordet finns i $2>
$line = $2 . $line;
M v h Bengt
Bengt J. Olsson bengt@blafs.com http://blafs.com
Runeberg mailing list Runeberg@lists.lysator.liu.se http://lists.lysator.liu.se/mailman/listinfo/runeberg
Finn dine gamle klassekamerater på http://klassekamerater.nettavisen.no
Från: Tommy Riboe tommy.riboe@bbab.se Datum: ons 28 jan 2004 00.37.13 Till: runeberg@lists.lysator.liu.se Ämne: [Runeberg] SV: [Runeberg] Vill du hj‰lpa Projekt Runeberg programmera? Svara-till:: tommy.riboe@bbab.se
Jag byggde vidare på regexp-exemplet från Bengt och kan nu erbjuda nedanstående förslag. Eftersom jag är så gott som nybörjare på Perl så skall mitt exempel tas som ett algoritmförslag och kompletteras med felhantering och liknande. Dessutom har jag säkert missat något undantagsfall. Det verkar i alla fall fungera med den medföljande texten utökad med enstaka instanser av mina undantag.
mvh Tommy Riboe
#============================================ #!/bin/perl # # huvudregel: # a) rader vars sista ord slutar med '-' bryts före avstavat ord # b) avstavat ord sammanfogas på nästa rad # c) indrag bibehålles # # undantag: # a) rad som slutar med tankstreck (ensamt '-') # b) rad som slutar med förled i upprepade sammansatta ord # c) avstavning i sidans sista rad # # vid undantag b) flyttas förledet till följande rad
seek(STDIN, 0, SEEK_SET); $line= ""; $nextline= ""; $spill = "";
#if (<STDIN>) { # läs in första raden $line = <STDIN>; { # avlägsna ord som slutar med bindestreck från # slutet av raden, med undantag för ensamma # bindestreck, placera avlägsnad text i $spill $line =~ s/(\s*)(.*)( +?)(\S+?)-$/\1\2/; $spill = $4; } print $line;
while (<STDIN>) {
# testa om nästa rad börjar med "och", "eller" # (bör mer naturligt placeras efter nästa sats # och använda sig av $nextline) if (/^\s*(och|eller).*$/) { $spill = $spill . "- "; } # förbered nästa rad $nextline = $_; # sätt ihop marginal + spill + nästa_rad $nextline =~ s/(\s*)(.+?)$/$1$spill$2/; # gör nästa rad till aktuell rad $line = $nextline; # avlägsna ord som slutar med bindestreck från # slutet av raden, med undantag för ensamma # bindestreck, placera avlägsnad text i $spill $line =~ s/(\s*)(.*)( +?)(\S+?)-$/\1\2/; $spill = $4; print $line;
} #} print "\n(till nästa sida: " . $spill . ")\n"; #============================================
-----Ursprungligt meddelande----- Från: runeberg-admin@lists.lysator.liu.se [mailto:runeberg-admin@lists.lysator.liu.se]För Bengt J. Olsson Skickat: den 27 januari 2004 00:00 Till: runeberg@lists.lysator.liu.se; Hans Persson Ämne: [Runeberg] Re: [Runeberg] Vill du hjälpa Projekt Runeberg programmera?
Har inte något färdigt program men har följande brott-stycke av ett sånt program;
<för varje rad>
$line =~ s/(.*) (.+?)-$/$1/;
<matchar om sista tecknet på raden är "-"; allt utom det avstavade ordet finns kvar i $1; första delen av det avstavade ordet finns i $2>
<nästa rad om matchningen lyckades>
$line = $2 . $line;
<konkatenerar början av det avstavade ordet med nästa rad>
M v h Bengt
Bengt J. Olsson bengt@blafs.com http://blafs.com
Runeberg mailing list Runeberg@lists.lysator.liu.se http://lists.lysator.liu.se/mailman/listinfo/runeberg