Bavarian Archive for Speech Signals

BITS  LOGATOME  CORPUS



Perl code for the parser

#!/usr/bin/perl -w
use File::Basename;

open (IN,"$ARGV[0]") or die "konnte nicht geoeffnet werden";
open (IN2,"/homes/bits/Teilprojekte/TP8/Arbeitsmaterial/IMS_USel_Corpus_code_asampa_text.txt") or die "konnte nicht geoeffnet werden";
$name = "$ARGV[0]";
#$name =~ s/\/data\/data45\/BITS_DATA\/SEGMENTATION\/[\d\w\D\W]*\/BLOCK[0-9]{2}\/SES[0-9]{4}\///g;
$base = basename($name);

#print ("$base\n");

@datei=();
$fehler=0;
%ha=();
@line=();

while (<IN2>) {
chomp $_;
@line = split(/\;/,$_);
$ha{$line[0]}=$line[1];

}

print ("\n##################################################################\n");
print ("\nCheckliste von Prosodiefile: $base\n");
print ("\n##################################################################\n\n");

while (<IN>) {
chomp $_;
push (@datei,$_);
}

if ($base =~ /^LG/) {

@datei=();
while (<IN>) {
chomp $_;
$_ =~ s/\*/¶/g;
push (@datei,$_);
}

close IN;

# Fuer Logatome


if ($base =~ /^LG/) {
@n = split (/_/,$base);
@nm = split(/LG[0-9]{4}/,$n[0]);
$lognum = $nm[1];
foreach $it(keys %hash) {
# print ("$it ---------$hash{$it}\n");
if ($it == $lognum) {
$prlo=$hash{$it};
}
}
$fehler=0;
for ($i=0;$i<=$#datei;$i++) {





#Fuer die Diphone, die mit "*" anfangen
if ($prlo =~ /^¶/) {


# Fuer die Diphone, die mit einem "t|b|p|d|g|k|pf|ts|tS|Q" enden und mit einem "*" anfangen
if ($prlo =~ /(t|b|p|d|g|k|pf|ts|tS|Q)$/) {
$prlo1 = $prlo."_s";
$prlo2 = $prlo."_b";



if ($datei[$i] =~ /intervals \[2\]:/) {
$ge= $datei[$i+3];
$ge=~ s/text = //g;
$ge=~ s/"//g;
$ge=~ s/\s//g;
$ge2= $datei[$i+7];
$ge2=~ s/text = //g;
$ge2=~ s/"//g;
$ge2=~ s/\s//g;
print ("$ge2\n");
$ge3 = $datei[$i+11];
$ge3=~ s/text = //g;
$ge3=~ s/"//g;
$ge3=~ s/\s//g;
# print OUT ("$ge3\n");
$ges=$ge.$ge2;
$ges2=$ge.$ge3;

if (($datei[$i-1] !~ /text \= \"\<p\:\>\"/) || ($prlo1 !~ /$ges/ && $prlo2 !~ /$ges2/) || ($datei[$i+15] !~ /text \= \"\"/)) {
#print("\n\n");
print ("\nGesuchtes Diphon: $prlo \n");
unless($datei[$i-1] =~ /text \= \"\<p\:\>\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval vor dem Diphon\n");

}
unless($prlo1 =~ /$ges/ && $prlo2 =~ /$ges2/){
$fehler++;
print ("Ein Mismatch der Diphone ($prlo1-$prlo2) $ges-$ges2\n");
}
unless($datei[$i+15] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval nach dem Diphon\n");
}
}
}
}




#Fuer die Diphone, die mit einem "*" anfangen

elsif ($prlo !~ /(t|b|p|d|g|k|pf|ts|tS|Q)$/) {
if ($datei[$i] =~ /intervals \[2\]:/) {
$ge= $datei[$i+3];
$ge=~ s/text = //g;
$ge=~ s/"//g;
$ge=~ s/\s//g;
$ge2= $datei[$i+7];
$ge2=~ s/text = //g;
$ge2=~ s/"//g;
$ge2=~ s/\s//g;
$ges3= $ge.$ge2;

if (($datei[$i-1] !~ /text \= \"\<p\:\>\"/) || ($prlo !~ /$ges3/) || ($datei[$i+11] !~ /text \= \"\"/)) {
#print ("\n\n");
print ("\nGesuchtes Diphon: $prlo \n\n");
unless($datei[$i-1] =~ /text \= \"\<p\:\>\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval vor dem Diphon\n");
}

unless($prlo =~ /$ges3/){
$fehler++;
print ("Ein Mismatch der Diphone ($prlo) $ges\n");
}
unless($datei[$i+11] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval nach dem Diphon\n");
}
}
}
}
}


#Diphone = pf,ts,tS

elsif ($prlo =~ /^pf$|^ts$|^tS$/) {
# print("Diphone, die mit einem plosiv anfangen\n");
$num = length($prlo);
@as = split (//,$prlo);
if ($num == 2) {
$pr1 = $as[0];
$pr2 = $as[1];
# print("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO $pr1 $pr2\n");
}



$prlo1 = $pr1."_s".$pr2;
# print("$prlo1...........\n");
$prlo2 = $pr1."_b".$pr2;
if ($datei[$i] =~ /intervals \[2\]:/) {
$ge= $datei[$i+3];
$ge=~ s/text = //g;
$ge=~ s/"//g;
$ge=~ s/\s//g;
$ge2= $datei[$i+7];
$ge2=~ s/text = //g;
$ge2=~ s/"//g;
$ge2=~ s/\s//g;
# print("$ge2\n");
$ge3 = $datei[$i+11];
$ge3=~ s/text = //g;
$ge3=~ s/"//g;
$ge3=~ s/\s//g;
# print("$ge3\n");
$ges=$ge.$ge3;
# print("$ges\n");
$ges2=$ge2.$ge3;
# print("$ges2\n");


if (($datei[$i-1] !~ /text \= \"\"/) || ($prlo1 !~ /$ges/ && $prlo2 !~ /$ges2/) || ($datei[$i+15] !~ /text \= \"\"/)) {
print ("\n\n");
print ("Gesuchtes Diphon: $prlo \n\n");
unless($datei[$i-1] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval vor dem Diphon\n");
} elsif ($prlo1 =~ /$ges/ && $prlo2 =~ /$ges2/) {
# print OUT ("4Im $name alles richtig\n");
} else {
$fehler++;
print ("Ein Mismatch der Diphone ($prlo1-$prlo2) $ges-$ges2\n");
}

unless($datei[$i+15] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval nach dem Diphon\n");
}
}




}
}

# Fuer die Diphone, die mit keinem "*" anfangen und kein plosiv beinhalten

elsif ($prlo !~ /^¶/ && $prlo !~ /¶$/ && $prlo !~ /(t|b|p|d|g|k|pf|ts|tS|Q)$/ && $prlo !~ /^(t|b|p|d|g|k|pf|ts|tS|Q)/ ) {


# if(($datei[$i] =~ /text \= \"\"/) && ($datei[$i+12] =~ /text \= \"\"/) ){
if ($datei[$i] =~ /intervals \[2\]:/) {
# print("$datei[$i+12]\n");
$ge= $datei[$i+3];
$ge=~ s/text \= //g;
$ge=~ s/\"//g;
$ge=~ s/\s//g;

$ge2= $datei[$i+7];
# print("GE2 $ge2\n");
$ge2=~ s/text \= //g;
$ge2=~ s/\"//g;
$ge2=~ s/\s//g;
$ges3= $ge.$ge2;
# print("GE3 $ge3\n");


if (($datei[$i-1] !~ /text \= \"\"/) || ($prlo !~ /$ges3/) || ($datei[$i+11] !~ /text \= \"\"/)) {
#print ("\n\n");
print ("\nGesuchtes Diphon: $prlo \n\n");
unless($datei[$i-1] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval vor dem Diphon\n");
}
if ($prlo =~ /$ges3/) {
# print OUT (" 2 Im $name alles richtig\n");
} else {
$fehler++;
print ("Ein Mismatch der Diphone ($prlo) $ges3.\n");
}
unless($datei[$i+11] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval nach dem Diphon\n");
}
}
}
}
#Diphone, die mit einem plosiv anfangen

elsif ($prlo !~ /^¶/ && $prlo !~ /¶$/ && $prlo =~ /^(t|b|p|d|g|k|pf|ts|tS)/ && $prlo !~ /(t|b|p|d|g|k|pf|ts|tS)$/ ) {
# print("Diphone, die mit einem plosiv anfangen\n");
$num = length($prlo);
@as = split (//,$prlo);
if ($num == 2) {
$pr1 = $as[0];
$pr2 = $as[1];
# print("AAAAAAAAAAAAAAAAAAAA $pr1 $pr2\n");
}
if ($num == 4) {
$pr1 = $as[0].$as[1];
$pr2 = $as[2].$as[3];
}
if ($num == 3) {
if ($as[0] =~ /b|d|g|k/) {
$pr1 = $as[0];
$pr2 = $as[1].$as[2];
} else {
if ($as[1] =~ /f|s|S/ ) {
$pr1= $as[0].$as[1];
$pr2= $as[2];
} elsif ($as[2] =~ /\~|\:/ ) {
$pr1=$as[0];
$pr2=$as[1].$as[2];
} else {
$pr1=$as[0];
$pr2=$as[1].$as[2];
}
}
}


$prlo1 = $pr1."_s".$pr2;
# print("$prlo1...........\n");
$prlo2 = $pr1."_b".$pr2;
if ($datei[$i] =~ /intervals \[2\]:/) {
$ge= $datei[$i+3];
$ge=~ s/text = //g;
$ge=~ s/"//g;
$ge=~ s/\s//g;
$ge2= $datei[$i+7];
$ge2=~ s/text = //g;
$ge2=~ s/"//g;
$ge2=~ s/\s//g;
# print("$ge2\n");
$ge3 = $datei[$i+11];
$ge3=~ s/text = //g;
$ge3=~ s/"//g;
$ge3=~ s/\s//g;
# print("$ge3\n");
$ges=$ge.$ge3;

$ges2=$ge2.$ge3;



if (($datei[$i-1] !~ /text \= \"\"/) || ($prlo1 !~ /$ges/ && $prlo2 !~ /$ges2/) || ($datei[$i+15] !~ /text \= \"\"/)) {
print ("\n\n");
print ("Gesuchtes Diphon: $prlo \n\n");
unless($datei[$i-1] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval vor dem Diphon\n");
}


if ($prlo1 =~ /$ges/ && $prlo2 =~ /$ges2/) {
# print OUT ("4Im $name alles richtig\n");
} else {
$fehler++;
print ("Ein Mismatch der Diphone ($prlo1-$prlo2) $ges-$ges2\n");
}

unless($datei[$i+15] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval nach dem Diphon\n");
}

}



}
}

#Diphone, die mit einem plosiv enden

elsif ($prlo !~ /^¶/ && $prlo =~ /(t|b|p|d|g|k|pf|ts|tS)$/ && $prlo !~ /^(t|b|p|d|g|k|pf|ts|tS)/ ) {

$prlo1 = $prlo."_s";
$prlo2 = $prlo."_b";
if ($datei[$i] =~ /intervals \[2\]:/) {
$ge= $datei[$i+3];
$ge=~ s/text = //g;
$ge=~ s/"//g;
$ge=~ s/\s//g;
$ge2= $datei[$i+7];
$ge2=~ s/text = //g;
$ge2=~ s/"//g;
$ge2=~ s/\s//g;
# print("$ge2\n");
$ge3 = $datei[$i+11];
$ge3=~ s/text = //g;
$ge3=~ s/"//g;
$ge3=~ s/\s//g;
# print("$ge3\n");
$ges=$ge.$ge2;
$ges2=$ge.$ge3;

if (($datei[$i-1] !~ /text \= \"\"/) || ($prlo1 !~ /$ges/ && $prlo2 !~ /$ges2/ ) || ($datei[$i+15] !~ /text \= \"\"/)) {
#print ("\n\n");
print ("\nGesuchtes Diphon: $prlo \n\n");
unless($datei[$i-1] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval vor dem Diphon\n");
}


if ($prlo1 =~ /$ges/ && $prlo2 =~ /$ges2/ ) {
# print OUT ("1Im $name alles richtig\n");
} else {
$fehler++;
print ("Ein Mismatch der Diphone ($prlo1-$prlo2) $ges-$ges2\n");
}

unless($datei[$i+15] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval nach dem Diphon\n");
}
}

}
}

#Diphone, die mit einem plosiv anfangen und enden

elsif ($prlo !~ /^¶/ && $prlo !~ /¶$/ && $prlo =~ /(t|b|p|d|g|k|pf|ts|tS)$/ && $prlo =~ /^(t|b|p|d|g|k|pf|ts|tS)/ ) {
$num = length($prlo);
@as = split (//,$prlo);
if ($num == 2) {
# print OUT ("$prlo\n");
$pr1 = $as[0];
$pr2 = $as[1];
}
if ($num == 4) {
$pr1 = $as[0].$as[1];
$pr2 = $as[2].$as[3];
}
if ($num == 3) {
if ($as[0] =~ /b|d|g|k/) {
$pr1 = $as[0];
$pr2 = $as[1].$as[2];
} else {
if ($as[1] =~ /f|s|S/) {
$pr1= $as[0].$as[1];
$pr2= $as[2];
} else {
$pr1=$as[0];
$pr2=$as[1].$as[2];
}
}
}

$prlo1 = $pr1."_s".$pr2."_s";
# print("$prlo1...........\n");
$prlo2 = $pr1."_b".$pr2."_b" ;

if ($datei[$i] =~ /intervals \[2\]:/) {
$ge= $datei[$i+3];
$ge=~ s/text = //g;
$ge=~ s/"//g;
$ge=~ s/\s//g;
# print OUT ("$ge\n");
$ge2= $datei[$i+7];
$ge2=~ s/text = //g;
$ge2=~ s/"//g;
$ge2=~ s/\s//g;
# print OUT ("$ge2\n");
$ge3 = $datei[$i+11];
$ge3=~ s/text = //g;
$ge3=~ s/"//g;
$ge3=~ s/\s//g;
# print OUT ("$ge3\n");
$ge4 = $datei[$i+15];
$ge4=~ s/text = //g;
$ge4=~ s/"//g;
$ge4=~ s/\s//g;
$ges=$ge.$ge3;
$ges2=$ge2.$ge4;
# print OUT ("$ges\n");
# print OUT ("$ges2\n");


if (($datei[$i-1] !~ /text \= \"\"/) || ($prlo1 !~ /$ges/ && $prlo2 !~ /$ges2/ ) || ($datei[$i+16] !~ /intervals \[6\]:/ && $datei[$i+19] !~ /text \= \"\"/)) {
#print ("\n\n");
print ("\nGesuchtes Diphon: $prlo \n\n");


unless($datei[$i-1] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval vor dem Diphon\n");
}



if ($prlo1 =~ /$ges/ && $prlo2 =~ /$ges2/ ) {
# print OUT ("5Im $name alles richtig \n");
} else {
$fehler++;
print ("Ein Mismatch der Diphone ($prlo1-$prlo2) $ges-$ges2\n");
}

unless($datei[$i+16] =~ /intervals \[6\]:/ && $datei[$i+19] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval nach dem Diphon\n");
}
}

}
}

#Fur Diphone die mit einem "*" enden und kein Plosiv beinhalten
elsif ($prlo =~ /¶$/ && $prlo !~ /^(t|b|p|d|g|k|pf|ts|tS)/ ) {

if ($datei[$i] =~ /intervals \[2\]:/) {
$ge= $datei[$i+3];
$ge=~ s/text = //g;
$ge=~ s/"//g;
$ge=~ s/\s//g;
$ge2= $datei[$i+7];
$ge2=~ s/text = //g;
$ge2=~ s/"//g;
$ge2=~ s/\s//g;
$ges3= $ge.$ge2;


if (($datei[$i-1] !~ /text \= \"\"/) || ($prlo !~ /$ges3/) || ( $datei[$i+11] !~ /text \= \"\<p\:\>\"/)) {
print ("\n\n");
print ("Gesuchtes Diphon: $prlo \n\n");
unless($datei[$i-1] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval vor dem Diphon\n");
}
if ($prlo =~ /$ges3/) {
# print OUT ("7c Im $name alles richtig\n");
} else {
$fehler++;
print ("Ein Mismatch der Diphone ($prlo) $ges\n");
}

unless( $datei[$i+11] =~ /text \= \"\<p\:\>\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval nach dem Diphon\n");
}
}
}
}
#Fur Diphone die mit einem "*" enden und ein Plosiv beinhalten

elsif ($prlo =~ /¶$/ && $prlo =~ /^(t|b|p|d|g|k|pf|ts|tS)/ ) {
$num = length($prlo);
@as = split (//,$prlo);
if ($num == 2) {
$pr1 = $as[0];
$pr2 = $as[1];
}
if ($num == 3) {
$pr1 = $as[0].$as[1];
$pr2 = $as[2];
}
$prlo1 = $pr1."_s".$pr2;
# print("$prlo1...........\n");
$prlo2 = $pr1."_b".$pr2;

if ($datei[$i] =~ /intervals \[2\]:/) {
$ge= $datei[$i+3];
$ge=~ s/text = //g;
$ge=~ s/"//g;
$ge=~ s/\s//g;
$ge2= $datei[$i+7];
$ge2=~ s/text = //g;
$ge2=~ s/"//g;
$ge2=~ s/\s//g;
# print("$ge2\n");
$ge3 = $datei[$i+11];
$ge3=~ s/text = //g;
$ge3=~ s/"//g;
$ge3=~ s/\s//g;
# print("$ge3\n");
$ges=$ge.$ge3;
$ges2=$ge2.$ge3;


if (($datei[$i-1] !~ /text \= \"\"/) || ($prlo1 !~ /$ges/ && $prlo2 !~ /$ges2/) || ($datei[$i+15] !~ /text \= \"\<p\:\>\"/)) {
# print ("\n\n");
print ("\nGesuchtes Diphon: $prlo \n\n");


unless($datei[$i-1] =~ /text \= \"\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval vor dem Diphon\n");
}




if ( $prlo1 =~ /$ges/ && $prlo2 =~ /$ges2/) {
# print OUT ("6Im $name alles richtig\n");
} else {
$fehler++;
print ("Ein Mismatch der Diphone ($prlo1-$prlo2) $ges-$ges2\n");
}



unless($datei[$i+15] =~ /text \= \"\<p\:\>\"/){
$fehler++;
print ("Es gibt ein Problem mit dem Interval nach dem Diphon\n");
}
}
}
}
}
}

@saetze= ('Man bist Du gut!','Super gemacht!', 'Alles Richtig! Wie wäre es mit einem weiteren File?', 'So gute Arbeit und so wenig bezahlt!','Ich bin eine Maschine, aber ich bin stolz auf Dich!!!','So schnell, so gut?! Wie ist es nur möglich?!!', 'Weiter so!!','Alles richtig, aber geht es auch ein Bisschen schneller?','Nur eine Frau kann so gut arbeiten!!','Alles richtig!!Jetzt hast Du Dir eine Pause verdient!!','Du solltest jetzt lieber zu Tania gehen!','Eh, dieses File, dieses File ... hast Du echt super gemacht!!!','Gratulation! Du hast das schwierigste File segmentiert!Geh zu Tania und hol Dir Deine Belohnung!!','Mein Gott!Du bist aber super!','Ein Traum! Alles richtig!','Klar!!! Von Dir haette ich auch nix anderes erwartet!Einfach super!' );
if ($fehler == 0) {
$elt= $saetze[rand @saetze];
print("$elt\n\n");



$value = 0;
} else {

$value = -1;
}

exit $value;
}