# Analizatzaile sintaktiko

Analizatzaile sintaktiko bat gramatika formalaren arauei jarraituz karaktere-kate bat analizatzeko erabiltzen den programa informatikoa da. Adibidez, esaldi batek egitura sintaktiko egokia jarraitzen duen aztertzen du, hau da, hitzak edo esaldi zatiak ordena egokian idatzita dauden edo ez begiratzea da bere eginkizuntako bat. Karaktere-kate hauek lengoaia naturalekoak, lengoaia informatiko batekoak edo datu-egitura batekoak izan daitezke.
Analizatzaile sintaktikoak sarrerako testua beste egitura mota batean bilakatzen du (zuhaitz sintaktiko batean kasu gehienetan), hau erabilgarriagoa izango baita ondorengo analisia egiteko eta sarrerako hierarkia inplizitua atzematen du. Analizatzaile lexiko batek sarrerako karaktere-kate baten tokenak sortzen ditu eta token hauek dira analizatzaile sintaktikoak aztertzen dituenak zuhaitz sintaktiko moduko datu-egitura bat sortzeko.
Analisi sintaktikoa flexio gramatikala erabiltzen duten hizkuntzen hizkuntza-diagramak sortzeko ere erabiltzen da, hizkuntza erromanikoan edo Latinean esaterako. Analizatzaile sintaktikoek ohiko kasuetan ezagutzen dituzten hizkuntzak testuingururik gabeko hizkuntzak dira. Aipatu behar da testuingururik gabeko lengoaia batez ari garenean pila-automata batek ezagut dezakeen lengoaia batez ari garela, eta, era berean, testuingururik gabeko lengoaia bat atzematen duen analizatzaile sintaktiko batek pila-automata batek duen konputazio-ahalmen bera duela.
Analizatzaile sintaktikoak zabalki ikertu ziren 70. hamarkadan eta hainbat funtzionamendu-patroi antzeman ziren, horrela, yacc, GNU bison edo javaCC bezalako analizatzaile sintaktikoak sortzeko programak sortu ziren.

## Lengoaia naturala

Itzulpen edo lengoaia naturalaren prozesamenduko sistema batzuk programa informatikoen bidez analizatzen dira lexikoki . Baina, esaldiak ez dira errazak analizatzeko, izan ere, anbiguotasun karga handia baitago gizakion hizkuntza-egituran. Adibidez, "metroa hartu eta lanera noa" esaldian ez dago argi "metroa" laneko erreminta bat den edo garraiobide bat den. Gizakion hizkuntza prozesatzeko, ikertzaileek ados jarri behar dute lehendabizi erabili beharreko gramatikan eta erabaki honek irizpide linguistiko eta konputazionalarekin du zerikusia.
«Head-driven phrase structure grammar» ezaguna egin den beste formalismo bat da, baina, ikerkuntzan ahaleginak Penn Treebank-en moduko konplexutasun gutxiago duten algoritmoetan zentratu dira. «Shallow parsing» analisi azkarra esaldiko osagai nagusiak bilatzeaz soilik arduratzen da, hala nola, izenak edo aditzak. Gatazka linguistiko hau argitzeko beste bide bat dependentzien-gramatika da.
Analizatzaile moderno gehienak estatistikoak dira zatiren batean gutxienez, honek esan nahi du eskuz analizatuak izan diren entrenamendu datu batzuetan oinarritzen direla.
Sistema arrakastatsuenek estatistika lexikoa erabiltzen dute, hau da, hitzen kategoria gramatikala lortzen dute. Sistema hauek zaurgarriak dira, azkenerako gehiegizko parametro kantitatea hartzen baitute eta azkenean sinplifikazioa behar baitute.
Lengoaia naturalak analizatzeko algoritmoek ezin dituzte oinarritzat hartu ezaugarri onak dituzten gramatikak, programazio-lengoaia moduko diseinatutako lengoaiak dituztenak esaterako. Formalismo gramatikal batzuk konputazionalki analizatzeko oso zailak dira, eta, beraz, testuingururik gabeko hurbilketa bat erabiltzen da, nahiz eta egitura bera testuingururik gabekoa ez izan, hasierako sinplifikazio bat lortzeko.
Testuingururik gabeko gramatikak erabiltzen dituzten algoritmoak Cocke-Younger-Kasami algoritmoaren (CYK) aldaera batean eta heuristiko batean oinarritzen dira analisi txarrak ekiditeko. Edozein kasutan ikuspegi batzuk abiadurari uko egiten diote zehaztasunaren alde, horrela, honen adibide dira «shift-reduce» algoritmoaren bertsio linealak.

