package Dite; use Moose; extends 'ChildBase'; use utf8; has '+language' => ( default => 'cs' ); has '+end_regex' => ( default => '^konec' ); has '+hello' => ( default => 'Povídej mi pohádku!'); has '+tellme' => ( default => 'Prosím řekni něco!'); has '+goon' => ( default => 'Pokračuj...'); has '+aha' => ( default => 'Aha, ' ); has '+goodbye' => ( default => 'To už je konec? Tak děkuju za pohádku! :-)'); has '+noun_tag_regex' => ( default => '^N' ); has '+adj_tag_regex' => ( default => '^A' ); has '+scenario_string' => ( default => 'W2A::CS::Tokenize W2A::CS::TagMorphoDiTa lemmatize=1' ); use Treex::Tool::Depfix::CS::FormGenerator; has generator => ( is => 'ro', isa => 'Treex::Tool::Depfix::CS::FormGenerator', default => sub { return Treex::Tool::Depfix::CS::FormGenerator->new(); } ); use Treex::Tool::Depfix::CS::TagHandler; sub set_tag_cat { my ($tag, $cat, $value) = @_; return Treex::Tool::Depfix::CS::TagHandler::set_tag_cat($tag, $cat, $value); } sub get_tag_cat { my ($tag, $cat) = @_; return Treex::Tool::Depfix::CS::TagHandler::get_tag_cat($tag, $cat); } # dialogue methods sub generate_question { my ($self, $node, $questiontype) = @_; my $speak = ''; my $gender = get_tag_cat($node->tag, 'gender'); my $number = get_tag_cat($node->tag, 'number'); if ( $questiontype eq 'whatis' ) { my $byttag = 'VB-S---3P-AA---'; $byttag = set_tag_cat($byttag, 'number', $number); my $byt = $self->generator->get_form('být', $byttag); my $tag1 = set_tag_cat($node->tag, 'case', '1'); my $form = $self->generator->get_form($node->lemma, $tag1); if ( $byt && $form) { $speak = "Co $byt to $form?"; } } elsif ($questiontype eq 'what') { my $jakytag = 'P4YS1----------'; $jakytag = set_tag_cat($jakytag, 'gender', $gender); $jakytag = set_tag_cat($jakytag, 'number', $number); my $jaky = ucfirst $self->generator->get_form('jaký', $jakytag); my $byltag = 'VpYS---XR-AA---'; $byltag = set_tag_cat($byltag, 'gender', $gender); $byltag = set_tag_cat($byltag, 'number', $number); my $byl = $self->generator->get_form('být', $byltag); my $tag1 = set_tag_cat($node->tag, 'case', '1'); my $form = $self->generator->get_form($node->lemma, $tag1); if ( $jaky && $byl && $form) { $speak = "$jaky to $byl $form?"; } } elsif ($questiontype eq 'very') { my $byttag = 'VpYS---XR-AA---'; $byttag = set_tag_cat($byttag, 'gender', $gender); $byttag = set_tag_cat($byttag, 'number', $number); my $byt = ucfirst $self->generator->get_form('být', $byttag); my $tag1 = set_tag_cat($node->tag, 'case', '1'); my $form = $self->generator->get_form($node->lemma, $tag1); if ( $byt && $form) { $speak = "$byt hodně $form?"; } } return $speak; } sub clean_answer { my ($self, $anodes_ar) = @_; my @anodes = @$anodes_ar; my $edited_line = ''; # remove No if ( @anodes && $anodes[0]->lemma eq 'no-1' ) { shift @anodes; } if ( @anodes && $anodes[0]->lemma eq ',' ) { shift @anodes; } # build $edited_line foreach my $anode (@anodes) { # switch 1st and 2nd person my $tag = $anode->tag; my $form = $anode->form; my $lemma = $anode->lemma; if ( get_tag_cat($tag, 'person') eq '1' ) { $tag = set_tag_cat($tag, 'person', '2'); if ( $lemma eq 'já' ) { $lemma = 'ty'; } } elsif (get_tag_cat($tag, 'person') eq '2') { $tag = set_tag_cat($tag, 'person', '1'); if ( $lemma eq 'ty' ) { $lemma = 'já'; } } if ( $tag ne $anode->tag ) { $form = $self->generator->get_form($lemma, $tag) // $form; } # store (new) form and space $edited_line .= $form; if (!$anode->no_space_after) { $edited_line .= ' '; } } return $edited_line; } 1; =pod Author: Rudolf Rosa, rosa@ufal.mff.cuni.cz Website: https://ufal.mff.cuni.cz/dite Licence: GNU GPL v2