Translating human language with computer grammar

Preview:

DESCRIPTION

 

Citation preview

Translatinghuman language

with computer grammar

German — English

__DATA__

Mein Name ist Andreas.

__DATA__

Mein Name ist Andreas. My name is Andrew.

my %dictionary = (

  Mein    => 'My',

  Name    => 'name',

  ist     => 'is',

  Andreas => 'Andrew',

);

my %dictionary = (

  Mein    => 'My',

  Name    => 'name',

  ist     => 'is',

  Andreas => 'Andrew',

);

$text =~ s{(\w+)}{$dictionary{$1}}ge;

sub Mein    {return "My $_[0]";    }

sub Name    {return "name $_[0]";  }

sub ist     {return "is $_[0]";    }

sub Andreas {return "Andrew $_[0]";}

sub Mein    {return "My $_[0]";    }

sub Name    {return "name $_[0]";  }

sub ist     {return "is $_[0]";    }

sub Andreas {return "Andrew $_[0]";}

say eval $text;

sub translate {

  given ($_[0]) {

    when ('Der')      {return 'the'   }

    when ('Mein')     {return 'my'    }

    when ('Sein')     {return 'his'   }

    when ('Name')     {return 'name'  }

    when ('ist')      {return 'is'    }

    when ('Andreas')  {return 'Andrew'}

  }

}

Grammar

Grammarforefer

sentence  : word(s) fullstop eofile

sentence  : word(s) fullstop eofile

word      : /\w+/

fullstop  : '.' 

eofile    : /^\Z/

sentence  : word(s) fullstop eofile

word      : /\w+/ {

            print ::translate($item[1])

          }

fullstop  : '.' 

eofile    : /^\Z/

my $text = <DATA>;

$parser = 

    new Parse::RecDescent ($grammar);

$parser‐>sentence($text);

sentence  : statement  eofile       

statement : subject verb object fullstop

subject   : adjective noun      

          | article noun         

          | noun             

object    : noun

noun      : 'Name'

         | 'Andreas'

adjective : 'Mein'

          | 'Sein'

verb      : 'ist'

article   : 'Die'

          | 'Der'

          | 'Das'

fullstop  : '.'

eofile    : /^\Z/

Mein Name ist Andreas.

Sein Name ist Andreas.

Name ist Andreas.

Der Name ist Andreas.

Mein Name ist Andreas. My name is Andrew.

Sein Name ist Andreas.

Name ist Andreas.

Der Name ist Andreas.

Mein Name ist Andreas. My name is Andrew.

Sein Name ist Andreas. His name is Andrew.

Name ist Andreas.

Der Name ist Andreas.

Mein Name ist Andreas. My name is Andrew.

Sein Name ist Andreas. His name is Andrew.

Name ist Andreas.      Name is Andrew.

Der Name ist Andreas.

Mein Name ist Andreas. My name is Andrew.

Sein Name ist Andreas. His name is Andrew.

Name ist Andreas.      Name is Andrew.

Der Name ist Andreas.  The name is Andrew.

Mein Name ist Andreas. My name is Andrew.

Sein Name ist Andreas. His name is Andrew.

Name ist Andreas.      Name is Andrew.

Der Name ist Andreas.  The name is Andrew.

Ich heiße Andreas.

Mein Name ist Andreas. My name is Andrew.

Sein Name ist Andreas. His name is Andrew.

Name ist Andreas.      Name is Andrew.

Der Name ist Andreas.  The name is Andrew.

Ich heiße Andreas.     I am called Andrew.

Perl 5Perl 6RubyPythonPHPJavaC++

Parrot

Perl 5Perl 6RubyPythonPHPJavaC++

Parrot

Perl 5Perl 6RubyPythonPHPJavaC++

Mein Name ist Andreas.

$VAR1 = {

          'object'     => 'Andreas',

          'person'     => 3,

          'subject'    => 'Name',

          'possession' => 'Mein',

          'action'     => 'be'

        };

Ich heiße Andreas.

$VAR1 = {

          'subject'    => 'Andreas',

          'object'     => 'Andreas',

          'person'     => 1,

          'action'     => 'name'

        };

say ucfirst (

($::grammar{possession}

        ? translate($::grammar{possession}) . ' '

        : ''

     )

    . translate($::grammar{subject}) . ' ' 

    . conjugation(

         $::grammar{action},

         $::grammar{person}

       ) . ' '

     . translate($::grammar{object}) . '.' 

);

Mein Name ist Andreas.

Ich heiße Andreas.

Mein Name ist Andreas. My name is Andrew.

Ich heiße Andreas.

Mein Name ist Andreas. My name is Andrew.

Ich heiße Andreas.     I am Andrew.

640 pages!

__END__

Andrew Shitov

http://andy.sh

Recommended