Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Translating human language with computer grammar

1,700 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Translating human language with computer grammar

  1. 1. Translating human language with computer grammar
  2. 2. German — English
  3. 3. __DATA__ Mein Name ist Andreas.
  4. 4. __DATA__ Mein Name ist Andreas. My name is Andrew.
  5. 5. my %dictionary = (   Mein    => 'My',   Name    => 'name',   ist     => 'is',   Andreas => 'Andrew', );
  6. 6. my %dictionary = (   Mein    => 'My',   Name    => 'name',   ist     => 'is',   Andreas => 'Andrew', ); $text =~ s{(w+)}{$dictionary{$1}}ge;
  7. 7. sub Mein    {return quot;My $_[0]quot;;    } sub Name    {return quot;name $_[0]quot;;  } sub ist     {return quot;is $_[0]quot;;    } sub Andreas {return quot;Andrew $_[0]quot;;}
  8. 8. sub Mein    {return quot;My $_[0]quot;;    } sub Name    {return quot;name $_[0]quot;;  } sub ist     {return quot;is $_[0]quot;;    } sub Andreas {return quot;Andrew $_[0]quot;;} say eval $text;
  9. 9. 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'}  } }
  10. 10. Grammar
  11. 11. forefer Grammar
  12. 12. sentence  : word(s) fullstop eofile
  13. 13. sentence  : word(s) fullstop eofile word      : /w+/ fullstop  : '.'  eofile    : /^Z/
  14. 14. sentence  : word(s) fullstop eofile word      : /w+/ {             print ::translate($item[1])      } fullstop  : '.'  eofile    : /^Z/
  15. 15. my $text = <DATA>; $parser =      new Parse::RecDescent ($grammar); $parser‐>sentence($text);
  16. 16. 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/
  17. 17. Mein Name ist Andreas. Sein Name ist Andreas. Name ist Andreas. Der Name ist Andreas.
  18. 18. Mein Name ist Andreas. My name is Andrew. Sein Name ist Andreas. Name ist Andreas. Der Name ist Andreas.
  19. 19. Mein Name ist Andreas. My name is Andrew. Sein Name ist Andreas. His name is Andrew. Name ist Andreas. Der Name ist Andreas.
  20. 20. 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.
  21. 21. 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.
  22. 22. 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.
  23. 23. 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.
  24. 24. Perl 5 Perl 6 Ruby Parrot Python PHP Java C++
  25. 25. Perl 5 Perl 5 Perl 6 Perl 6 Ruby Ruby Parrot Python Python PHP PHP Java Java C++ C++
  26. 26. Mein Name ist Andreas. $VAR1 = {           'object'     => 'Andreas',           'person'     => 3,           'subject'    => 'Name',           'possession' => 'Mein',           'action'     => 'be'         };
  27. 27. Ich heiße Andreas. $VAR1 = {           'subject'    => 'Andreas',           'object'     => 'Andreas',           'person'     => 1,           'action'     => 'name'         };
  28. 28. say ucfirst ( ($::grammar{possession}         ? translate($::grammar{possession}) . ' '         : ''      )     . translate($::grammar{subject}) . ' '      . conjugation(          $::grammar{action},          $::grammar{person}        ) . ' '      . translate($::grammar{object}) . '.'  );
  29. 29. Mein Name ist Andreas. Ich heiße Andreas.
  30. 30. Mein Name ist Andreas. My name is Andrew. Ich heiße Andreas.
  31. 31. Mein Name ist Andreas. My name is Andrew. Ich heiße Andreas.     I am Andrew.
  32. 32. 640 pages!
  33. 33. __END__ Andrew Shitov http://andy.sh

×