Anmerkung: Ein überlanger regulärer Ausdruck wurde für die Reproduktion umgebrochen; der Umbruch darf im ausführbaren Code nicht vorkommen.
#!/bin/sh ## trlfilter
## Autor: D.Steinbrecher ## Letzte Aenderung: 07.08.1995
## Kurzbeschreibung: ## ## Standardabbildung von Corpus-Orthographie auf Lexikon-Orthographie ## für wortgraphenorientierte Entwicklungen in VERBMOBIL.
## Entwicklung: ## ## 1. Prototyp fuer die Spezifikation der Anforderungen an einen ## standardisierten Transliterationsfilter fuer Gesamt-VERBMOBIL. ## Hierzu wurde Filter-Code von den Partnern freundlicherweise ## zur Verfügung gestellt. Für die Entwicklung des Filters ## wurden Filterprogramme folgender Partner analysiert: ## U Bielefeld, (Gibbon, Steinbrecher) ## TU Braunschweig (Lehning) ## Daimler Benz AG (Fetter) ## Philips (Kneser) ## Siemens (Tropf, Block) ## ## 2. Veraenderung des Prototypen laut Spezifikation und Anregungen ## der VM-Partner.
## Usage: ## trlfilter [-aghiprstuvw] InPath [OutPath] ## ## -a : angle brackets enclosing hesitation particles are not removed ## -g : no generalization of noise, interruptions and breaks (-> Philips) ## -h : header for output files ## -i : removes turnID ## -p : punctuation is not removed ## -r : annotates ambiguous reduced wordforms ## -s : spelling sequences are replaced with <SPELL> ## -t : removes turns containing: ## 1) <;T> technical break ## 2) /- interrupted speech ## 3) +/ /+ restart ## 4) = word fragment ## -u : removes interrupted words (X_ _X constructions) ## -w : interrupted words are joined
## trlfilter bearbeitet alle Dateien mit der Extension TRL oder trl in dem ## Verzeichnis InPath und erzeugt fuer jede Datei eine Ausgabedatei <datei>.fv. ## Ist der Parameter -t gesetzt, wird zusaetzlich eine Datei <datei>.dt ## angelegt, in der evtl. geloeschte Turns gesammelt sind. ## Die Ausgabedateien werden in das Verzeichnis OutPath geschrieben.
##-----------------------------------------------
## Allgemeine Variablendefinitionen
VERSION='trlfilter Version 1.0, 07 August 1995. D. Steinbrecher, D. Gibbon, U Bielefeld (VERBMOBIL standard transliteration to word graph symbol filter)'
USAGE='Usage: trlfilter [-aghiprstuvw] InPath [OutPath]'
HELP_PARAMETER=
TEMP=trlbuffer
OUT_DEFAULT=OUTFILTER
##-----------------------------------------------
## Allgemeine `help'-Defaults
if [
# -lt 1 -o
1 = h -o
BUFFER in
a) A_PARAMETER=
BUFFER;;
h) H_PARAMETER=
BUFFER;;
p) P_PARAMETER=
BUFFER;;
s) S_PARAMETER=
BUFFER;;
u) U_PARAMETER=
BUFFER;;
w) W_PARAMETER=
BUFFER;;
esac
done
shift `expr
HELP_PARAMETER ]
then
echo VERSION
echo USAGE
echo Öption Description'';
echo '' [-a] Angle brackets enclosing hesitation particles '';
echo äre not removed'';
echo '' [-g] No generalization of noise, interruptions and breaks'';
echo '' [-h] Header (including IN_DIR, OUT_DIR, FILENAME, flags)'';
echo '' [-i] Removes turnID'';
echo '' [-p] Punctuation is not removed'';
echo '' [-r] Annotates ambiguous reduced wordforms'';
echo '' [-s] Converts spelling sequences to <SPELL>'';
echo '' [-t] Removes turns containing technical breaks, '';
echo ïnterrupted speech, word fragments, restarts'';
echo '' [-u] Removes interrupted words (X_ _X constructions)'';
echo '' [-v] Version'';
echo '' [-w] Interrupted words are joined'';
echo Öther flags: Help message'';
echo ; echo ''(Refer to man page for details)ëxit
fi
if [
VERSION
exit
fi
##-----------------------------------------------
IN_DIR=
2
##-----------------------------------------------
## Test des Eingabeparameters
if [
# -gt 2 ]
then
echo Wrong number of command line parameters.
echo
IN_DIR ]
then
echo Input parameter
USAGE
exit
fi
##-----------------------------------------------
## Test des Ausgabeparameters ## ggf. Erstellung eines Default-Verzeichnisses
if [
OUT_DEFAULT
OUT_DIR=
OUT_DIR ]
then
echo Creating new output directory
OUT_DIR
fi
##-----------------------------------------------
## Rekursive Abarbeitung fuer jede Datei mit der Extension TRL oder trl ## Anm.: Die Schleife endet ganz am Ende der Datei
for datei in `ls
datei`
echo
NEWFILE ## wenn es laenger dauert ...
##-----------------------------------------------
## removes global comments ## removes lineBreaks within a turn
gawk '/^[ ]*;/ next; /^[A-Z][A-Z][A-Z0-9][0-9][0-9][0-9]: / { printf( n { printf('' END printf(n''); ' datei > TEMP.0
##-----------------------------------------------
## Ableitung einer neuen TurnID aus Dateinamen und alter TurnID
if [
TEMP.0 >
TEMP.0 >
U_PARAMETER ]
then
gawk '/^
TEMP.1 >
W_PARAMETER ]
then
gawk '/^
TEMP.1 >
TEMP.1 >
G_PARAMETER ]
then
## Bearbeitung von techn. Abbruechen, Abbruechen, Wiederaufnahmen und
## Wortfragmenten: <;T>, /-, +/ /+, =
## -t: on Loeschen entsprechender Turns
## -t: off Entfernen von Abbruechen, Wiederaufnahmen
if [
TEMP.2 |
gawk '
# Entfernen nichtartikulator. Graeusche
gsub(/<#[^>]*>/,);
# Entfernen artikulator. Graeusche
gsub(/<[A-Z][^>]+>/,);
print;
' >
/ print; print; next;
/[^ ]*<;T>[^ ]*/ || /[^ ]*-/ || /[^ ]*/ ||
/[^ ]+/ || /[^ ]+=/
printf(''
END printf(n''); '
TEMP._dt
else
# Entfernen von Neologismen (*)
gawk ' for (i=1; i<=NF; i++)
if (
/)
printf(''
printf(n'');
'
TEMP.3
fi
else
gawk ' # Generalisiert werden
gsub(/<[A-Z][^>]+>/,<<NIB>''); # nonverbale Produktion
gsub(/<#[^>]*>/,<<NIB>''); # nichtartikulator. Graeusch
gsub(/[^ ]*<;T>[^ ]*/,<<UNK>''); # techn. Abbruch
gsub(/[^ ]+/,<<UNK>''); # Unwoerter und Neologismen
gsub(/[^ ]+=[^ ]*/,<<UNK>''); # Wortfragmente
print;
'
TEMP.3
fi
##-----------------------------------------------
## Fuer dan Fall das -g -t nicht gesetzt war: ## Entfernen von Abbruechen und Wiederaufnahmen
gawk '
# Entfernen von Abbruechen (/-)
gsub(/-/,);
# Entfernen von Wiederaufnahmen (+/ /+)
gsub(//,);
gsub(//,);
print;
'
TEMP.4
##-----------------------------------------------
## Entfernung der Kennzeichnung von Ueberlappung von Redebeitraegen (@ @) ## Entfernung der Kennzeichnung fuer Gleichzeitigkeit von Schallereignissen <: :> ## Entfernen von Notationen fuer Aussprachevarianten <! > ## Entfernen lokaler Kommentare <; > ## Entfernen der Markierung fuer Schwerverstaendlich und Unverstaendliches ## Entfernen von <A>, <P>, <Z>
gawk '
gsub(/
/,);
gsub(/[
]/,);
gsub(/<:/,); # Gleichzeitigkeit
gsub(/:>/,);
gsub(/<\![0-9] [^><]*>/, ); # Aussprachevarianten
gsub(/<;[^><]*>/, ); # lokale Kommentare
gsub(/<
gsub(/
gsub(/<[APZ]>/,); # <A>, <P>, <Z>
print;
'
TEMP.5
##-----------------------------------------------
## Bearbeitung von Haesitationen
## <äh>, <ähm>, <hm>, <häs>
if [
TEMP.5
TEMP.5 >
P_PARAMETER ]
then
gawk 'gsub(/·/,. '');
gsub(/,/,'' , '');
gsub(//,? '');
print
'
TEMP.7
else
gawk 'gsub(/[·,]/,);print'
TEMP.7
fi
##-----------------------------------------------
## Wiederherstellung reduzierter Wortformen ## -r: on Ambige reduzierte Wortformen werden markiert: ## 'm -> einemVdem ; 'n -> einenVden ## -r: off 'm -> einem ; 'n -> einen
gawk '
gsub(/^/,);
gsub(/
/,);
print;
'
TEMP.8
if [
TEMP.8 >
TEMP.8 >
A P P --> A-P-
A doppel P --> A-doppel-
A zwei P --> A-zwei-
U S A-Reise --> U-S-
[Ä-Z]) handelt.
## Die Fkt. 'needsahyphen' testet, ob es sich um eine Sequenz handelt,
## Sie in einer Buchstabiersequenz auftreten darf (z.B. Umlaut, doppel, zwei)
## Fuer diese Folgen liefert die Fkt. ein 'true'.
## (Moegliche andere Strings koennen durch Erweiterung der `match'-Zeile
## in der Funktion 'needsahyphen' ebenfalls bearbeitet werden.)
## (b) Die Hauptprozedur testet, ob die FKt. 'needsahyphen' fuer zwei
## aufeinanderfolgenede Woerter den Wert 'true' liefert. Ist dies der
## Fall, werden die Woerter durch ein '-' miteinander verbunden.
gawk ' n = split(
TEMP.10
##-----------------------------------------------
## Ersetzung von Buchstabiersequenzen durch <SPELL>
if [
TEMP.10 >
TEMP.10
TEMP.11>
TEMP.12 >
H_PARAMETER ]
then
if [
OUT_DIR/
IN_DIR >>
NEWFILE.dt
echo '## 'Ausgabepfad:
OUT_DIR/
NEWFILE >>
NEWFILE.dt
echo '## 'Bearbeitungsdatum: `date` >>
NEWFILE.dt
echo '##' >>
NEWFILE.dt
echo '##' Liste geloeschter Turns>>
NEWFILE.dt
echo '##' >>
NEWFILE.dt
echo '##' >
NEWFILE.fv
echo '## 'Eingabepfad:
OUT_DIR/
OUT_DIR >>
NEWFILE.fv
echo '## 'Bearbeitete Datei: NEWFILE >> OUT_DIR/
OUT_DIR/
OUT_DIR/
OUT_DIR/
A_PARAMETER\
H_PARAMETER\
P_PARAMETER\
S_PARAMETER\
U_PARAMETER\
OUT_DIR/
OUT_DIR/
OUT_DIR/
IN_DIR >>
NEWFILE.fv
echo '## 'Ausgabepfad:
OUT_DIR/
NEWFILE >>
NEWFILE.fv
echo '## 'Datum: `date` >>
NEWFILE.fv
echo '##' >>
NEWFILE.fv
echo '##' Bearbeitete Transliterationsdatei>>
NEWFILE.fv
echo '##' Verwendete Parameter:\
G_PARAMETER\
I_PARAMETER\
R_PARAMETER\
T_PARAMETER\
W_PARAMETER\
>>
NEWFILE.fv
echo '##' >>
NEWFILE.fv
fi
fi
##-----------------------------------------------
## Erzeugen der Ausgabedateien <datei>.fv und <datei>.dt ## Entfernen ueberfluessiger Leerzeilen: ## Pro Zeile ein Turn, Turns sind durch eine Leerzeile voneinander getrennt.
if [
T_PARAMETER ]
then
gawk '/^
TEMP._dt >>
NEWFILE.dt
gawk '/^
TEMP.13 >>
NEWFILE.fv
else
gawk '/^
TEMP.13 >>
NEWFILE.fv
fi
else
if [
/ next;
/^./ { printf( n
{ printf(''
END printf(n''); '
OUT_DIR/
/ next;
/^./ { printf( n
{ printf(''
END printf(n''); '
OUT_DIR/
/ next;
/^./ { printf( n
{ printf(''
END printf(n''); '
OUT_DIR/
TEMP*
##-----------------------------------------------
## Ende des Transliterationsverarbeitungszyklus
done
##----------------ENDE DER DATEI----------------------