## Programazio-lengoaiak

Analizatzaile sintaktikoen erabilera ohikoena konpilatzaileen analisiaren zati bat da. Modu honetan lengoaiaren iturburu-kodea analizatu behar dute. Programazio-lengoaiak normalean testuingururik gabeko gramatikak izaten dituzte oinarrian, horrela, analizatzaile azkarrak eta eraginkorrak idatz daitezke hauentzat.
Testuingururik gabeko gramatikek adierazpen mugatua dute eta lengoaia multzo mugatu bat soilik adieraz dezakete. Informalki, honen arrazoia era honetako lengoaia baten memoria mugatua dela da, gramatikak ezin du gogoratu ausazko sarrera luze baten eratze baten agerpena eta hau beharrezko da adibidez aipatu aurretik deklaratu egin behar den aldagaiak erabiltzen dituzten lengoaietan. Gramatika konplexuenak ezin dira analizatu modu eraginkor batean. Arrazoi hauengatik ohikoa da analizatzaile tolerante bat sortzea testuingururik gabeko gramatikentzat, honek eratze oker batzuk ere onartuko lituzke eta hasierako analisiaren ondoren eratze okerrak kenduko lirateke.
Normalean erraza da lengoaia batek sortutako eratze guztiak onartzen dituen testuingururik gabeko gramatika bat zehaztea, baina, bestalde, ia ezinezkoa da soilik nahi ditugun eratzeak onartzen dituen testuingururik gabeko gramatika bat sortzea. Edozein kasutan analizatzaile gehienak ez dira eskuz eraikiak, baizik eta, sorgailu automatikoak erabiliz dira sortuak.

### Prozesuaren ikuspegi orokorra

Ondoren datorren kasu honek erakusten du programazio-lengoaia baten analisia gramatikako bi mailatan, lexikoan eta sintaktikoan.
Lehen egoera tokenen eratze edo analisi lexikoa da, prozesu honetan sarrerako katea adierazpen erregularretan definitutako esanahia duten sinboloetan banatzen da, adibidez programa kalkulagailu bat sarrera honekin: "12*(3+4)^2", token hauetan banatuko luke: 12, *, (, 3, +, 4, ), ^ eta 2, hauetako sinbolo bakoitzak adierazpen aritmetikoetan bere esanahia izango luke. Analizatzaileak *, +, ^, ( eta ) sinboloek token berri baten hasiera adierazten dutela argituko duen erregelak edukiko ditu, era horretan, zentzurik ez luketen 12 edo 13 bezalako tokenak ez lirateke sortuko.
Hurrengo pausoa analisi sintaktikoa da, hau da, tokenek baliozko adierazpen bat eratzen dutela egiaztatzea. Hau testuingururik gabeko gramatika bat erabilita egiten da normalean, non errekurtsiboki zehazten dituen adierazpen batean ager daitezkeen osagaiak eta baita osagai hauek zein ordenetan agertu behar duten ere. Programazio-lengoaia bat definitzen duten erregelak ezin dira beti testuingururik gabeko gramatika bat erabilita adierazi, adibidez moten baieztatzea edo identifikatzaleen deklarazio egokia. Erregela hauek atributuen gramatika erabiliz adierazi daitezke formalki.
Azken fasea analisi semantikoa da, fase honek jadanik balioztatuta dagoen adierazpenaren inplikazioak lantzen ditu eta egokitzen diren jarduerak egiten ditu. Kalkulagailuaren kasuan, jarduera adierazpena ebaluatzea da. Konpiladore batek, aldiz, kodea sortuko luke. Gramatika atributuak ere erabil daitezke ekintza hauek zehazteko.

