source: lliurex-jocomunico/trunk/fuentes/lliurex-jocomunico.install/var/lib/application/libraries/Myexpander.php @ 5728

Last change on this file since 5728 was 5728, checked in by joamuran, 3 years ago

Added zero-installed and updated jocomunico

  • Property svn:executable set to *
File size: 30.2 KB
Line 
1<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
2// use Stichoza\GoogleTranslate\TranslateClient;
3
4class Myexpander {
5   
6   
7    var $allpatterns = array(); // Array amb tots els patterns possibles per una entrada amb un o varis verbs
8    /* Un pattern té un array d'slots (cada slot té les propietats més un array de paraules que l'estan omplint)
9     * més un booleà que diu si ja està ple.
10     */
11    var $puntsallpatterns = array(); // array amb els punts finals de cada pattern
12    var $patternescollit = 0; // id del pattern dins de l'array allpatterns
13   
14    var $errormessagetemp = null; 
15    var $errormessage = array(); 
16    var $errorcode = array();
17    var $errorcodetemp = null;
18    var $errortemp = null;
19    var $error = array(); // true i false
20   
21    var $readwithoutexpansion = false; // per llegir les frases tal qual si el sistema d'expansió no les pot fer
22    var $preguntaposada = array();
23    var $paraulescopia = array();
24    var $info = array();
25       
26    function __construct() {}
27   
28    public function expand()
29    {
30        // the character encoding of the words from the database is utf-8
31        // so we set the php system to utf-8
32        mb_internal_encoding( 'utf-8' );
33       
34        $CI = &get_instance();
35        $CI->load->model('Lexicon');
36
37        $this->info['errormessage'] = null; // Missatges d'error o warnings
38        $this->info['error'] = false; // Si el missatge és d'error
39        $this->info['printparsepattern'] = "No pattern found.";
40        $this->info['errorcode'] = false;
41        $frasefinalnotexpanded = "";
42       
43        // agafem si el sistema d'expansió està o no activat
44        $expansionOff = false;
45        if ($CI->session->userdata('cfgExpansionOnOff') == '0') $expansionOff = true;
46       
47        // GET SENTENCE
48        $idusu = $CI->session->userdata('idusu');
49        $this->paraulescopia = $CI->Lexicon->getLastSentence($idusu); // array amb les paraules
50        $propietatsfrase = $CI->Lexicon->getLastSentenceProperties($idusu);
51               
52        // variables per mostrar els resultats per pantalla
53        $this->info['identry'] = $propietatsfrase['identry'];
54        $this->info['inputwords'] = $propietatsfrase['inputwords'];
55       
56        // si ha intentat fer una frase buida, li retornem la frase anterior
57        // si no en tenia cap, seguirà l'execució
58        if (count($this->paraulescopia) <= 0) {
59                                   
60            $this->info['frasefinal'] = $CI->Lexicon->getLastGeneratedText($idusu);
61                       
62            if ($this->info['frasefinal'] != null) {
63                $this->info['errormessage'] = null;
64                $this->info['error'] = false;
65                $this->info['errorcode'] = false;
66                $this->info['readwithoutexpansion'] = false;
67               
68                return;
69            }
70            else {
71                $this->info['errormessage'] = "Error. No hi ha cap frase per aquest usuari.";
72                $this->info['error'] = true;
73                $this->info['errorcode'] = 1;
74            }
75        }
76
77        // FIND VERBS
78        $arrayVerbs = array();
79        // si a la frase no hi ha verb i només hi ha adjectius (amb o sense modificadors) voldrem que
80        // agafi els patrons de ser i estar, si no només posarà els patrons verbless
81        $thereisadj = false;
82        $adjdefverb = 0;
83        $adjdefsubj = false;
84        $countnouns = 0;
85        $noundefverb = 0;
86        $othertypes = false;
87               
88        // fem una cerca de tots els pictogames i agafem configuracions necessàries pel sistema
89        // com ara verbs per defecte
90        for ($i=0; $i<count($this->paraulescopia); $i++) {
91            $word = &$this->paraulescopia[$i];
92           
93            // si troba un pictograma que no es pot expandir, com ara el de "Falta pictograma"
94            // que surti l'error i un cop acabi el bucle que surti del sistema d'expansió
95            if ($word->supportsExpansion == '0') {
96                $this->info['errormessage'] = "Error. S’ha trobat un pictograma que no es pot expandir.";
97                $this->info['error'] = true;
98                $this->info['errorcode'] = 6;
99                $this->readwithoutexpansion = true;
100            }
101           
102            if ($word->tipus == "verb") $arrayVerbs[] = &$word;
103            else if ($word->tipus == "adj") { 
104                if (!$thereisadj) {
105                    $adjdefverb = $word->defaultverb;
106                    $adjdefsubj = $word->subjdef;
107                }
108                $thereisadj = true;
109            }
110            else if ($word->tipus == "name") { 
111                if ($countnouns < 1) $noundefverb = $word->defaultverb;
112                if (!$word->isClass("pronoun")) {
113                    $countnouns++;
114                }
115            }
116            else if ($word->tipus != "modifier") $othertypes = true;
117           
118            // aprofitem el bucle que passa per totes les paraules per preparar la frase final per
119            // si hi ha un error que digui la frase inicial sense expandir-la
120            $frasefinalnotexpanded .= $word->text." ";
121        }
122       
123        // si ha trobat un pictograma que no es pot expandir
124        // o el sistema d'expansió estava desactivat que surti del sistema d'expansió
125        if ($this->readwithoutexpansion || $expansionOff) {
126           
127            $this->info['frasefinal'] = $frasefinalnotexpanded;
128            $CI->Lexicon->guardarParseIFraseResultat($propietatsfrase['identry'], null, $frasefinalnotexpanded);
129           
130            return;
131        }
132
133        // GET PATTERNS
134
135        $this->initialiseVerbPatterns($arrayVerbs, $propietatsfrase, $thereisadj, $adjdefverb, $adjdefsubj, $countnouns, $noundefverb, $othertypes);
136        // $verbPatterns = new Mypatterngroup();           
137        // $verbPatterns.initialise($arrayVerbs);
138
139        if ($this->errormessagetemp != null) {
140            $this->info['errormessage'] = $this->errormessagetemp;
141            $this->info['error'] = true;
142            $this->info['errorcode'] = $this->errorcodetemp;
143            $this->info['readwithoutexpansion'] = $this->readwithoutexpansion;
144           
145            $this->info['frasefinal'] = $frasefinalnotexpanded;
146            $CI->Lexicon->guardarParseIFraseResultat($propietatsfrase['identry'], null, $frasefinalnotexpanded);
147           
148            return;
149        }
150
151        else {
152
153            $partpreguntaposada = false;
154            $preguntabona = false;
155            // Per cada PATTERN
156            for ($i=0; $i<count($this->allpatterns); $i++) {
157               
158                // fem una còpia de les paraules per treballar des de 0 a cada pattern
159                $paraules = unserialize(serialize($this->paraulescopia));
160                $partPregunta = array();
161                $arrayNouns = array();
162                $arrayAdjs = array();
163                $arrayAdvs = array();
164                $arrayModifs = array();
165                $arrayExpressions = array();
166
167                for ($j=0; $j<count($paraules); $j++) {
168                    $word2 = &$paraules[$j];
169                    if ($word2->tipus == "name") $arrayNouns[] = &$word2;
170                    else if ($word2->tipus == "adj") {
171                        if ($word2->isClass("numero")) $arrayModifs[] = &$word2;
172                        else $arrayAdjs[] = &$word2; // els ordinals hi segueixen sent, vigilar amb els slots tipus ordinal
173                    }
174                    else if ($word2->tipus == "adv") $arrayAdvs[] = &$word2;
175                    else if ($word2->tipus == "expression") $arrayExpressions[] = &$word2;
176                    else if ($word2->tipus == "modifier") $arrayModifs[] = &$word2;
177                    else if ($word2->tipus == "questpart") $partPregunta[] = &$word2;
178                }
179
180               $auxpattern = &$this->allpatterns[$i];
181               $auxpattern->paraules = $paraules;
182
183               // Posem les expressions a la tira d'expressions
184               for ($j=0; $j<count($arrayExpressions); $j++) {
185                   $aux = array();
186                   $aux[0] = $arrayExpressions[$j]->text;
187                   $aux[1] = $arrayExpressions[$j]->propietats->front;
188                   $auxpattern->exprsarray[] = $aux;
189               }
190
191               // si la frase era de pregunta, ho guardem a les cookies
192               if ($propietatsfrase['tipusfrase'] == "pregunta") $CI->session->set_userdata('preguntapattern', true);
193               
194               // Si hi ha una partícula de pregunta
195               $numpreguntes = count($partPregunta);
196               if ($numpreguntes > 1) {
197                   
198                   $this->errormessagetemp = "Error. La frase no pot contenir més d'una pregunta.";
199                   $this->errorcodetemp = 2;
200                   $this->readwithoutexpansion = true;
201                   
202                   $this->info['errormessage'] = $this->errormessagetemp;
203                   $this->info['error'] = true;
204                   $this->info['errorcode'] = $this->errorcodetemp;
205                   $this->info['readwithoutexpansion'] = $this->readwithoutexpansion;
206
207                   $this->info['frasefinal'] = $frasefinalnotexpanded;
208                   $CI->Lexicon->guardarParseIFraseResultat($propietatsfrase['identry'], null, $frasefinalnotexpanded);
209
210                   return;
211               }
212               else if ($numpreguntes == 1) {
213                   $partpreguntaposada = $auxpattern->fillPartPregunta($partPregunta[0]);
214
215                   if (!$partpreguntaposada && !$preguntabona) {
216                       $this->errormessagetemp = "Warning. No s'ha trobat lloc per la partícula de la pregunta.";
217                       $this->errorcodetemp = 4;
218                       $this->errortemp = true;
219                       $this->readwithoutexpansion = true;
220                   }
221                   else {
222                       // només que hi hagi un patró on encaixi la partícula de pregunta, ja va bé
223                       $preguntabona = true;
224                       $CI->session->set_userdata('preguntapattern', true);
225                       $this->errormessagetemp = null;
226                       $this->errorcodetemp = null;
227                       $this->errortemp = false;
228                       $this->readwithoutexpansion = false;
229                   }
230               } // Fi tractament de pregunta
231
232               // Si el verb és pseudoimpersonal o si hi ha una pregunta, invertim les preferències
233               // d'aparèxier abans i després del verb, ja que ara el subjecte va darrere del verb
234               // Les variables beforeverb només s'utilitzaran al codi si l'idioma té estructura SVO (Subject-Verb-Object)
235               if ($auxpattern->pseudoimpersonal || $partpreguntaposada) {
236                   for ($j=0; $j<count($paraules); $j++) {
237                       $auxword = &$paraules[$j];
238                       $auxword->beforeverb = !$auxword->beforeverb;
239                   }
240               }
241
242               // echo "Noms: ".count($arrayNouns)."<br />";
243               // Els noms
244               $auxpattern->solveNouns($arrayNouns);
245               // $auxpattern->printPattern();
246
247
248               // echo "Adverbis: ".count($arrayAdvs)."<br />";
249               // Els adverbis
250               $auxpattern->solveAdverbs($arrayAdvs);
251               // $auxpattern->printPattern();
252
253
254               // echo "Adjectius: ".count($arrayAdjs)."<br />";
255               // Els adjectius menys els numerals que els passarem amb la resta d'adjs i modificadors
256               $auxpattern->solveAdjs($arrayAdjs);
257               // $auxpattern->printPattern();
258
259
260               // echo "Modificadors: ".count($arrayModifs)."<br />";
261               // Els modificadors
262               $auxpattern->solveModifs($arrayModifs);
263
264               $auxreturn = $auxpattern->calcPuntsFinalPattern();
265               $puntspattern = $auxreturn[0];
266               $notusedpicto = $auxreturn[1];
267               
268               // si no ha pogut posar una paraula, activem un error temporal del patró
269               if ($notusedpicto) {
270                   $this->errormessagetemp = "Warning. No s'ha trobat lloc per una de les paraules.";
271                   $this->errorcodetemp = 7;
272                   $this->errortemp = true;
273               }
274
275               $this->puntsallpatterns[] = $puntspattern;
276
277               $this->errormessage[] = $this->errormessagetemp;
278               $this->errorcode[] = $this->errorcodetemp;
279               $this->error[] = $this->errortemp;
280               $this->preguntaposada[] = $partpreguntaposada;
281               
282               // reiniciem els errors pel següent patró
283               $this->errormessagetemp = null;
284               $this->errorcodetemp = null;
285               $this->errortemp = false;
286               
287               $CI->session->set_userdata('preguntapattern', false);
288               // DEBUG
289               // echo $auxpattern->printPattern();
290
291            } // fi per cada pattern
292
293            // escollim el pattern amb més puntuació com a resultat
294            $bestpatternindex = 0;
295            $bestpatternpunts = -1000;
296
297            for ($i=0; $i<count($this->puntsallpatterns); $i++) {
298               
299                // PER VEURE LES PUNTUACIONS DE TOTS ELS PATRONS QUE HA PROVAT
300                // echo "Patró ".$this->allpatterns[$i]->id.": ".$this->puntsallpatterns[$i]." </br ><br />";
301               
302                if ($this->puntsallpatterns[$i] > $bestpatternpunts) {
303                    $bestpatternpunts = $this->puntsallpatterns[$i];
304                    $bestpatternindex = $i;
305                }
306            }
307
308            $bestpattern = new Mypattern();
309            $bestpattern = unserialize(serialize($this->allpatterns[$bestpatternindex]));
310
311            // agafem l'string amb el parse tree del pattern escollir
312            $printparsepattern = $bestpattern->printPattern();
313
314            $this->info['printparsepattern'] = $printparsepattern;
315
316            // CRIDEM EL GENERADOR AMB EL MILLOR PATTERN, LES PROPIETATS DE LA FRASE SELECCIONADA
317            // I SI HI HA UNA PARTÍCULA DE PREGUNTA
318
319            $userlanguage = $CI->session->userdata('ulangabbr');
320            $frasefinal = "";
321
322            if ($userlanguage == "CA") {
323                $frasefinal = $this->generateSentence($bestpattern, $propietatsfrase, $this->preguntaposada[$bestpatternindex]);
324            } else if ($userlanguage == "ES") {
325                $frasefinal = $this->generateSentenceES($bestpattern, $propietatsfrase, $this->preguntaposada[$bestpatternindex]);
326            }
327
328            // si el millor patró té un codi d'error 7 (paraula no utilitzada), aleshores llegim sense expansió
329            if ($this->errorcode[$bestpatternindex] == 7) $this->readwithoutexpansion = true;
330           
331            // si hi ha hagut algun error o s'ha desactivat el sistema d'expansió, aleshores es llegeix sense expandir la frase
332            if ($this->readwithoutexpansion) $this->info['frasefinal'] = $frasefinalnotexpanded;
333            else $this->info['frasefinal'] = $frasefinal;
334           
335            // si l'idioma d'expansió no podia expandir i fa servir el castellà per defecte, traduïm la frase
336            // amb el Google Translate
337//            if ($CI->session->userdata('explangcannotexpand') == '1') {
338//               
339//                try {
340//                    $tr = new TranslateClient($CI->session->userdata('ulangabbr'), $CI->session->userdata('ulangoriginalabbr'));
341//                    $this->info['frasefinal'] = $tr->translate($this->info['frasefinal']);
342//                } catch (Exception $exc) {
343//                    $this->errormessage[$bestpatternindex] = "Error. Connection error. The sentence cannot be translated.";
344//                    $this->error[$bestpatternindex] = true;
345//                    $this->errorcode[$bestpatternindex] = 8;
346//                }
347//            }
348
349            // Guardar parse tree i frase final a la base de dades
350            if ($this->readwithoutexpansion) $CI->Lexicon->guardarParseIFraseResultat($propietatsfrase['identry'], null, $frasefinalnotexpanded);
351            else $CI->Lexicon->guardarParseIFraseResultat($propietatsfrase['identry'], $printparsepattern, $frasefinal);
352
353            $this->info['errormessage'] = $this->errormessage[$bestpatternindex];
354            $this->info['error'] = $this->error[$bestpatternindex];
355            $this->info['errorcode'] = $this->errorcode[$bestpatternindex];
356            $this->info['readwithoutexpansion'] = $this->readwithoutexpansion;
357           
358            // MOSTREM LA INTERFÍCIE
359            return;               
360        }
361    }
362
363
364
365    // INICIALITZA TOTS ELS PATTERNS POSSIBLES I ELS POSA A L'ARRAY ALLPATTERNS
366    function initialiseVerbPatterns($arrayVerbs, $propietatsfrase, $thereisadj, $adjdefverb, $adjdefsubj, $countnouns, $noundefverb, $othertypes)
367    {   
368        $CI = &get_instance();
369        $CI->load->model('Lexicon');
370       
371        $numverbs = count($arrayVerbs);
372
373        $auxword = new Myword();
374        $auxpattern = new Mypattern();
375
376        if ($numverbs > 2) {
377            $this->allpatterns = null;
378            $this->errormessagetemp = "Error. Hi ha més de dos verbs a la frase. <br />
379                                El sistema actual no pot generar frases d'aquesta mena.";
380            $this->readwithoutexpansion = true;
381            $this->errorcodetemp = 3;
382            return; // En aquest cas ja hauríem acabat
383        }
384
385        else if ($numverbs == 0) {
386
387            // si no és una resposta afegir també els patterns per defecte dels noms
388            // o dels adjectius (principalment ser o estar)
389            if ($propietatsfrase['tipusfrase'] != "resposta") {
390               
391                // si hi ha un adjectiu i no hi ha noms, ni altres paraules excepte modificadors
392                // agafem el verb per defecte del primer adjectiu introduït
393                if ($thereisadj && $countnouns == 0 && !$othertypes) {
394                    $arrayVerbs[] = $CI->Lexicon->getPatternsVerb($adjdefverb, ($adjdefverb != 0)); 
395                }
396                // si hi ha algun nom i no hi ha altres paraules excepte modificadors i/o adjectius
397                // agafem el verb per defecte del primer nom introduït
398                // si el nom no tenia verb per defecte i hi havia un adjectiu, agafem el verb per
399                // defecte de l'adjectiu
400                else if ($countnouns > 0 && !$othertypes) {
401                    if ($noundefverb != 0) $arrayVerbs[] = $CI->Lexicon->getPatternsVerb($noundefverb, false);
402                    else if ($thereisadj) $arrayVerbs[] = $CI->Lexicon->getPatternsVerb($adjdefverb, ($adjdefverb != 0));
403                    else $arrayVerbs[] = $CI->Lexicon->getPatternsVerb(0, false); // Verbless
404                }
405                else {
406                    // Agafem els verbless patterns
407                    $arrayVerbs[] = $CI->Lexicon->getPatternsVerb(0, false); // Verbless
408                }
409               
410            }
411            else {
412                // Agafem els verbless patterns
413                $arrayVerbs[] = $CI->Lexicon->getPatternsVerb(0, false); // Verbless
414            }
415
416            // Per cada paraula
417            for ($i=0; $i<count($arrayVerbs); $i++) {
418
419                $auxword = &$arrayVerbs[$i]; // paraules passades per referència
420
421                // Treiem els patterns de la paraula
422                foreach ($auxword->patterns as $pattern) {
423
424                    $auxpattern = new Mypattern();
425                    // inicialitzem el pattern, li diem que és verbless i li passem el subjecte per defecte
426                    // de l'adjectiu (si era un nom el valor serà false)
427                    $auxpattern->initialise($pattern, true, $adjdefsubj); 
428
429                    // Omplim el main verb
430                    $auxpattern->forceFillSlot("Main Verb", $auxword, 0, 0);
431
432                    $this->allpatterns[] = $auxpattern; // Posem el pattern al llistat de possibles patterns
433                }
434            }
435            return; // En aquest cas ja hauríem acabat
436        }
437
438        else if ($numverbs == 1) {
439
440            $auxword = &$arrayVerbs[0];
441
442            foreach ($auxword->patterns as $pattern) {
443
444                // menys els que eren de subverb
445                if ($pattern->subverb == '0') {
446                    $auxpattern = new Mypattern();
447                    $auxpattern->initialise($pattern, false, false);
448
449                    $auxpattern->forceFillSlot("Main Verb", $auxword, 0, 0);
450
451                    $this->allpatterns[] = $auxpattern;
452                }
453            }
454            return; // En aquest cas ja hauríem acabat
455        }
456
457        else if ($numverbs == 2) {
458
459            $auxword = &$arrayVerbs[0];
460            $auxword2 = new Myword();
461            $auxword2 = &$arrayVerbs[1];
462
463            $subverbfound = false;
464
465            // Per cada pattern del 1er verb
466            foreach ($auxword->patterns as $pattern) {
467
468                if ($pattern->subverb == '1') { // Si el pattern accepta subverb
469
470                    $auxpattern = new Mypattern();
471                    $auxpattern->initialise($pattern, false, false);
472
473                    // Posar a dins els patterns del segon verb que no accepten subverb
474                    foreach ($auxword2->patterns as $pattern2) {
475
476                        if ($pattern2->subverb == '0') {
477
478                            $subverbfound = true;
479
480                            $auxpattern2 = new Mypattern();
481                            $auxpattern2->initialise($pattern2, false, false);
482
483                            $auxpatternfusion = new Mypattern();
484                            $auxpatternfusion = unserialize(serialize($auxpattern));
485
486                            $auxpatternfusion->fusePatterns($auxpattern2);
487
488                            // FER ELS FILLS DELS SLOTS DELS VERBS
489                            $auxpatternfusion->forceFillSlot("Main Verb 1", $auxword, 0, 0);
490                            $auxpatternfusion->forceFillSlot("Secondary Verb 2", $auxword2, 0, 0);
491
492                            $this->allpatterns[] = $auxpatternfusion;
493                        }
494                    }
495
496                }
497            }
498
499            if (!$subverbfound) { // si el primer verb no podia ser el principal
500
501                // Per cada pattern del 2on verb
502                foreach ($auxword2->patterns as $pattern2) {
503
504                    if ($pattern2->subverb == '1') { // Si el pattern accepta subverb
505
506                        $auxpattern2 = new Mypattern();
507                        $auxpattern2->initialise($pattern2, false, false);
508
509                        // Posar a dins els patterns del segon verb que no accepten subverb
510                        foreach ($auxword->patterns as $pattern) {
511
512                            if ($pattern->subverb == '0') {
513
514                                $subverbfound = true;
515
516                                $auxpattern = new Mypattern();
517                                $auxpattern->initialise($pattern, false, false);
518
519                                $auxpatternfusion = new Mypattern();
520                                $auxpatternfusion = unserialize(serialize($auxpattern2));
521
522                                $auxpatternfusion->fusePatterns($auxpattern);
523
524                                // FER ELS FILLS DELS SLOTS DELS VERBS
525                                $auxpatternfusion->forceFillSlot("Main Verb 1", $auxword2, 0, 0);
526                                $auxpatternfusion->forceFillSlot("Secondary Verb 2", $auxword, 0, 0);
527
528                                $this->allpatterns[] = $auxpatternfusion;
529                            }
530                        }
531                    }
532                }
533            }
534            if (!$subverbfound) {
535                $this->errormessagetemp = "Error. No s'ha trobat cap patró possible amb aquests verbs.";
536                $this->errorcodetemp = 5;
537            }
538        } // Fi if ($numverbs == 2)
539    }
540
541
542    function generateSentence($patternfinal, $propietatsfrase, $partpreguntaposada)
543    {
544        $pattern = new Mypattern();
545        $pattern = $patternfinal;
546       
547        if ($partpreguntaposada) $propietatsfrase['tipusfrase'] = "pregunta";
548        // si el temps per defecte és l'imperatiu, però hi ha modificadors de frase o de tense
549        // sobreescrivim els valors
550        if ($pattern->defaulttense == "imperatiu") {
551            if ($propietatsfrase['tense'] != "defecte") {
552                $pattern->defaulttense = $propietatsfrase['tense'];
553                $pattern->tipusfrase = $propietatsfrase['tipusfrase'];
554            }
555            else if ($propietatsfrase['tipusfrase'] != "defecte" && 
556                    !($propietatsfrase['tipusfrase'] == "exclamacio" || $propietatsfrase['tipusfrase'] == "resposta")) {
557                $pattern->defaulttense = "present";
558                $pattern->tipusfrase = $propietatsfrase['tipusfrase'];
559            }
560        }
561        // Si el tipus de frase triat era per defecte, ara el tipus de frase és el per defecte del patró
562        if ($propietatsfrase['tipusfrase'] == "defecte") $propietatsfrase['tipusfrase'] = $pattern->tipusfrase;
563       
564        // Indiquem que si el temps per defecte és l'imperatiu, que la frase és una ordre
565        // a no ser que estigui activat el modificador de desig o permís que tenen preferència o
566        // que hi hagi una partícula de pregunta.
567//        if ($propietatsfrase['tense'] == "defecte" && $pattern->defaulttense == "imperatiu"
568//                && (!$propietatsfrase['tipusfrase'] == "desig" || !$propietatsfrase['tipusfrase'] == "permis"
569//                || !$partpreguntaposada)) {
570//            $propietatsfrase['tipusfrase'] = "ordre";
571//        }
572//        else if ($partpreguntaposada) $propietatsfrase['tipusfrase'] = "pregunta";
573//       
574//        // Si el tipus de frase triat era per defecte, ara el tipus de frase és el per defecte del patró
575//        if ($propietatsfrase['tipusfrase'] == "defecte") $propietatsfrase['tipusfrase'] = $pattern->tipusfrase;
576
577        // 1. Ordenem els slots segons el tipus de frase
578        $pattern->ordenarSlotsFrase($propietatsfrase);
579
580        // 2 i 3. 2: Ordenar paraules de dins dels slots, ja posant les preposicions.
581        // 3: Controlar que les paraules concordin en gènere i número (els adjs amb els noms
582        // i la PartPregunta "quant" amb el theme, si hi és). Afegir també les coordinacions
583        // només de NOMS, ADJECTIUS i ADVERBIS DE MANERA
584        $pattern->ordenarSlotsInternament();
585
586        // 4. Posar articles als noms
587
588        $pattern->putArticlesToNouns($propietatsfrase["tipusfrase"]);
589
590        // 5. Conjugar els verbs
591
592        $pattern->conjugarVerbs($propietatsfrase);
593
594        // 6. Treure els "jo" i "tu" dels subjectes. Canviar receivers a pronoms febles i posar-los
595        // a darrere el verb si cal. Posar modificadors de frase com el "no" o el "també".
596        // Fusionar preposicions amb articles (de+el/s = del/s... a+el, per+el...). Posar apòstrofs
597        // de preps i pronoms febles (i guions?). Netejar espais abans o després dels apòstrofs.
598        // Escriure la frase final, posant les expressions i altres advs de temps al final.
599
600        $pattern->launchCleaner($propietatsfrase["tipusfrase"]);
601
602        return $pattern->printFraseFinal();
603    }
604
605    function generateSentenceES($patternfinal, $propietatsfrase, $partpreguntaposada)
606    {
607        $pattern = new Mypattern();
608        $pattern = $patternfinal;
609
610        if ($partpreguntaposada) $propietatsfrase['tipusfrase'] = "pregunta";
611        // si el temps per defecte és l'imperatiu, però hi ha modificadors de frase o de tense
612        // sobreescrivim els valors
613        if ($pattern->defaulttense == "imperatiu") {
614            if ($propietatsfrase['tense'] != "defecte") {
615                $pattern->defaulttense = $propietatsfrase['tense'];
616                $pattern->tipusfrase = $propietatsfrase['tipusfrase'];
617            }
618            else if ($propietatsfrase['tipusfrase'] != "defecte" && 
619                    !($propietatsfrase['tipusfrase'] == "exclamacio" || $propietatsfrase['tipusfrase'] == "resposta")) {
620                $pattern->defaulttense = "present";
621                $pattern->tipusfrase = $propietatsfrase['tipusfrase'];
622            }
623        }
624        // Si el tipus de frase triat era per defecte, ara el tipus de frase és el per defecte del patró
625        if ($propietatsfrase['tipusfrase'] == "defecte") $propietatsfrase['tipusfrase'] = $pattern->tipusfrase;
626       
627//        // Indiquem que si el temps per defecte és l'imperatiu, que la frase és una ordre
628//        // a no ser que estigui activat el modificador de desig o permís que tenen preferència o
629//        // que hi hagi una partícula de pregunta.
630//        if ($propietatsfrase['tense'] == "defecte" && $pattern->defaulttense == "imperatiu"
631//                && (!$propietatsfrase['tipusfrase'] == "desig" || !$propietatsfrase['tipusfrase'] == "permis"
632//                || !$partpreguntaposada)) {
633//            $propietatsfrase['tipusfrase'] = "ordre";
634//        }
635//        else if ($partpreguntaposada) $propietatsfrase['tipusfrase'] = "pregunta";
636//       
637//        // Si el tipus de frase triat era per defecte, ara el tipus de frase és el per defecte del patró
638//        if ($propietatsfrase['tipusfrase'] == "defecte") $propietatsfrase['tipusfrase'] = $pattern->tipusfrase;
639
640        // 1. Ordenem els slots segons el tipus de frase
641        $pattern->ordenarSlotsFraseES($propietatsfrase);
642
643        // 2 i 3. 2: Ordenar paraules de dins dels slots, ja posant les preposicions.
644        // 3: Controlar que les paraules concordin en gènere i número (els adjs amb els noms
645        // i la PartPregunta "quant" amb el theme, si hi és). Afegir també les coordinacions
646        // només de NOMS, ADJECTIUS i ADVERBIS DE MANERA
647        $pattern->ordenarSlotsInternamentES();
648
649        // 4. Posar articles als noms
650
651        $pattern->putArticlesToNounsES($propietatsfrase["tipusfrase"]);
652
653        // 5. Conjugar els verbs
654
655        $pattern->conjugarVerbsES($propietatsfrase);
656
657        // 6. Treure els "jo" i "tu" dels subjectes. Canviar receivers a pronoms febles i posar-los
658        // a darrere el verb si cal. Posar accents a les noves formes verbals, si cal.
659        // Posar modificadors de frase com el "no" o el "també".
660        // Fusionar preposicions amb articles (de+el/s = del/s... a+el...).
661        // Escriure la frase final, posant les expressions i altres advs de temps al final.
662
663        $pattern->launchCleanerES($propietatsfrase["tipusfrase"]);
664
665        return $pattern->printFraseFinal();
666    }   
667   
668}
669
670/* End of file Mypatterngroup.php */
Note: See TracBrowser for help on using the repository browser.