Hej,
Detta är ett experiment att låta andra än Projekt Runebergs redaktion hjälpa till med programmeringen som behövs för att få vårt system att fungera. Om du inte kan programmera så kan du sluta läsa här.
Det OCR-program som Projekt Runeberg använder kan slå ihop ord som avstavats. Det kan också bevara radbrytningarna i en text så att radbrytningarna på faksimilbilden stämmer överens med radbrytningarna i den tolkade texten (vilket gör det lättare att korrekturläsa). Tyvärr klarar programmet inte av att göra både och samtidigt.
För att göra texten som ska korrekturläsas så lättanvänd som möjligt vill vi presentera den med en radbrytning som är så lik den i boken som möjligt, men vi vill slå ihop alla avstavade ord automatiskt. Alltså behöver vi ett program som gör detta. Eftersom detta är ett problem som inte kräver tillgång till alla Projekt Runebergs filer för att man ska kunna laborera med det så tänkte jag se om det finns någon annan som är intresserad av att jobba med det.
Som ett exempel ur verkligheten finns tre filer i slutet av detta brev:
- En OCR-fil med bevarade radbrytningar.
- Samma OCR-fil utan bevarade radbrytningar, och med avstavningar borttagna.
- Ett exempel på hur vi vill att resultatet ska se ut.
Tänk på att filerna nedan inte innehåller alla tänkbara problem. Några andra saker man måste behandla är:
- Tankstreck sist på en rad (ska inte påverkas).
- Avstavning på flera rader i rad.
- Avstavning av det sista ordet på sidan. Detta halva ord kan lämnas kvar som det är och hanteras manuellt vid korrekturläsningen, men det är naturligtvis snyggare om programmet kan klara av att se till att även det ordet slås ihop.
Det är bra om du skriver i Perl, eftersom de flesta andra program vi har är skrivna i Perl.
En uppdaterad version av den här texten finns på
http://runeberg.org/wiki/ta_bort_bindestreck
Om du är intresserad av att hjälpa till men tycker att något är oklart, tveka inte att höra av dig till redaktionen@runeberg.org.
Hans
OCR-fil med bevarade radbrytningar:
Svenska Turistföreningens bildande.
Fyris för d. 26 Nov. 1884 innehöll ett af Docenten Hj. Sjögren och hr T. Fegraeus undertecknadt upprop till bildande af en Allmän Svensk Turistförening, ur hvilket upprop anföres följande:
»Genom byggandet af norra stambanan hade vid- sträckta och på naturscenerier rika trakter af vårt land, hvilka förut endast med kostnad och tidsutdrägt kunnat uppnås, gjorts tillgängliga och lätt åtkomliga för turister från såväl Sverige som utlandet. Härigenom borde det fur oss svenskar hädanefter blifva mera öfverflödigt att göra våra rekreationsresor till utlandet eller Norge. Men hittills har ingenting blifvit gjordt, för att utveckla turistlifvet inom vårt land. För att den stora allmän- heten må kunna resa måste dock resan på förhand noga kunna planläggas i afseende på tid och kostnader - de ställen som böra ses - de »ruter» efter hvilka resan måste företagas och efter hvilka man lättast kan komma fram - hvarest pålitliga förare kunna anskaffas och natt- kvarter erhållas ni. m.»
Att genom spridandet af upplysningar i dessa af- seenden möjliggöra och uppmuntra ett turistlif i större skala skulle vara närmaste målet för den ifrågasatta för- eningens verksamhet.
OCR-fil med borttagna avstavningar (observera att radbrytningar i stycken här saknas helt):
Svenska Turistföreningens bildande.
Fyris för d. 26 Nov. 1884 innehöll ett af Docenten Hj. Sjögren och hr T. Fegraeus undertecknadt upprop till bildande af en Allmän Svensk Turistförening, ur hvilket upprop anföres följande:
»Genom byggandet af norra stambanan hade vidsträckta och på naturscenerier rika trakter af vårt land, hvilka förut endast med kostnad och tidsutdrägt kunnat uppnås, gjorts tillgängliga och lätt åtkomliga för turister från såväl Sverige som utlandet. Härigenom borde det fur oss svenskar hädanefter blifva mera öfverflödigt att göra våra rekreationsresor till utlandet eller Norge. Men hittills har ingenting blifvit gjordt, för att utveckla turistlifvet inom vårt land. För att den stora allmänheten må kunna resa måste dock resan på förhand noga kunna planläggas i afseende på tid och kostnader - de ställen som böra ses - de »ruter» efter hvilka resan måste företagas och efter hvilka man lättast kan komma fram - hvarest pålitliga förare kunna anskaffas och nattkvarter erhållas ni. m.»
Att genom spridandet af upplysningar i dessa afseenden möjliggöra och uppmuntra ett turistlif i större skala skulle vara närmaste målet för den ifrågasatta föreningens verksamhet.
Önskat resultat:
Svenska Turistföreningens bildande.
Fyris för d. 26 Nov. 1884 innehöll ett af Docenten Hj. Sjögren och hr T. Fegraeus undertecknadt upprop till bildande af en Allmän Svensk Turistförening, ur hvilket upprop anföres följande:
»Genom byggandet af norra stambanan hade vidsträckta och på naturscenerier rika trakter af vårt land, hvilka förut endast med kostnad och tidsutdrägt kunnat uppnås, gjorts tillgängliga och lätt åtkomliga för turister från såväl Sverige som utlandet. Härigenom borde det fur oss svenskar hädanefter blifva mera öfverflödigt att göra våra rekreationsresor till utlandet eller Norge. Men hittills har ingenting blifvit gjordt, för att utveckla turistlifvet inom vårt land. För att den stora allmänheten må kunna resa måste dock resan på förhand noga kunna planläggas i afseende på tid och kostnader - de ställen som böra ses - de »ruter» efter hvilka resan måste företagas och efter hvilka man lättast kan komma fram - hvarest pålitliga förare kunna anskaffas och nattkvarter erhållas ni. m.»
Att genom spridandet af upplysningar i dessa afseenden möjliggöra och uppmuntra ett turistlif i större skala skulle vara närmaste målet för den ifrågasatta föreningens verksamhet.
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
----- Original Message ----- From: "Hans Persson" unicorn@lysator.liu.se To: runeberg@lists.lysator.liu.se Sent: Monday, January 26, 2004 7:46 PM Subject: [Runeberg] Vill du hjälpa Projekt Runeberg programmera?
Hej,
Detta är ett experiment att låta andra än Projekt Runebergs redaktion hjälpa till med programmeringen som behövs för att få vårt system att fungera. Om du inte kan programmera så kan du sluta läsa här.
Det OCR-program som Projekt Runeberg använder kan slå ihop ord som avstavats. Det kan också bevara radbrytningarna i en text så att radbrytningarna på faksimilbilden stämmer överens med radbrytningarna i den tolkade texten (vilket gör det lättare att korrekturläsa). Tyvärr klarar programmet inte av att göra både och samtidigt.
För att göra texten som ska korrekturläsas så lättanvänd som möjligt vill vi presentera den med en radbrytning som är så lik den i boken som möjligt, men vi vill slå ihop alla avstavade ord automatiskt. Alltså behöver vi ett program som gör detta. Eftersom detta är ett problem som inte kräver tillgång till alla Projekt Runebergs filer för att man ska kunna laborera med det så tänkte jag se om det finns någon annan som är intresserad av att jobba med det.
Som ett exempel ur verkligheten finns tre filer i slutet av detta brev:
En OCR-fil med bevarade radbrytningar.
Samma OCR-fil utan bevarade radbrytningar, och med avstavningar borttagna.
Ett exempel på hur vi vill att resultatet ska se ut.
Tänk på att filerna nedan inte innehåller alla tänkbara problem. Några andra saker man måste behandla är:
Tankstreck sist på en rad (ska inte påverkas).
Avstavning på flera rader i rad.
Avstavning av det sista ordet på sidan. Detta halva ord kan lämnas kvar som det är och hanteras manuellt vid korrekturläsningen, men det är naturligtvis snyggare om programmet kan klara av att se till att även det ordet slås ihop.
Det är bra om du skriver i Perl, eftersom de flesta andra program vi har är skrivna i Perl.
En uppdaterad version av den här texten finns på
http://runeberg.org/wiki/ta_bort_bindestreck
Om du är intresserad av att hjälpa till men tycker att något är oklart, tveka inte att höra av dig till redaktionen@runeberg.org.
Hans
OCR-fil med bevarade radbrytningar:
Svenska Turistföreningens bildande. Fyris för d. 26 Nov. 1884 innehöll ett af Docenten Hj. Sjögren och hr T. Fegraeus undertecknadt upprop till bildande af en Allmän Svensk Turistförening, ur hvilket upprop anföres följande: »Genom byggandet af norra stambanan hade vid- sträckta och på naturscenerier rika trakter af vårt land, hvilka förut endast med kostnad och tidsutdrägt kunnat uppnås, gjorts tillgängliga och lätt åtkomliga för turister från såväl Sverige som utlandet. Härigenom borde det fur oss svenskar hädanefter blifva mera öfverflödigt att göra våra rekreationsresor till utlandet eller Norge. Men hittills har ingenting blifvit gjordt, för att utveckla turistlifvet inom vårt land. För att den stora allmän- heten må kunna resa måste dock resan på förhand noga kunna planläggas i afseende på tid och kostnader - de ställen som böra ses - de »ruter» efter hvilka resan måste företagas och efter hvilka man lättast kan komma fram - hvarest pålitliga förare kunna anskaffas och natt- kvarter erhållas ni. m.» Att genom spridandet af upplysningar i dessa af- seenden möjliggöra och uppmuntra ett turistlif i större skala skulle vara närmaste målet för den ifrågasatta för- eningens verksamhet.
OCR-fil med borttagna avstavningar (observera att radbrytningar i stycken här saknas helt):
Svenska Turistföreningens bildande. Fyris för d. 26 Nov. 1884 innehöll ett af Docenten Hj. Sjögren och hr
T. Fegraeus undertecknadt upprop till bildande af en Allmän Svensk Turistförening, ur hvilket upprop anföres följande:
»Genom byggandet af norra stambanan hade vidsträckta och på
naturscenerier rika trakter af vårt land, hvilka förut endast med kostnad och tidsutdrägt kunnat uppnås, gjorts tillgängliga och lätt åtkomliga för turister från såväl Sverige som utlandet. Härigenom borde det fur oss svenskar hädanefter blifva mera öfverflödigt att göra våra rekreationsresor till utlandet eller Norge. Men hittills har ingenting blifvit gjordt, för att utveckla turistlifvet inom vårt land. För att den stora allmänheten må kunna resa måste dock resan på förhand noga kunna planläggas i afseende på tid och kostnader - de ställen som böra ses - de »ruter» efter hvilka resan måste företagas och efter hvilka man lättast kan komma fram - hvarest pålitliga förare kunna anskaffas och nattkvarter erhållas ni. m.»
Att genom spridandet af upplysningar i dessa afseenden möjliggöra och
uppmuntra ett turistlif i större skala skulle vara närmaste målet för den ifrågasatta föreningens verksamhet.
Önskat resultat:
Svenska Turistföreningens bildande. Fyris för d. 26 Nov. 1884 innehöll ett af Docenten Hj. Sjögren och hr T. Fegraeus undertecknadt upprop till bildande af en Allmän Svensk Turistförening, ur hvilket upprop anföres följande: »Genom byggandet af norra stambanan hade vidsträckta och på naturscenerier rika trakter af vårt land, hvilka förut endast med kostnad och tidsutdrägt kunnat uppnås, gjorts tillgängliga och lätt åtkomliga för turister från såväl Sverige som utlandet. Härigenom borde det fur oss svenskar hädanefter blifva mera öfverflödigt att göra våra rekreationsresor till utlandet eller Norge. Men hittills har ingenting blifvit gjordt, för att utveckla turistlifvet inom vårt land. För att den stora allmänheten må kunna resa måste dock resan på förhand noga kunna planläggas i afseende på tid och kostnader - de ställen som böra ses - de »ruter» efter hvilka resan måste företagas och efter hvilka man lättast kan komma fram - hvarest pålitliga förare kunna anskaffas och nattkvarter erhållas ni. m.» Att genom spridandet af upplysningar i dessa afseenden möjliggöra och uppmuntra ett turistlif i större skala skulle vara närmaste målet för den ifrågasatta föreningens verksamhet.
--
+--------------------------------------------------------------------------- -+
| Hans Persson http://www.lysator.liu.se/~unicorn/
|
| unicorn@lysator.liu.se http://www.lysator.liu.se/runeberg/
|
+--------------------------------------------------------------------------- -+
Runeberg mailing list Runeberg@lists.lysator.liu.se http://lists.lysator.liu.se/mailman/listinfo/runeberg
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
*** omsändning med av listan godkänd mejladress ***
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