translating human language with computer grammar

37
Translating human language with computer grammar

Upload: andysh

Post on 18-Nov-2014

2.348 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Translating human language with computer grammar

Translatinghuman language

with computer grammar

Page 2: Translating human language with computer grammar
Page 3: Translating human language with computer grammar
Page 4: Translating human language with computer grammar
Page 5: Translating human language with computer grammar

German — English

Page 6: Translating human language with computer grammar

__DATA__

Mein Name ist Andreas.

Page 7: Translating human language with computer grammar

__DATA__

Mein Name ist Andreas. My name is Andrew.

Page 8: Translating human language with computer grammar

my %dictionary = (

  Mein    => 'My',

  Name    => 'name',

  ist     => 'is',

  Andreas => 'Andrew',

);

Page 9: Translating human language with computer grammar

my %dictionary = (

  Mein    => 'My',

  Name    => 'name',

  ist     => 'is',

  Andreas => 'Andrew',

);

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

Page 10: Translating human language with computer grammar

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

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

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

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

Page 11: Translating human language with computer grammar

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

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

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

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

say eval $text;

Page 12: Translating human language with computer grammar

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'}

  }

}

Page 13: Translating human language with computer grammar

Grammar

Page 14: Translating human language with computer grammar

Grammarforefer

Page 15: Translating human language with computer grammar

sentence  : word(s) fullstop eofile

Page 16: Translating human language with computer grammar

sentence  : word(s) fullstop eofile

word      : /\w+/

fullstop  : '.' 

eofile    : /^\Z/

Page 17: Translating human language with computer grammar

sentence  : word(s) fullstop eofile

word      : /\w+/ {

            print ::translate($item[1])

          }

fullstop  : '.' 

eofile    : /^\Z/

Page 18: Translating human language with computer grammar

my $text = <DATA>;

$parser = 

    new Parse::RecDescent ($grammar);

$parser‐>sentence($text);

Page 19: Translating human language with computer grammar

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/

Page 20: Translating human language with computer grammar

Mein Name ist Andreas.

Sein Name ist Andreas.

Name ist Andreas.

Der Name ist Andreas.

Page 21: Translating human language with computer grammar

Mein Name ist Andreas. My name is Andrew.

Sein Name ist Andreas.

Name ist Andreas.

Der Name ist Andreas.

Page 22: Translating human language with computer grammar

Mein Name ist Andreas. My name is Andrew.

Sein Name ist Andreas. His name is Andrew.

Name ist Andreas.

Der Name ist Andreas.

Page 23: Translating human language with computer grammar

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.

Page 24: Translating human language with computer grammar

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.

Page 25: Translating human language with computer grammar

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.

Page 26: Translating human language with computer grammar

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.

Page 27: Translating human language with computer grammar

Perl 5Perl 6RubyPythonPHPJavaC++

Parrot

Page 28: Translating human language with computer grammar

Perl 5Perl 6RubyPythonPHPJavaC++

Parrot

Perl 5Perl 6RubyPythonPHPJavaC++

Page 29: Translating human language with computer grammar

Mein Name ist Andreas.

$VAR1 = {

          'object'     => 'Andreas',

          'person'     => 3,

          'subject'    => 'Name',

          'possession' => 'Mein',

          'action'     => 'be'

        };

Page 30: Translating human language with computer grammar

Ich heiße Andreas.

$VAR1 = {

          'subject'    => 'Andreas',

          'object'     => 'Andreas',

          'person'     => 1,

          'action'     => 'name'

        };

Page 31: Translating human language with computer grammar

say ucfirst (

($::grammar{possession}

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

        : ''

     )

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

    . conjugation(

         $::grammar{action},

         $::grammar{person}

       ) . ' '

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

);

Page 32: Translating human language with computer grammar

Mein Name ist Andreas.

Ich heiße Andreas.

Page 33: Translating human language with computer grammar

Mein Name ist Andreas. My name is Andrew.

Ich heiße Andreas.

Page 34: Translating human language with computer grammar

Mein Name ist Andreas. My name is Andrew.

Ich heiße Andreas.     I am Andrew.

Page 35: Translating human language with computer grammar
Page 36: Translating human language with computer grammar

640 pages!

Page 37: Translating human language with computer grammar

__END__

Andrew Shitov

http://andy.sh