Mi finfaris la kreilon por dict-vortaro. default tip
authorviric@llimona
Sat, 17 Mar 2007 02:40:40 +0100
changeset 5 9d50eeadcc33
parent 4 d92ff57936e2
Mi finfaris la kreilon por dict-vortaro.
LEGUMIN
Makefile
encoding.sh
vortaro.pl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LEGUMIN	Sat Mar 17 02:40:40 2007 +0100
@@ -0,0 +1,11 @@
+Paŝoj por konstrui la dict-vortaron:
+
+1. Rekodigu ĉiujn html-dosierojn al utf-8/uniksaj linioŝanĝoj:
+   Ekz: ./encoding.sh DeDiego/html html-reencoded
+2. Ŝanĝu la variablojn de la Makefile por ke ĝi trovu viajn HTML dosierojn. (la
+   novajn en html-reencoded, laŭ la antaŭa ekzemplo)
+3. Ruligu na "make".
+
+Post tio, vi ŝajne povas kopii viajn de-diego.dict.dz kaj de-diego.index al via
+dict-dosierujo (kutime /usr/lib/dict), meti ilin en via dictd.conf dosiero, kaj
+vi jam povas reŝalti la dict-servilon (dictd).
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Sat Mar 17 02:40:40 2007 +0100
@@ -0,0 +1,12 @@
+HTMLDIR?=html-reencoded
+
+BASE=de-diego
+
+$(BASE).dict.dz: $(BASE).dict
+	dictzip $(BASE).dict
+
+$(BASE).dict: $(BASE).txt
+	dictfmt -j $(BASE) --locale="es_ES.UTF-8" -s "Gran Diccionario Español-Esperanto de Fernando de Diego" -u "http://www.esperanto-es.net/diccionario/" --without-info < $(BASE).txt
+
+$(BASE).txt: vortaro.pl
+	./vortaro.pl $(HTMLDIR) > $(BASE).txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/encoding.sh	Sat Mar 17 02:40:40 2007 +0100
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# Tio ĉi prenas la originalajn dosierojn kaj ilin rekodigas al UTF-8 kaj
+# al uniksa liniofina stilo.
+
+
+if [ $# -ne 2 ] ; then
+	echo usage: $0 ORIGIN DEST
+	exit 1
+fi
+
+ORIGINDIR=$1
+DESTDIR=$2
+
+mkdir -p $DESTDIR
+
+for a in `seq 1 60000`; do
+	echo -n "$a ";
+	ORIGIN=$ORIGINDIR/diego$a.html
+	DEST=$DESTDIR/diego$a.html
+	if [ ! -f $ORIGIN ]; then
+		break ;
+	fi;
+
+	cat $ORIGIN | dos2unix | recode latin1..utf-8 > $DEST
+done
--- a/vortaro.pl	Wed Mar 14 14:37:48 2007 +0100
+++ b/vortaro.pl	Sat Mar 17 02:40:40 2007 +0100
@@ -2,10 +2,12 @@
 
 use utf8;
 
-$maks_vortoj = 1;
+binmode STDOUT, ":utf8";
 
-$celdosierujo = "prova";
-if ($#ARGV != 1) {
+$unua_vortonumero = 2;
+$lasta_vortonumero = 50925;
+
+if (scalar(@ARGV) != 1) {
 	print "Unua parametro: dosierujo de la html dosieroj\n";
 	exit;
 }
@@ -14,15 +16,41 @@
 # States
 $s_komenco = 0;
 $s_nomo = 1;
-$s_antauxdifinoj = 1;
-$s_difinoj = 1;
+$s_antaŭdifinoj = 2;
+$s_difinoj = 3;
+$s_fino = 4;
+
+sub elhtmligi {
+	$ĉeno = $_[0];
+
+	$ĉeno =~ s/<u><i><b>/[/g;
+	$ĉeno =~ s/<\/b><\/i><\/u>/]/g;
+
+	$ĉeno =~ s/&#265;/ĉ/g;
+
+	$ĉeno =~ s/&#265;/ĉ/g;
+	$ĉeno =~ s/&#285;/ĝ/g;
+	$ĉeno =~ s/&#293;/ĥ/g;
+	$ĉeno =~ s/&#309;/ĵ/g;
+	$ĉeno =~ s/&#349;/ŝ/g;
+	$ĉeno =~ s/&#365;/ŭ/g;
+
+	$ĉeno =~ s/&#264;/Ĉ/g;
+	$ĉeno =~ s/&#284;/Ĝ/g;
+	$ĉeno =~ s/&#292;/Ĥ/g;
+	$ĉeno =~ s/&#308;/Ĵ/g;
+	$ĉeno =~ s/&#348;/Ŝ/g;
+	$ĉeno =~ s/&#354;/Ŭ/g;
+
+	return $ĉeno;
+}
 
 sub procezi_dosieron {
 	my $nomo = $_[0];
 	my $stato = $s_komenco;
 	my $linio;
 
-	open $dosiero, $nomo or die "DIED: File not found";
+	open ($dosiero, "<:utf8", $nomo) or die "DIED: File not found";
 
 	while(<$dosiero>) {
 		$linio = $_;
@@ -30,12 +58,34 @@
 			if ($linio eq
 			"<table cellpadding=\"2\" cellspacing=\"2\">\n") {
 				$stato = $s_nomo;
-				print "Statosxangxo!";
 			}
 		} elsif ($stato == $s_nomo) {
-			$stato = $s_antauxdifinoj;
+			$linio =~ /font [^>]*>([^<]+)<\/b><\/td><\/tr>/;
+			# Ni skribas la kapvorton
+			print ":" . $1 . ":";
+			$stato = $s_antaŭdifinoj;
+		} elsif ($stato == $s_antaŭdifinoj) {
+			if ($linio eq
+			"<table cellpadding=\"1\" cellspacing=\"2\">\n") {
+				$stato = $s_difinoj;
+			}
+		} elsif ($stato == $s_difinoj) {
+			if ($linio eq "</table>\n") {
+				$stato = $s_fino;
+				last;
+			}
+			if ($linio =~ /^\t<tr>.*font size=\"1\"><i>([0-9]+).*size=\"2\">(.*)<\/td><\/tr>\n/) {
+				# Ni skribas la linion de difino/traduko
+				print $1 . ". " . elhtmligi($2) . "\n";
+			}
 		}
 	}
+
+	if ($stato != $s_fino && $stato != $s_komenco) {
+		die;
+	}
+
+	close $dosiero;
 }
 
 sub krei_dosiernomon {
@@ -43,9 +93,8 @@
 	return "$origino/diego$num.html";
 }
 
-for $i (1 .. $maks_vortoj) {
+for $i ($unua_vortonumero .. $lasta_vortonumero) {
 	$nomo = krei_dosiernomon($i);
-	print $nomo
 
 	procezi_dosieron($nomo);
 }