load->model('Lexicon');
$this->load->library('Myword');
$this->load->library('Myslot');
$this->load->library('Mypattern');
$this->load->library('Myexpander');
// $this->load->library('Mymatching');
// $this->load->library('Mypatterngroup');
}
public function index()
{
$expander = new Myexpander();
$expander->expand();
$info = $expander->info;
$this->load->view('resultats', $info);
}
// INICIALITZA TOTS ELS PATTERNS POSSIBLES I ELS POSA A L'ARRAY ALLPATTERNS
function initialiseVerbPatterns($arrayVerbs, $propietatsfrase)
{
$numverbs = count($arrayVerbs);
$auxword = new Myword();
$auxpattern = new Mypattern();
if ($numverbs > 2) {
$this->allpatterns = null;
$this->errormessagetemp = "Error. Hi ha més de dos verbs a la frase.
El sistema actual no pot generar frases d'aquesta mena.";
return; // En aquest cas ja hauríem acabat
}
else if ($numverbs == 0) {
// Agafem els verbless patterns
$arrayVerbs[] = $this->Lexicon->getPatternsVerb(0); // Verbless
// si no és una resposta afegir també els patterns de ser i estar
if ($propietatsfrase['tipusfrase'] != "resposta") {
$arrayVerbs[] = $this->Lexicon->getPatternsVerb(100); // Estar
$arrayVerbs[] = $this->Lexicon->getPatternsVerb(86); // Ser
}
// Per cada paraula
for ($i=0; $ipatterns as $pattern) {
$auxpattern = new Mypattern();
$auxpattern->initialise($pattern); // inicialitzem el pattern
// Omplim el main verb
$auxpattern->forceFillSlot("Main Verb", $auxword, 0, 0);
$this->allpatterns[] = $auxpattern; // Posem el pattern al llistat de possibles patterns
}
}
return; // En aquest cas ja hauríem acabat
}
else if ($numverbs == 1) {
$auxword = &$arrayVerbs[0];
foreach ($auxword->patterns as $pattern) {
// menys els que eren de subverb
if ($pattern->subverb == '0') {
$auxpattern = new Mypattern();
$auxpattern->initialise($pattern);
$auxpattern->forceFillSlot("Main Verb", $auxword, 0, 0);
$this->allpatterns[] = $auxpattern;
}
}
return; // En aquest cas ja hauríem acabat
}
else if ($numverbs == 2) {
$auxword = &$arrayVerbs[0];
$auxword2 = new Myword();
$auxword2 = &$arrayVerbs[1];
$subverbfound = false;
// Per cada pattern del 1er verb
foreach ($auxword->patterns as $pattern) {
if ($pattern->subverb == '1') { // Si el pattern accepta subverb
$auxpattern = new Mypattern();
$auxpattern->initialise($pattern);
// Posar a dins els patterns del segon verb que no accepten subverb
foreach ($auxword2->patterns as $pattern2) {
if ($pattern2->subverb == '0') {
$subverbfound = true;
$auxpattern2 = new Mypattern();
$auxpattern2->initialise($pattern2);
$auxpatternfusion = new Mypattern();
$auxpatternfusion = unserialize(serialize($auxpattern));
$auxpatternfusion->fusePatterns($auxpattern2);
// FER ELS FILLS DELS SLOTS DELS VERBS
$auxpatternfusion->forceFillSlot("Main Verb 1", $auxword, 0, 0);
$auxpatternfusion->forceFillSlot("Secondary Verb 2", $auxword2, 0, 0);
$this->allpatterns[] = $auxpatternfusion;
}
}
}
}
if (!$subverbfound) { // si el primer verb no podia ser el principal
// Per cada pattern del 2on verb
foreach ($auxword2->patterns as $pattern2) {
if ($pattern2->subverb == '1') { // Si el pattern accepta subverb
$auxpattern2 = new Mypattern();
$auxpattern2->initialise($pattern2);
// Posar a dins els patterns del segon verb que no accepten subverb
foreach ($auxword->patterns as $pattern) {
if ($pattern->subverb == '0') {
$subverbfound = true;
$auxpattern = new Mypattern();
$auxpattern->initialise($pattern);
$auxpatternfusion = new Mypattern();
$auxpatternfusion = unserialize(serialize($auxpattern2));
$auxpatternfusion->fusePatterns($auxpattern);
// FER ELS FILLS DELS SLOTS DELS VERBS
$auxpatternfusion->forceFillSlot("Main Verb 1", $auxword2, 0, 0);
$auxpatternfusion->forceFillSlot("Secondary Verb 2", $auxword, 0, 0);
$this->allpatterns[] = $auxpatternfusion;
}
}
}
}
}
if (!$subverbfound) $this->errormessagetemp = "Error. No s'ha trobat cap patró
possible amb aquests verbs.";
} // Fi if ($numverbs == 2)
}
function generateSentence($patternfinal, $propietatsfrase, $partpreguntaposada)
{
$pattern = new Mypattern();
$pattern = $patternfinal;
// Indiquem que si el temps per defecte és l'imperatiu, que la frase és una ordre
// a no ser que estigui activat el modificador de desig o permís que tenen preferència o
// que hi hagi una partícula de pregunta.
if ($propietatsfrase['tense'] == "defecte" && $pattern->defaulttense == "imperatiu"
&& (!$propietatsfrase['tipusfrase'] == "desig" || !$propietatsfrase['tipusfrase'] == "permis"
|| !$partpreguntaposada)) {
$propietatsfrase['tipusfrase'] = "ordre";
}
else if ($partpreguntaposada) $propietatsfrase['tipusfrase'] = "pregunta";
// 1. Ordenem els slots segons el tipus de frase
$pattern->ordenarSlotsFrase($propietatsfrase);
// 2 i 3. 2: Ordenar paraules de dins dels slots, ja posant les preposicions.
// 3: Controlar que les paraules concordin en gènere i número (els adjs amb els noms
// i la PartPregunta "quant" amb el theme, si hi és). Afegir també les coordinacions
// només de NOMS, ADJECTIUS i ADVERBIS DE MANERA
$pattern->ordenarSlotsInternament();
// 4. Posar articles als noms
$pattern->putArticlesToNouns($propietatsfrase["tipusfrase"]);
// 5. Conjugar els verbs
$pattern->conjugarVerbs($propietatsfrase);
// 6. Treure els "jo" i "tu" dels subjectes. Canviar receivers a pronoms febles i posar-los
// a darrere el verb si cal. Posar modificadors de frase com el "no" o el "també".
// Fusionar preposicions amb articles (de+el/s = del/s... a+el, per+el...). Posar apòstrofs
// de preps i pronoms febles (i guions?). Netejar espais abans o després dels apòstrofs.
// Escriure la frase final, posant les expressions i altres advs de temps al final.
$pattern->launchCleaner($propietatsfrase["tipusfrase"]);
return $pattern->printFraseFinal();
}
function generateSentenceES($patternfinal, $propietatsfrase, $partpreguntaposada)
{
$pattern = new Mypattern();
$pattern = $patternfinal;
// Indiquem que si el temps per defecte és l'imperatiu, que la frase és una ordre
// a no ser que estigui activat el modificador de desig o permís que tenen preferència o
// que hi hagi una partícula de pregunta.
if ($propietatsfrase['tense'] == "defecte" && $pattern->defaulttense == "imperatiu"
&& (!$propietatsfrase['tipusfrase'] == "desig" || !$propietatsfrase['tipusfrase'] == "permis"
|| !$partpreguntaposada)) {
$propietatsfrase['tipusfrase'] = "ordre";
}
else if ($partpreguntaposada) $propietatsfrase['tipusfrase'] = "pregunta";
// 1. Ordenem els slots segons el tipus de frase
$pattern->ordenarSlotsFraseES($propietatsfrase);
// 2 i 3. 2: Ordenar paraules de dins dels slots, ja posant les preposicions.
// 3: Controlar que les paraules concordin en gènere i número (els adjs amb els noms
// i la PartPregunta "quant" amb el theme, si hi és). Afegir també les coordinacions
// només de NOMS, ADJECTIUS i ADVERBIS DE MANERA
$pattern->ordenarSlotsInternamentES();
// 4. Posar articles als noms
$pattern->putArticlesToNounsES($propietatsfrase["tipusfrase"]);
// 5. Conjugar els verbs
$pattern->conjugarVerbsES($propietatsfrase);
// 6. Treure els "jo" i "tu" dels subjectes. Canviar receivers a pronoms febles i posar-los
// a darrere el verb si cal. Posar accents a les noves formes verbals, si cal.
// Posar modificadors de frase com el "no" o el "també".
// Fusionar preposicions amb articles (de+el/s = del/s... a+el...).
// Escriure la frase final, posant les expressions i altres advs de temps al final.
$pattern->launchCleanerES($propietatsfrase["tipusfrase"]);
return $pattern->printFraseFinal();
}
public function gracies()
{
$identry = $this->input->post('identry', true);
$scoreparser = $this->input->post('scoreparser', true);
$scoregen = $this->input->post('scoregen', true);
$comments = $this->input->post('comments', true);
$this->Lexicon->addEntryScores($identry, $scoreparser, $scoregen, $comments);
$this->load->view('gracies');
}
}