### Mendekotasunen analisia

Analisi sintaktikoa egiteko beste modu bat mendekotasunezko gramatikak erabiltzea da, zeinak esaldi egituren alternatiba moduan agertzen diren. Labur esanda, gramatika hauek dependentzia-erlazio bat definitzen dute eratze bakoitzaren (perpausak dira orokorrean, baina, esaldi bakunak ere izan litezke) eta bere "buruaren" (head ingelesez) artean. Elementu hauek hitzak, tokenak, lemak edo puntuazio ikurrak ere izan daitezke. Osagarri moduan, eratzaile nagusiari 0 elementua edo erroa (root) deitzen zaio, normalean perpausako aditz nagusia izaten dena. Garrantzitsua da mendekotasunak eratzaileekin ez nahastea, izan ere, mendekotasun-erlazioek bikote bakar eta ordenatuak sortzen baitituzte. C eratze batean D menpeko baten H burua zein den erabakitzeko irizpideak ondorengoak dira:
* H-k C-ren kategoria sintaktikoa zehazten du eta H-k C ordezka dezake.
* H-k C-ren kategoria semantikoa zehazten du; D-k H zehazten du.
* H nahitaezkoa da; D hautazkoa izan daiteke.
* H-k D aukeratzen du eta D nahitaezkoa den erabakitzen du.
* D-ren forma H-ren esku dago (agreement or government).
* D-ren lerro-posizioa H-ren arabera definitua dago.
Irizpide hauek, ordea, irizpide morfologiko edo semantikoekin kontraesanak sor ditzakete eta ez da beti garbi egoten mendekoak hautazkoak diren edo ez.
Mendekotasunen analizatzaileen eginkizuna da, perpausa bat emanda, burua zein den eta elementu bakoitzaren mendekotasun mota zein den erabakitzea. Analisi mota hauek erabiltzearen abantaila hitzen ordena zorrotza erabiltzen ez duten lengoaietan hainbat arazo saihestu daitezkeela da. Mendekotasun motak sailkatzeko hainbat modu daude, baina, CoNLL-k (Conference on Computational Natural Language Learning) mendekotasunen analisi sintaktiko guztietan erabiltzeko formatu bat sortu du: CoNLL-U.
Analisi sintaktikoaren proba ezberdinen azken sistemen emaitzak ataza partekatuen (shared task) lekuan konpilatuak izan dira, 2017an eginkizuna hizkuntza ezberdinak analizatzeko gai den analizatzaile bat sortzea izan zen.

## Analizatzaile sintaktikoak

Analisi sintaktikorako hainbat tresna daude. Hauek dira adibide batzuk:

### Freeling

Freeling kode irekiko analizatzaile sintaktikorako tresna multzoa da. C++ liburutegi bat da eta hizkuntza analisirako hainbat funtzionalitate eskaintzen ditu hizkuntza ezberdinetarako: ingeleserako, katalanerako, gaztelaniarako, alemanerako edo errusierarako, besteak beste.

### Stanford

Stanford hizkuntza naturalaren prozesmenduko erramienta multzoa da eta eredu estatikoetan dago oinarritua. Probabilitate analisia erabiltzen du eta nahiz eta arazo batzuk dituen oraindik, normalean ondo lan egiten du.

## Analisi sintaktikoa euskaraz

Euskarazko analisi sintaktikorako hainbat tresna sortu dira azken urteetan, eta tresna horien sortzaile nagusia Ixa Taldea izan da. Ixa Taldea hizkuntzaren prozesamenduan ikertzen duen Euskal Herriko Unibertsitateko ikerkuntza-taldea da. Hainbat hizkuntzatako ikerkuntza lan eta produktu egin badituzte ere, beraien ikerkuntza-adar nagusienetako bat euskararen gaineko ikerketa aplikatua da. Talde honek hainbat produktu sortu ditu, eta horietako hainbat analisi sintaktikoaren ingurukoak dira:

