[Trennmuster] Parser fuer Wortliste

Stephan Hennig mailing_list at arcor.de
Sa Feb 11 13:54:49 CET 2012


Hi,

obwohl es noch einige unbeantwortete E-Mails gibt, möchte ich noch eine
technische Front eröffnen. :-)

Ich habe ins Verzeichnis skripte/ ein Lua-Modul parse_wortliste.lua
eingestellt, welches eine Zeile der Wortliste in seine Felder zerlegen
und den Typ der Zeile bestimmen kann (welche Kombination von leeren und
belegten Feldern vorliegt).  Es gibt vierzehn! verschiedene Kombinationen.

Das Skript validate.lua prüft die Wortliste auf strukturelle Gültigkeit
(der Inhalt belegter Felder wird bisher fast nicht geprüft) und gibt am
Ende die Anzahl je Zeilentyp aus:

  texlua validate.lua < ../wortliste


Ziel der Übung ist nicht die kleine Statistik, die aus validate.lua
herausfällt, sondern alle Skripten auf Lua umzustellen.  Mit Hilfe von
parse_wortliste.lua sollte es einfach sein, die bisherigen Perl-Skripten
extract-*.pl zu ersetzen.  Was fehlt, ist nur noch die Ersetzung der
Spezialtrennungen.

Das Zerlegen der Zeilen ließe sich auch in Lua natürlich mit
Stringoperationen erledigen.  Ich habe LPEG verwendet, weil es ein
Anlass war, dort mal hineinzuschnuppern.  Außerdem sollten sich
dokumentierte LPEG-Muster hoffentlich deutlich leichter lesen lassen als
wilde Stringoperationen.

Als Ziel für die Skripten schlage ich texlua vor.  Daher habe ich die
dort enthaltenen Module, wie lpeg, nicht explizit per require eingebunden.

Was damit im Zusammenhang steht:  Derzeit entspricht die Sortierung der
Wortliste Werners Lokale-Einstellung.  Ich würde dies gern
lokaleunabhängig gestalten.  Unter Windows würde dies einiges
erleichtern.  Als Sortierung schlage ich daher Luas table.sort
angewendet auf Feld 1 vor (also einfach nach 8-Bit-Kodepunkten).  Man
könnte auch eine DIN- oder Telefonbuchsortierung basteln, ich sehe darin
jedoch keinen größeren Nutzen.

Was meint ihr?

Viele Grüße,
Stephan Hennig


Es folgt noch etwas technische Beschreibung zu parse_wortliste.lua und
validate.lua.  Der Kode ist zwar umfangreich dokumentiert, aber noch
nicht ganz vollständig, da ich hier momentan kein LuaDoc habe.
Insbesondere fehlt die Dokumentation der von parse() zurückgelieferten
Tabelle.

Hier nur die Typbeschreibung: Diese sieht etwas kryptisch aus, da ich
für die LPEG-Muster Variablennamen finden wollte, die anschaulich, aber
kurz sind.  Typbezeichnung bzw. Name der anschlagenden Mustervariablen
sind eine textuelle Repräsentation der jeweiligen Zeile.  So entspricht
die Länge eines Typs der Zahl der Felder in der betrachteten Zeile.  Ein
paar Beispiele

  Typ         Beschreibung

  ua          zwei belegte Felder
  uxtr        vier belegte Felder, Feld 2 ist leer.
  ux__xtrs    acht belegte Felder, Felder 2, 3, 4, 5 sind leer

Leere Felder werden durch 'x' oder '_' repräsentiert, wobei 'x'
lediglich aus Gründen der Übersichtlichkeit für die Felder 2 und 5
verwendet wird.  Für andere leere Felder wird '_' verwendet.  'a' und
'c' stehen in belegten Feldern 2 bzw. 5 für 'a'lle und 'c'aps.  't',
'r', und 's' stehen jeweils für die 't'raditionelle, 'r'eformierte und
's'chweizerische Rechtschreibung.  'u' im ersten Feld steht für
'u'ngetrennt.



Mehr Informationen über die Mailingliste Trennmuster