tokenizer, putzer, htmlEnt2Char -- drei Tools zur Korpusbearbeitung
===================================================================

tokenizer    -- ein Tokenizer mit Satzenderkennung (Optionen siehe "tokenizer -h")


putzer       -- entfernt aus dem Text �berfl�ssige Leerzeichen, Trennstriche
                (Optionen siehe "putzer -h")

htmlEnt2Char -- konvertiert HTML-Entities in Text (Optionen siehe "htmlEnt2Char -h")



Kompilierung und Installation (siehe auch Datei INSTALL):
 ./configure
 make && make install



Alle drei Tools sind Weiterentwicklungen von Hausaufgaben im Kurs
"Programmentwicklung in C" bei Max Hadersbeck. 



Zum "tokenizer":

Ziel war einen Tokenizer mit Satzenderkennung zu schreiben, der
schnell und universell ist, d.h. nicht abh�ngig von Trainingsdaten,
einer bestimmten Textsorte, aber nicht 100% perfekt.

Derzeit unterst�tzte Sprachen: Deutsch, Englisch und Russisch,
jeweils in ISO- und Windows-Codepage und UTF-8.

Die Teilprobleme und -aufgaben hier nur kurz skizziert:

1. Anpassung durch Optionen auf bestimmte Texteigenheiten:
 - Sprache und Zeichensatz
 - Worttrennung
 - Bedeutung des Zeilenumbruchs

2. Probleme und Strategien der Tokenisierung:
 - Bindestrichw�rter: werden als ein Token behandelt
 - Worttrennungen �ber Zeilengrenzen: werden (mit Option -c) konkateniert.
   Dabei kommt es zwangsweise zu Fehlern, falls Bindestrichw�rter von
   der Trennung �ber die Zeilengrenze betroffen sind. Ausnahmelexika
   w�rden den Tokenizer zu gro� machen; die Option -c ist deshalb mit
   Vorsicht zu w�hlen.

3. Satzenderkennung:
 - Problem prinzipiell nicht l�sbar ohne Lexikon
 - Affinit�t zum Tagging (-> Mikheev "Tagging sentence boundaries")
 - Methoden, die Kenntnis des ganzen Textes voraussetzen, nicht praktikabel
 - hier wurde ein regul�rer Ansatz gew�hlt, d.h. nur der n�chste Kontext
   einer m�glichen Satzendeinterpunktion wird in Betracht gezogen
 - Pfade die Satzendemarkierung enthalten vs.
 - Alternativpfade (Datum, Abk�rzungen etc.)
 - Besondere Sorgfalt in Abk�rzungsliste: nur Abk�rzungen,
   die h�ufig nicht am Satzende stehen (also nicht "usw.", "etc.")
 - Besonderheit im Deutschen: da Nomina gro�geschrieben werden, ist es sinnlos
   (ohne Lexikon), das auf die Interpunktion folgende gro�geschriebene
   Wort mit in Betracht zu ziehen (<-> Mikheev "Periods, capitalized words, etc.",
   mit Fallunterscheidung ob folgendes Wort Eigenname oder nicht)
 - Allerdings sind z.B. ein gro�geschriebener Artikel, Konjunktion oder Pr�position
   ein starkes Indiz f�r einen Satzanfang. Damit lassen sich Satzenden auch dann
   erkennen, wenn der Satzendepunkt gleichzeitig Abk�rzungspunkt ist.

4. Die Optionen teilen sich in zwei Gruppen:
 - Optionen, die vom Input abh�ngig sind: -L, -c, -C, -n, -N
   Diese sollten sehr sorgf�ltig gew�hlt werden
 - Optionen, die den Output betreffen: -S, -p, -P, -s, -W, -l, ...

5. Gro�/Klein-Konvertierung
 - als praktische Erg�nzung hinzugef�gt, mit Tabelle f�r jeweilige
   Sprache und Zeichensatz


F�r das Deutsche ist eine Datei "torture_de_l1.txt" beigef�gt, die die
oben besprochenen Probleme enth�lt. 

Tests mit annotierten Korpora (Brown, SZ) haben eine Fehlerrate der Satzenderkennung
von etwa 3% ergeben. 


Version history:

0.1 -- package with tokenizer, putzer, htmlEnt2Char

0.2 -- bug reported by js: when input contains long words or many following newlines
       tokenizer stops with "input buffer overflow". To avoid this use putzer as
       filter with newly introduced option -m!

0.3 -- optimization (inlines & macros): now about 10% faster

0.4 -- corrected some details in German EOS-detection, changed behaviour with option -sx:
       When a newline is recognized a space is printed on a separate line,
       instead of an empty line.

0.5 -- ':' now not considered as EOS-mark. Additions to German abbreviation list.

0.6 -- Added more German abbreviations, Roman numerals with point.
       Added rudimentary support for utf-8 in German.

0.7 -- Better EOS for English, thanks to Michaela Geierhos;
       rudimentary support for utf-8 in English

0.8 -- fixed a bug in the Russian part, which makes the tokenizer hanging

0.9 -- changes to German abbreviations
       rudimentary support for utf-8 in Russian

0.10 -- fixed bug raising a segfault for German language option
        short sequences in parenthesis are excluded from containit an end-of-sentence
        additions to German abbreviations

0.11 -- fixed a bug with options -C and -c.
        Introduced positive rules for German EOS : i.e. if a capitalized article, conjunction
        or prepositions follows an abbreviation or date, there should be an EOS.

0.12 -- better documentation (in English)
        Positive rules also for English: The text �The firm said it
        plans to sublease its current headquarters at 55 Water St. A
        spokesman declined to elaborate.� (Wall Street Journal) is now
        correctely splitted into two sentences

1.0  -- (almost) no changes
        GPL licensed now