### IXA pipes

IXA pipes testuak automatikoki lantzeko sortutako tresna multzo bat da eta hauek dira tresna horien funtzionalitateak: Tokenizatzaile, POS tagger, Lematizatzaile, entitate izendunak saikatzaile, iritzien gaiak erauzteko tresna, zatiak, parserra. ixa-pipe-chunk tresna multzo horietako bat da eta zati sintaktiko bakoitza bereiztea da bere zeregina. Euskara eta ingeleserako sortua dago eta estatistikoki detektatzen ditu sintagma mailako osagai sintaktiko sinpleak. Ixa-pipes programarekin hainbat hizkuntza landu daitezke (euskara, herbeherera, ingelesa, frantzesa, galiziera, alemana, italiera)

### IxaKat

IxaKat programa informatikoa testuak automatikoki lantzeko hainbat tresna informatikoz osatutako multzo bat da, euskarazko testuak analizatzeko erabil daitekeena. Ixa Taldeak sortu zuen 2014an eta software librea da. IxaKat multzoko tresna nagusiek sekuentzian lan egiten dute. Lehenengoak kategoria morfologikoak etiketatzen ditu, horiek erabilita bigarrenak dependentzia sintaktikoak etiketatzen ditu, horiek erabilita hirugarrenak rol semantikoak etiketatzen ditu eta gero azkenak korreferentziak.
IxaKat eta IXA-pipes kateak modularrak direnez, eta biek NAF formatua erabiltzen dutenez sarrera/irteera formatu moduan, bi multzotako tresnak konbinatu daitezke prozesamendu-kate berean. IxaKat programarekin euskarazko testuak bakarrik landu daitezke. Euskarazko testuak prozesatzerakoan zehaztasun handixeago lortzen du IxaKatek Ixa-pipes baino.

### Eustagger

Eustagger euskararako etiketatzaile/desanbiguatzaile morfosintaktikoa da. Hauek dira bere funtzionalitateak: tokenizazioa, analisi morfologikoa, lematizazioa and euskararako etiketatzailea. Web zerbitzu bat ere badauka.

### Ixati

Ixati euskararako azaleko analizatzaile sintaktikoa da. Programa honek sarrerako testu bat hartu eta textuko zatiak identifikatzen ditu, ondoren, izen sintagma edo aditz sintagma den adieraziz markatzen du. Euskararako soilik balio du eta web zerbitzu bat ere badauka.

### Maltixa

Maltixa analizatzaile sintaktiko-estatistikoa da. Euskarazko testu bat emanda, esaldi bakoitza lerro batean, esaldi horien analisiak lortuko ditu. Hau da, mendekotasun-zuhaitza lortuko da. Hau da produktuaren demorako esteka.

## Aztertzaile sintaktiko motak

* Top-Down-Parser
* Bottom-Up-Parser
* Recursive-Descent-Parser
* Chart-Parser
* Left-Corner-Parser
* LR-Parser

## Erreferentziak

* ↑ «Welcome | FreeLing Home Page» nlp.lsi.upc.edu (Noiz kontsultatua: 2019-05-09).
* ↑ «The Stanford Natural Language Processing Group» nlp.stanford.edu (Noiz kontsultatua: 2019-05-09).
* ↑ «Sarrera | Ixa taldea» ixa.si.ehu.es (Noiz kontsultatua: 2019-05-02).
* ↑ ixa2.si.ehu.es (Noiz kontsultatua: 2019-05-02).

## Ikus, gainera

* Hizkuntzalaritza konputazional
* Hizkuntzaren prozesamendu

## Kanpo estekak

* Datuak: Q194152
* Multimedia: Parsing / Q194152