Translating human language with computer grammar

1,584 views
1,529 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,584
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

×