VYTAUTO DIDŽIOJO UNIVERSITETAS INFORMATIKOS fakultetas SISTEMŲ ANALIZĖS KATEDRA

Raimondas Širvinskas

DOKUMENTŲ PIRMINIO APDOROJIMO ĮRANKIŲ SKIRTŲ LIETUVIŲ, RUSŲ IR AZERŲ KALBOMS ANALIZĖ IR SUKŪRIMAS

Magistro baigiamasis darbas

Taikomosios informatikos studijų programa, valstybinis kodas 621I13003 Informatikos studijų kryptis

Vadovas (-ė) prof. dr. Tomas Krilavičius ______(Parašas) (Data)

Apginta doc.dr. Daiva Vitkutė-Adžgauskienė ______(Parašas) (Data)

Kaunas, 2014

TURINYS

TURINYS ...... 1

SANTRUMPŲ IR TERMINŲ ŽODYNAS ...... 5

SANTRAUKA ...... 6

ABSTRACT ...... 7

1 ĮVADAS ...... 8

2 PIRMINIO APDOROJIMO ANALIZĖ...... 10

2.1 Bendra apžvalga ...... 10

2.2 Dokumentų formatai ...... 10

2.2.1 Kas tai yra dokumentas ...... 10

2.2.2 Language identification palaikomi dokumentų formatai ...... 11

2.2.3 palaikomi dokumentų formatai ...... 11

2.3 Dokumentų koduotės ...... 11

2.4 Tokenizavimas ...... 12

2.4.1 Apache OpenNLP tokenizavimas ...... 12

2.4.2 Language identification tokenizavimas ...... 12

2.4.3 LingPipe tokenizavimas ...... 12

2.5 Stop words (labai dažnai pasikartojantys žodžiai) ...... 13

2.5.1 Rankinis žodyno sudarymas ...... 13

2.5.2 Žodyno sudarymas remiantis tekstyno statistika ...... 13

2.5.3 Mišrus ...... 13

2.5.4 Lietuvių kalbos sąrašai ...... 13

2.5.5 Rusų kalbos sąrašai ...... 14

2.5.6 Azerų kalbos sąrašai ...... 14

2.6 Teksto normalizavimas ...... 14

2.6.1 Kalbos identifikavimui skirtas teksto normalizavimas ...... 14

2.7 POS žymekliai ...... 15

2.7.1 Lietuvių kalbos POS žymekliai ...... 15 1 2.7.2 Rusų kalbos POS žymeklis ...... 15

2.7.3 Azerų kalbos POS žymeklis ...... 15

3 TESTAVIMAMS SKIRTI TEKSTYNAI ...... 16

3.1 Kalbos identifikavimui skito tekstyno statistika:...... 17

3.2 Lietuvių kalbos Stemmer algoritmo testavimui skirtas tekstynas ...... 17

3.2.1 Tekstyno pritaikymas testavimui ...... 18

3.3 Testavimo duomenų pertvarkymas ...... 19

3.3.1 Tekstyno statistika ...... 20

4 KALBOS IDENTIFIKAVIMAS ...... 21

4.1 Apache Tika kalbos identifikavimo biblioteka ...... 21

4.2 Cybozu labs inc. kalbos atpažinimo biblioteka ...... 21

4.3 N-gram paremtas kalbos atpažinimas...... 21

4.4 Specifiniais žodžiais paremtas kalbos atpažinimas ...... 22

4.5 Naivaus Bajeso algoritmas ...... 22

4.6 Kalbos atpažinimo algoritmų naudojimas tekstinių duomenų gavyboje ir dokumentų apdorojime ...... 23

4.7 Kalbos identifikavimo eksperimentų rezultatai ...... 23

4.7.1 Lietuvių ir latvių kalbų modelių įvertinimas ...... 24

4.7.2 Rusų, ukrainiečių ir baltarusių kalbų modelių įvertinimas ...... 26

4.7.3 Azerbaidžaniečių, turkų ir turkmėnų kalbų modelių įvertinimas ...... 28

4.7.4 Apache Tika kalbos identifikavimas ...... 29

4.7.5 Cybozu Labs kalbos identifikavimas ...... 30

4.8 Eksperimentinio testavimo, bei mokymo tekstynų paruošimas...... 30

4.8.1 Kalbos atpažinimo bibliotekos pasirinkimas ...... 30

4.8.2 Azerbaidžaniečių kalbos atpažinimo modelio kūrimas...... 30

5 STEMMER...... 32

5.1 Snowball: kamienų išskyrimo algoritmų kūrimo kalba ...... 32

5.2 Porter kamienų išskyrimo algoritmas ...... 32

5.3 Kamienų išskyrimo naudojimas informacijos gavyboje ...... 32 2 5.4 Lietuvių kalbos taisyklės ...... 33

5.4.1 Galūnė ...... 33

5.4.2 Linksniuojamų kalbos dalių galūnių rašyba ...... 33

5.4.3 Galūnės lietuvių kalboje ...... 34

5.5 Lietuviškas stemmer ...... 35

5.6 Algoritmo testavimui skirta programa ...... 35

5.7 Algoritmo papildymas ...... 36

5.8 Rusiškas Stemmer algoritmas ...... 36

5.9 Azerų Stemmer algoritmas ...... 36

5.10 Skirtingų algoritmų gauti rezultatai ...... 37

5.10.1 Algoritmo pritaikymas Daiktavardžiams ...... 37

6 PIRMINIO APDOROJIMO KOMPONENČIŲ PRITAIKYMAS KARKASINĖMS SISTEMOMS ...... 39

6.1 Karkasų palyginimas ...... 39

6.1.1 Apache UIMA karkasas ...... 39

6.1.2 LingPipe karkasas ...... 39

6.2 Pirminio apdorojimo komponenčių pritaikymas LingPipe sistemai ...... 39

6.2.1 Karkaso paruošimas naujų modulių įdiegimui ...... 39

6.2.2 Kalbos identifikavimo modulis ...... 40

6.2.3 Teksto normalizavimo modulis ...... 40

6.2.4 Stopwords modulis ...... 40

6.2.5 Stemmer modulis ...... 41

6.2.6 POS modulis ...... 41

6.2.7 Failo turinio kodavimo į UTF-8 modulis ...... 41

7 REZULTATAI IR IŠVADOS ...... 43

7.1 Magistro darbo metu gauti rezultatai ...... 43

7.2 TOLIMESNI TYRIMAI...... 44

8 LITERATŪROS SĄRAŠAS...... 45

9 Priedai...... 52 3 9.1 Priedas Nr.1 Tiriamojo darbo Nr.:1 Santrauka ...... 52

9.2 Priedas Nr.2 Tiriamojo darbo Nr.:2 Santrauka ...... 53

9.3 Priedas Nr.3 Tiriamojo darbo Nr.:3 Santrauka ...... 54

9.4 Priedas Nr.4 Snowball versija Porter kamienų išskyrimo algoritmas lietuvių kalbai .... 55

9.5 Priedas Nr.5 IVUS 2013 konferencijai pateiktas bei pristatytas straipsnis ...... 56

9.6 Priedas Nr.6 IVUS 2014 konferencijai pateiktas bei pristatytas straipsnis ...... 57

9.7 Priedas Nr.7 Pirminio apdorojimo komponentės suprogramuotos į LingPipe sistemą .. 58

9.8 Priedas Nr.: 8 Pirmojo tiriamojo darbo metu gauti rezultatai ...... 59

9.9 Priedas Nr.: 9 Antrojo tiriamojo darbo metu gauti rezultatai ...... 59

9.10 Priedas Nr.: 10 Trečiojo tiriamojo darbo metu gauti rezultatai ...... 59

4 SANTRUMPŲ IR TERMINŲ ŽODYNAS

Stemmer – lingvistinis normalizavimas Galūnė – po kamieno einanti kintamoji žodžio pabaigos dalis. Bendratis – nekaitoma veiksmažodžio forma, kurios nevaržo nei asmens, nei skaičiaus, nei laiko, nei nuosakos kategorija. Snowball – trumpų tekstinių eilučių apdorojimo kalba skirta kurti kamienų išskyrimo algoritmams, naudojama informacijos gavyboje. Paradigma – parodo žodžio kaitybos formų sistemą, asmenavimo, kirčiavimo arba linksniavimo pavyzdžius. Lema – pagrindinė žodžio forma.

JAVA – objektiškai orientuota programavimo kalba

API – Aplikacijų programavimo sąsaja

Token – žymė, simbolių seka suskirstyta į kategorijas atsižvelgiant į taisykles

N-gram – simbolių seka susidedanti iš n elementų paimti iš ilgesnės sekos

Tokenas – tam tikras apibrėžta teksto dalis: žodis, simbolis.

POS – kalbos dalis (angl. Part of speech)

5 SANTRAUKA

Autorius Raimondas Širvinskas

Pavadinimas Dokumentų pirminio apdorojimo įrankių skirtų lietuvių, rusų ir azerų analizė ir sukūrimas

Vadovas prof. dr. Tomas Krilavičius

Puslapių skaičius 60

Šiame darbe atlikta pirminio teksto apdorojimo proceso apžvalga. Išskirti pagrindiniai pirminio teksto apdorojimo etapai. Atlikta esamų pirminio teksto apdorojimo metodų apžvalga bei galimybių analizė. Priimti įrankių bei metodų pasirinkimo sprendimai. Antrojo tiriamojo darbo metu kurta stemmer įrankio programa pernaudota ir papildyta jau esamais stemmer algoritmais skirtingoms kalboms. Trečiojo tiriamojo darbo metu kurtas kalbos identifikavimo metodas palygintas su Apache Tika kalbos identifikavimo metodu ir palyginti gauti rezultatai. Atlikta Apache UIMA ir LingPipe karkasų apžvalga, įvertinus galimybes ir jau esamus pirminio teksto apdorojimo metodus pasirinkta tolimesniems tobulinimams LingPipe sistema. Pagal anksčiau apžvelgtus pirminio teksto apdorojimo metodus atrinktos bibliotekos padėsiančios atlikti reikiamus veiksmus ir LingPipe sistemai sukurti trūkstami pirminio teksto apdorojimo metodai. Metodai įdiegti į LingPipe sistemą ir aprašytos jų naudojimo instrukcijos vartotojams. Apibendrinus atliktą darbą pateikti darbo rezultatai ir išvados. Taip pat apsibrėžti tolimesnių tyrimų darbai.

6 ABSTRACT

Author Raimondas Širvinskas

Title Document preprocessing tools for lithuanian, lussian and azeri language analysis and development.

Supervisor prof. dr. Tomas Krilavičius

Number of pages 60

This paper conducted the initial review process for text processing. Isolate the basic original text processing steps. Performed the original text of the existing methods of treatment of and opportunities for analysis. Adopt the tools and methods of selection decisions. Second test work program was created Stemmer tool reused and additional to existing algorithms for different languages Stemmer. The third research work created language identification method compared with Apache Tika language identification method and compared the results. Done Apache UIMA and LingPipe frameworks review, assessment of potential and existing primary text preprocessing method selected for assessing improvements LingPipe system. According to the previously reviewed here: the original text preprocessing methods selected for the library to help you perform the necessary steps to create a system and LingPipe missing the original word- preprocessing methods. Methods to implement LingPipe system and describe their operating instructions for users. Summarizing the work of present findings and conclusions. Also defined further research work.

7 1 ĮVADAS

Nuolatos augant duomenų kiekiui nebeužtenka ne tik žmogiškų resursų jiems apdoroti, bet stinga ir kompiuterių resursų. Todėl pradėta analizuoti duomenų apdorojimo metodika, kurią patobulinus galima efektyviau išnaudoti kompiuterio resursus. Apdorojus informaciją galima ne tik sutaupyti laiko bet ir koncentruoti turimą informaciją. Informacijos apdorojimo vienas iš svarbiausių etapų yra pirminis apdorojimas. Be šio etapo jokia sistema neveiktų efektyviai. Buvo nuspręstas karkasinės pirminio apdorojimo sistemos kūrimas. Kuriame bus panaudota visa tiriamuosiuose darbuose sukaupta medžiaga. Ši sistema leis visiems atlikti pirminio apdorojimo etapą ir paruoš duomenis tolimesniam apdorojimui.

Pirminio dokumento apdorojimo procese vykdomi šie veiksmai [1]:

1) dokumento nuskaitymas, dokumentų formatų palaikymas; 2) kodavimo identifikavimas ir standartizavimas; 3) tokenizavimas, teksto skaidymas į termus; 4) fonetiniai algoritmai; 5) teksto normalizavimas; 6) kalbos atpažinimas; 7) steminimas; 8) sakinių atpažinimas; 9) jungtukai, ištiktukai; 10) kalbos dalių atpažinimas.

Sukurta sistema pagerintų įmonių darbo našumą, tvarkant ir apdorojant įmonės dokumentus. Taip pat atliktų metodų tyrimai yra lengvai pritaikomi daugumoje kitų sistemų, kurios gali būti net nesusiję su dokumentų apdorojimu. Pateiktos išvados apie sukurtą dokumentų apdorojimo sistemą, taip pat rekomendacijos kuriant tokio tipo sistemas. Aptikus trūkumus bus pateiktos rekomendacijos tolimesniems tyrimams.

Darbo tikslas – Išanalizuoti ir sukurti įrankių pirminiam dokumentų lietuvių, rusų ir azerų kalbomis apdorojimui.

8 Uždaviniai:

1. Išanalizuoti dokumentų pirminio apdorojimo grandinę, apsibrėžti jos komponentus, jų kokybės įvertinimo kriterijus.

2. Atlikti eksperimentinius tyrimus su parinktais egzistuojančiais komponentais, esant galimybei juos patobulinti.

3. Sukurti (adaptuoti) trūkstamus komponentus.

4. Apjungti dokumentų apdorojimo komponentus į vieną sistemą.

5. Dokumentuoti rezultatus, suformuluoti tolimesnes tyrimų kryptis.

Šio darbo pirmajame skyriuje pateikta problema bei jos sprendimo būdai. Antrame skyriuje atlikta pirminio apdorojimo analizė. Trečiame skyriuje aprašyti eksperimentiniams tyrimams taikyti tekstynai, bei jų statistikos. Ketvirtame skyriuje sprendžiama kalbos identifikavimo problema. Penktame skyriuje aprašyta pirmojo steminimo problema bei egzistuojantys sprendimai. Šeštame skyriuje atliktas pirminio apdorojimo karkasų palyginimas, bei aprašytos sukurto pirminio apdorojimo proceso etapų komponenčių naudojimosi instrukcijos. Septintame skyriuje pateikti rezultatai bei padarytos išvados atsižvelgiant į gautus rezultatus. Taip pat pateikta tolimesnių tyrimų planai.

9 2 PIRMINIO APDOROJIMO ANALIZĖ

2.1 Bendra apžvalga

Dokumentų pirminis apdorojimas [1] yra svarbus žingsnis informacijos gavyboje [2], informacijos saugojime, informacijos paieškos sistemose. Pagrindinis pirminio apdorojimo tikslas yra efektyviai reprezentuoti dokumentą tiek vietos, tiek paieškos efektyvumo atžvilgiu. Dokumentų pirminis apdorojimas yra sudėtingas procesas, kuris veda link dokumento reprezentavimo specialiu indeksu. Atliekant tekstinių duomenų apdorojimą vienas iš pirminių žingsnių yra pirminis teksto apdorojimas. Darbe bus panaudoti mašininio metodo algoritmai, skirti kalbos atpažinimui, dokumentų klasifikavimui bei analizei. Taip pat panaudotas „Stemmer“ algoritmas kuris buvo tobulintas lietuvių kalbai antrojo tiriamojo darbo metu. Apžvelgtos panašios sistemos ir tokių sistemų komponentai.

Pirminio dokumento apdorojimo procese vykdomi šie veiksmai [1]:

a) dokumento nuskaitymas, dokumentų formatų palaikymas; b) kodavimo identifikavimas ir standartizavimas; c) tokenizavimas, teksto skaidymas į termus; d) fonetiniai algoritmai; e) teksto normalizavimas; f) kalbos atpažinimas; g) stemmer; h) sakinių atpažinimas; i) jungtukai, ištiktukai; j) kalbos dalių atpažinimas.

2.2 Dokumentų formatai

2.2.1 Kas tai yra dokumentas

Dokumentas – tai yra informacija kokioje nors laikmenoje. Šiuo atveju dokumentu laikoma failas parašytas vienu iš populiariausiu tekstinių dokumentų formatu kuriame yra laikoma tekstinė informacija. Dirbant su tekstiniais duomenimis, svarbu žinoti, ar turimus dokumentus sistema galės apdoroti. Dokumentų formatų yra labai daug, tačiau išskiriami pagrindiniai dokumentų formatai:

10  Paprastas tekstas  HTML  SGML  XML  RTF  Email  PDF

 Microsoft Office dokumentai

 OpenOffice dokumentai

2.2.2 Language identification palaikomi dokumentų formatai

Cybozu Labs kalbos identifikavimo biblioteka palaiko tik paprasto teksto formatus, kadangi koncentruotasi ties kalbos identifikavimu. Todėl šiai sistemai patogiau yra perduoti jau nuskaitytą į kompiuterio atmintį tekstą.

2.2.3 Apache Tika palaikomi dokumentų formatai

Apache Tika pasižymi tuo, kad palaiko visus dažniausiai sutinkamus tekstinių dokumentų formatus [3]: Paprastas tekstas, HTML, XML, RTF, PDF, Microsoft Office dokumentai, OpenOffice dokumentai.

2.3 Dokumentų koduotės

Šiuo metu iš daugybės teksto koduočių pagal W3C ir IETF – UTF-8 [4] koduotė buvo laikoma standartine koduote, kurios pagalba, daugumos kalbų tekstai yra sėkmingai užkoduojami ir nelieka bėdų dėl teksto koduotės nustatymo. Todėl viso tyrimo metu kaupiami tekstynai ir įrankiai buvo kuriami naudojant UTF-8 koduotės standartus. Tačiau anksčiau sukurtuose dokumentuose yra likę skirtingų koduočių, kurias reikia atpažinti ir perkoduoti į jau, standartinę koduote tapusią, UTF-8 koduotę.

Šiam tikslui buvo pasitelkti keli koduočių atpažinimo įrankiai, su kuriais atlikus nedidelės apimties tyrimus, buvo pasirinktas vienas, kuris ir bus naudojamas viso darbo metu.

jUniversalCharDet yra Mozilla Universal Charset Detection [5] įrankio Java versija. Sukurta panaudojant egzistuojantį Mozilla teksto kodavimo atpažinimo įrankį. Šis įrankis naudojamas Mozilla Firefox naršyklėje nuo 2002 metų ir pristatytas „International Unicode Conference“ 11 Kodavimo atpažinimui buvo pasirinkta būtent ši biblioteka, todėl, kad ji atpažįsta tiek kirilicų koduotes, tiek Baltijos šalių koduotes. Taip pat atpažįsta kinų, japonų ir daug kitų koduočių.

2.4 Tokenizavimas

Tokenizavimas – tai procesas, kurio metu teksto įvestis suskaidoma į žodžius ir termus, kitaip vadinamais tokenais. Tokenai vėliau yra naudojami lemavimui, steminimui, kalbos dalių atpažinimui ir kitiems pirminio apdorojimo etapams. Tipiškai tekstas tokenizuojamas į termus ar žodžius. Tokenu yra laikoma raidžių seka (gali būti ir skaičių seka) atskirta atskyrimo simboliais, tokiais kaip: tarpai, skirtukai, eilutės pabaigos simboliai ir kiti. Kadangi tekstiniuose duomenyse gali būti ir neformalia, kalba rašytas tekstas (pavyzdžiui emocijų simboliai), todėl atskyrimo simboliai, taip pat ir skirtukai gali būti laikomi tokenais. Taip pat tekste esant datoms ir kitiems sudurtiniams tokenams tam tikri skirtukai (pvz. – simbolis) gali būti nelaikomas skirtuku, tam, kad data 2014-05-10 nebūtų išskaidoma į tris atskirus tokenus.

2.4.1 Apache OpenNLP tokenizavimas

Apache OpenNLP [6] palaiko teksto tokenizavimą į tokenus. Tokenizuoti galima trimis būdais:

1) tokenizavimas naudojant tarpo, eilutės pabaigos bei tabuliavimo simbolius; 2) tokenizavimas naudojant simbolių sekos tipą (raidės, skaičiai, skirtukai ir kita); 3) maksimalios entropijos tokenizavimas, atpažįstantis tokeno ribas pagal tikimybinį modelį.

2.4.2 Language identification tokenizavimas

Tokenizuojama naudojant taisyklėmis pagrįstais metodais, kur tokenų atskyrimo simboliai yra iš anksto apibrėžti simboliai.

2.4.3 LingPipe tokenizavimas

LingPipe palaiko teksto tokenizavimą į tokenus. Tokenizuojama tekstą dalinant į tokenus naudojant tarpo, eilutės pabaigos, tabuliavimo simbolius.

12 2.5 Stop words (labai dažnai pasikartojantys žodžiai)

Šie žodžiai dėl savo pasikartojimo tekste dažnumo praranda savo vertę informacijos gavybos sistemose, todėl siekiant optimizuoti sistemas šiuos žodžius patartina pašalinti iš indeksavimo. Dauguma žodžių priklauso šioms grupėms: 1) Priešdėliai 2) Prielinksniai 3) Jungtukai 4) Įvardžiai 5) Veiksmažodžiai

2.5.1 Rankinis žodyno sudarymas

Rankinis žodynas sudaromas atrenkant ir sudarant jungtukų, priešdėlių, prielinksnių, įvardžių sąrašus ir juos apjungiant į vieną sąrašą. Šie žodynai būna tikslūs, bet ne išsamūs, kadangi ne tik anksčiau minėti sąrašai gali būti naudojami. Vienas iš sąrašų yra raktinių veiksmažodžių sąrašas kurį reikia atrinkti rankiniu būdu pagal jo reikšmę.

2.5.2 Žodyno sudarymas remiantis tekstyno statistika

Statistinis žodynas sudaromas skaičiuojant tekstyno statistiką. Skaičiuojamas kiekvieno žodžio pasikartojimų skaičius tekste. Tuomet išvedama tekstyno žodžių statistika ir atrenkami dažniausiai pasikartojantys žodžiai tekste.

2.5.3 Mišrus

Esant galimybėms galima panaudoti abu anksčiau minėtus žodynų sudarymo būdus ir juos apjungti. Tai leistų gauti didesnį tikslumą bei papildyti dažnai pasikartojančiais žodžiais, kurie rankiniu būdu yra sunkiau atrenkami.

2.5.4 Lietuvių kalbos sąrašai

Buvo sugeneruotas statistinis lietuvių kalbos sąrašas, kuris parodė jog turėto vien jungtukų, skirtukų, įvardžių sąrašus nepakanka ir vertinga juos papildyti statistinių žodžių sąrašo dažniausiai besikartojančiais žodžiais. Buvo nuspręsta imtis – 15 procentų dažniausiai pasikartojančių žodžių.

13 2.5.5 Rusų kalbos sąrašai

Sugeneruotas rusų kalbos statistinis žodžių sąrašas iš turimo tekstyno ir išskirti dažniausiai tekste pasikartojantys žodžiai.

2.5.6 Azerų kalbos sąrašai

Sugeneruotas azerų kalbos statistinis žodžių sąrašas iš turimo tekstyno ir išskirti dažniausiai tekste pasikartojantys žodžiai. Tačiau ne esant azerų kalbos jungtukų skirtukų ir kitiems sąrašams nėra galimybės palyginti gautus rezultatus.

2.6 Teksto normalizavimas

Dažna pirminio apdorojimo procedūra yra teksto normalizavimas, pakeičiant visas didžiąsias raides į mažąsias. Tai įgalina rasti termus tekste kurie rašomi tiek didžiąja raide tiek mažąja, padeda sumažinti indekso dydį ir pagreitinti paiešką. Tai taip pat padeda paieškos varikliams, kuomet vartotojas ieškodamas automobilio Mercedes Benz dažniausiai paieškos laukelyje įveda „mercedes benz”, tačiau jam grąžinami rezultatai apima ne tik jo užklausą, bet ir „Mercedes Benz“ užklausos rezultatus, kadangi duomenyse, saugomuose apie šiuos dokumentus informacija yra saugoma mažosiomis raidėmis. Ne visad teksto normalizavimo procesas yra tinkamas, kadangi didžiųjų raidžių pakeitimas mažosiomis gali pakenkti ir galime prarasti svarbią informaciją. Dažniausiai tai būna įmonių pavadinimai, organizacijos, asmenys. Šiuo atveju naudinga būtų pirmiausia atpažinti esybes iš turimo teksto, jas indeksuoti ir tuomet tekstą normalizuoti. Kitais atvejais galimas euristinis teksto normalizavimas norint neprarasti daug naudingos informacijos yra taikyti paprastą euristiką – konvertuoti žodžius į mažąsias raides tik sakinio pradžioje, jei sakinys yra parašytas ne didžiosiomis raidėmis, šiuo atveju būtų taikomas konvertavimas į mažąsias raides visiems žodžiams. Sakinio viduje esantys žodžiai iš didžiųjų raidžių ir būtų tie žodžiai kuriuos reikia palikti tokius kokie yra. Ta pati užduotis gali būti vykdoma ir mašininio mokymo pagalba kurio dėka Sistema gali tiksliau nuspręsti ar reikia saugoti didžiosiomis raidėmis ar mažosiomis raidėmis.

2.6.1 Kalbos identifikavimui skirtas teksto normalizavimas

Kalbos identifikavimo modelio kūrimui reikalingas teksto normalizavimas. Todėl tam tikslui buvo panaudota Java biblioteka, kurios pagalba tekstas normalizuojamas į tik mažosiomis raidėmis parašytą tekstą.

14 2.7 POS žymekliai

2.7.1 Lietuvių kalbos POS žymekliai

Šiuo metu yra sukurtas lietuvių kalbos morfologinis anotatorius kurį sukūrė VDU Kompiuterinės lingvistikos centro darbuotojas Vytauto Zinkevičius, bei patobulintas Vido Daudaravičiaus ir Erikos Rimkutės. Morfologinio viena reikšminimo įrankį sukūrė ir morfologiniame anotatoriuje pritaikė Vidas Daudaravičius [7]. Panaudojus šį įrankį galima nustatyti tokeno kalbos dalį. Tačiau šis įrankis yra prieinamas tik internetu ir tik ne komercinei veiklai, todėl esant dideliems duomenų srautams šis įrankis nėra tinkamas, nes esant didesnei apkrovai ši sistema neveikia.

2.7.2 Rusų kalbos POS žymeklis

RussianPOSTagger [8] – Andrew Krizhanovsky sukurta programa, kuri leidžia atpažinti kalbos dalį. Šiam tikslui buvo panaudotas „Lemmatizer“ [9] ir iš liemuoklio paimami kalbos dalį identifikuojantys duomenys. Šis kalbos dalių žymeklis buvo kurtas GATE sistemai ir sėkmingai naudojamas šioje sistemoje.

2.7.3 Azerų kalbos POS žymeklis

Šiai kalbai pritaikyto POS žymeklio nepavyko rasti. Tačiau buvo rasta informacijos, kad jis jau yra kuriamas.

15 3 TESTAVIMAMS SKIRTI TEKSTYNAI

Norint teisingai įsivertinti algoritmus buvo privalu turėti gerą tekstyną. Tam buvo pasitelkta jCrawler JAVA biblioteka. Tinkamai susikonfigūravus programą ir pasinaudojus API buvo galima vienu metu skanuoti interneto portalus įvairiomis kalbomis ir nesumaišyti nuskanuotų interneto svetainių straipsnių tarpusavyje. Sistema buvo suprogramuota veikti taip, kad iš anksto surašius svetainių adresus pagal kalbas, svetainių turinys būtų saugomas į atitinkamas direktorijas, pagal svetainės adresą. Nuskanuoti, lietuvių, latvių, rusų, ukrainiečių, baltarusių, turkų, turkmėnų bei azerbaidžaniečių kalbomis, interneto portalai. Sukauptas tekstynas buvo sudarytas iš aštuonių kategorijų, kur kiekviena kategorija atitiko vieną kalbą. Viso tekstyno apimtis sudarė 106418 dokumentų(detalesnė statistika pateikiama lentelėje 2 ir lentelėje 2), iš kurių:  23680 dokumentai lietuvių kalba;  13981 dokumentas latvių kalba;  18355 dokumentai rusų kalba;  2784 dokumentai ukrainiečių kalba;  18081 dokumentas baltarusių kalba;  11452 dokumentai turkų kalba;  3000 dokumentų turkmėnų kalba;  15085 dokumentai azerbaidžaniečių kalba.

16 3.1 Kalbos identifikavimui skito tekstyno statistika:

Lentelė 1. Pasirinkti bei sudaryti tekstynai ir juose esančių tokenų kiekiai. Tekstyno kalba Tokenų kiekis tekstyne Lietuvių kalba 21125520 Latvių kalba 47769830 Rusų kalba 107794165 Ukrainiečių kalba 10219320 Baltarusių kalba 82269445 Turkų kalba 134080280 Turkmėnų kalba 4889350 Azerbaidžaniečių kalba 66175075

Lentelė 2. Pasirinkti bei sudaryti tekstynai ir juose esančių sakinių kiekiai.

Tekstyno kalba Sakinių kiekis tekstyne Lietuvių kalba 3921895 Latvių kalba 8320375 Rusų kalba 16588900 Ukrainiečių kalba 1548195 Baltarusių kalba 14778335 Turkų kalba 25377665 Turkmėnų kalba 673165 Azerbaidžaniečių kalba 10751225

3.2 Lietuvių kalbos Stemmer algoritmo testavimui skirtas tekstynas

Norint teisingai įsivertinti algoritmą buvo privalu turėti gerą tekstyną. Tam buvo pasitelkti J. Kapočiūtės-Dzikienės turimus paradigmų tekstynus [Klaida! Nerastas nuorodos altinis.], kuriuos buvo galima pritaikyti ir panaudoti algoritmo testavimui. Testavimui skirti duomenys buvo suskirstyti į septyniolika skirtingų duomenų failų, tam, kad būtų lengviau identifikuoti algoritmo silpnąsias vietas:  Daiktavardžiai  Būdvardžiai  Veiksmažodžiai  Būdiniai  Dalelytės  Akronimai 17  Dalyviai  Ištiktukai  Įvardžiai  Jungtukai  Jaustukai  Padalyviai  Prielinksniai  Priveiksimai  Pusdalyviai  Skaitvardžiai  Santrumpos

3.2.1 Tekstyno pritaikymas testavimui

Turimuose tekstynuose buvo saugoma žodžių lemos ir visos tų žodžių paradigmos, to pakako norint sukurti testavimui skirtą tekstyną. Programos pagalba iš turimų duomenų buvo sugeneruoti žodžių ir lemų deriniai. Eilutės pradžioje aprašyta žodžio šaknis, vėliau nurodoma žodžio giminė ir toliau seka visos to žodžio galūnės, kurių pagalba galima nesunkiai sukonstruoti pilnus žodžius. Tekstyne viena eilutė atstodavo pilną žodį ir žodžio nekaitomą dalį atskirtus dvitaškiu [Klaida! Nerastas nuorodos šaltinis.], tam, kad vėliau būtų galima lengviau vykdyti estavimą.

Pav. 1 Duomenų failo pavyzdys

18

Pav. 2 Sutvarkyto duomenų failo pavyzdys

Peržiūrėjus duomenis buvo nuspręsta atsisakyti tokių duomenų failų kaip:

1) Būdiniai 2) Dalelytės 3) Akronimai 4) Dalyviai 5) Ištiktukai 6) Jungtukai 7) Jaustukai 8) Prielinksniai 9) Santrumpos

3.3 Testavimo duomenų pertvarkymas

Tyrimo pradžioje algoritmai buvo testuojami naudojant visus turimus duomenis, ko pasėkoje būdavo sunku aptikti algoritmo silpnąsias vietas ir jas taisyti. Tam tikslui buvo atsitiktiniu būdu atrinkta ~1200 žodžių iš skirtingų tekstynų. Taip pat sumažinus testavimo duomenų apimtį buvo galima rankiniu būdu peržiūrėti ir patikrinti žodžius, esančius tekstyne, kadangi dalis jų buvo klaidingi arba nevartotini.

19 3.3.1 Tekstyno statistika

TEKSTYNO STATISTIKA

1397592

724384

339719

241933

63331

58780

7677

1763

1122 751

Pav. 3 Sutvarkyto duomenų failo pavyzdys. Tekstyno statistika. Pasirinkti bei sudaryti tekstynai ir juose esančių žodžių kiekiai.

20

4 KALBOS IDENTIFIKAVIMAS

4.1 Apache Tika kalbos identifikavimo biblioteka

Apache Tika [10] yra įrankių rinkinys skirtas turinio analizei. Pradėtas kurti Chris Mattmann ir Jerome Charron 2006 metais. Apache Tika biblioteka, skirta dokumento kalbos identifikavimui, meta duomenų ištraukimui. Ši biblioteka palaiko 27 kalbų atpažinimą. Ir yra naudojama daugumoje Apache projektų, tokių kaip [11], [12], Apache OODT [13] (object oriented data technology). Kalbos atpažinimas paremtas n-gram kalbų modeliais. Nors Apache Tika palaiko tik 27 kalbų atpažinimą, tačiau turi daugybę įvairių įrankių dokumentų ir duomenų apdorojimu. todėl ją naudoja NASA Ground Data Systems [14] kur duomenų gaunama 700 terabaitų per sekundę, taip pat NASA DESDynl [14] kur duomenų gaunama 16 terabaitų per dieną.

4.2 Cybozu labs inc. kalbos atpažinimo biblioteka

Cybozu Labs [15] sukurta kalbos atpažinimo biblioteka, platinama viešai pagal Apache 2.0 licenciją. Kalbai atpažinti naudoja n-gram, kartu su naiviu Bajeso algoritmu. Biblioteka turi sukurtau penkiasdešimt tris kalbos n-gram modelius, kurių visų bendras tikslumas siekia 99%.

Biblioteka naudojama kaip tekstų tam tikra kalba paieškai, kaip elektroninių laiškų filtro dalis, taip pat naudojama interneto paieškos varikliuose, forumuose. Biblioteka palaiko teksto kodavimo identifikavimą, identifikuotas tekstas konvertuojamas į UTF-8 formatą. Taip pat biblioteka turi galimybę kalbos atpažinimo metu, pateikti tikimybes kelioms kalboms, kas leidžia matyti, kurios kalbos siejasi panašumu, taip pat patogu kalbos modelių tobulinimui ir tikrinimui.

Algoritmui pagreitini įvesta taisyklė, kad esant tikimybei, didesnei nei 0,99999, kalbos atpažinimo algoritmas yra stabdomas ir rezultatas gražinamas. Taip sutaupomi kompiuterio resursai ir laikas.

Biblioteka turi „triukšmo filtrą“, kurio pagalba panaikinami tokie simboliai ar jų sekos, kurie yra nepriklausomi nuo kalbos, tokie kaip skaičiai, simboliai, nuorodos, pašto adresai. Pašalinami lotyniški simboliai visame tekste, jei jų dažnumas yra mažesnis nei dvidešimt procentų viso teksto. Panaikinta „nulinio dažnumo“ problema, kuomet tam tikras simbolis ar n- gram nėra panaudota mokymo tekstyne.

4.3 N-gram paremtas kalbos atpažinimas.

N-gram yra tam tikromis, vienodomis dalimis padalinta teksto dalis. Jos sugeneruojamos iš teksto, su ilgiu n kiekvienai n-gram, n parenkamas iš anksto. Padalijus tekstą į n-gramas

21 paskaičiuojamas jų dažnumas tekste, taip pat jas galima surūšiuoti pagal jų dažnumą. Mažiausiai pasikartojusios n-gram atmetamos ir taip gaunamas atitinkamos kalbos n-gram profilis. Vėliau, iš nežinomo sugeneruojamos n-gram profilis ir lyginamas su anksčiau sukurtais kalbų profiliais. Palyginimas vyksta skaičiuojant atstumtus tarp kalbos profilio n-gram ir nežinomo teksto n-gram profilio (paveikslas 4).

Pav. 4 N-gram kalbos profilio bei lyginamojo teksto atstumo skaičiavimas. 4.4 Specifiniais žodžiais paremtas kalbos atpažinimas

Kiekviena kalba turi savo specifinius trumpus žodžius (angl. Stopwords), kurių pagalba galima atpažinti teksto kalbą, pagal jame naudojamus trumpus žodžius, kaip jungtukai, jaustukai, ištiktukai ir taip toliau. Juos galima panaudoti kaip žodynus, specifinius tik tam tikrai kalbai. Tačiau šis metodas netinka trumpiems tekstams, nes tekste gali būti nepanaudotas specifinis žodis ir tekstas lieka neatpažintas.

4.5 Naivaus Bajeso algoritmas

Naivaus Bajeso [16] klasifikatorius (formulė 1) yra paprastas tikimybinis klasifikatorius, kuris remiasi Bajeso teorema su stipriomis ir naiviomis nepriklausomumo prielaidomis (formulė 1).

P(x|c)P(c) 푃(푐|푥) = (1) P(x)

Jis yra vienas iš pagrindinių teksto klasifikavimo metodų, naudojamas el. pašto šiukšlių atpažinimui, asmeninio pašto rūšiavimui, dokumentų kategorizavimui, kalbos atpažinimui ir

22 sentimentų atpažinimui. Nepaisant naivaus projektavimo ir labai paprastų prielaidų, kurias šis metodas naudoja, Naivaus Bajeso algoritmas susidoroja su daugeliu sudėtingų problemų.

Nors jei jį lenkia kiti metodai, Naivus Bajeso klasifikatorius yra labai veiksmingas, nes jis yra mažai reiklus kompiuterio resursams (tiek procesoriaus, tiek atminties atžvilgiu) ir jam pakanka nedidelio mokymo duomenų kiekio. Taip pat ir mokymo laikas yra gerokai mažesnis, palyginus su alternatyviais algoritmais.

4.6 Kalbos atpažinimo algoritmų naudojimas tekstinių duomenų gavyboje ir dokumentų apdorojime

Kalbos atpažinimas yra vienas iš pagrindinių duomenų apdorojimo uždavinių. Sėkminga dokumento ar gauto teksto analizė reikalauja nepriekaištingo kalbos atpažinimo algoritmo. Jei kalba atpažįstama neteisingai, tuomet tolimesnis dokumento ar teksto apdorojimas gali būti tik betikslis kompiuterio resursų ir laiko švaistymas, nes vėliau tekstas gali būti apdorojamas kitai kalbai būdingais algoritmais. Pavyzdžiui latviškas tekstas, klaidingai atpažinus jo kalbą, vėliau gali būti apdorojamas lietuvišku „Stemmer“ algoritmu, kuris sugadintų tekstą.

Duomenų gavyboje kalbos atpažinimas reikalingas iškart atpažinti teksto kalbą, kas leidžia atsirinkti ir pasilikti tik reikiamos kalbos tekstus. Kalbos atpažinimo procesas yra greitas, todėl toks procesas ne tik neužgaišta laiko, bet taip pat jį ir taupo. Tai neleidžia susidaryti ilgoms eilėms duomenų apdorojimo grandinėje ir veltui neeikvoja kompiuterio resursų.

4.7 Kalbos identifikavimo eksperimentų rezultatai

Atlikus eksperimentus kiekvienai kalbai buvo apskaičiuoti kalbos atpažinimo modeli įvertinimo rodikliai. Kalbos atpažinimo sistema, paprastai yra vertinama remiantis, kaip jos priskyrimas kažkuriai iš kalbų siejasi su tikrąja teksto kalba. Tai gali generuoti keturias skirtingas klaidas. 1. Kalba buvo visiškai klaidingai atpažinta sistemos;

2. Teksto kalba buvo atpažinta klaidingai, esant daugiakalbiui tekstui.

3. Sistema klaidingai atpažino kalbą ir priskyrė giminingai kalbai.

4. Sistema nežinojo kuriai iš kalbų priskirti tekstą, nes gautos panašios tikimybės visoms tai kalbai giminingoms kalboms.

Sistemos teikiamas rezultatas priklauso nuo to, kaip šios klaidos yra skaičiuojamos. Todėl lyginant rezultatus reikia tiksliai išsiaiškinti, kaip skaičiuojamas tikslumas ir išsamumas [17] (atitinkamai 2, 3 ir 4 formulės įverčių skaičiavimui pateikiamos 4.7.1 skyriuje).

23 4.7.1 Lietuvių ir latvių kalbų modelių įvertinimas

Pirmuoju bandymu su esamu lietuvių kalbos atpažinimo modeliu iš 23680 tekstų buvo teisingai suklasifikuoti 18654 tekstai. Dėl didelio klaidų kiekio nuspręsta patikrinti kalbos modelį ir esamajame kalbos modelyje aptikta kirilicos bei kitų ne lietuviškų simbolių n-gram. Todėl siekiant padidinti tikslumą iš esamo modelio buvo pašalintos n-gram kurios turėjo nelietuviškų simbolių, taip pat iš mokymui skirto tekstyno sukurtas n-gram masyvas kuris palygintas su esamu ir esamas modelis papildytas tomis n-gram kurių kalbos modelis neturėjo, taip padidintas kalbos modelio turtingumas ir tikslumas. Antruoju bandymu su patobulintu lietuvių kalbos atpažinimo modeliu iš 23680 tekstų teisingai buvo suklasifikuoti 23652 tekstai. Kiti 28 tekstai buvo klaidingai arba pusiau klaidingai atpažinti, todėl, kad tekste buvo vartojama daug tarptautinių žodžių ar dėl kalbų panašumo. Iš jų 25 tekstai buvo priskirti įvairioms kalboms, dėl to, kad tekste buvo panaudota daug žodžių kitomis kalbomis, pavyzdžiui sporto komandų pavadinimai. 18 tekstų buvo sporto tematika. Trys tekstai buvo priskirti latvių kalbai, dėl kalbos panašumo. Ir dešimt tekstų buvo priskirta klaidingai dėl tekste minimų tarptautinių žodžių, pavadinimų ar pavardžių. Rezultatai pateikiami (Klaida! Nerastas nuorodos šaltinis.) Klasifikuoti rezultatai pateikiami 3 lentelėje. Pagal 2 ormulę paskaičiuotas taikyto metodo tikslumas, pagal 2 formulę paskaičiuotas išsamumas ir pagal 4 formulę paskaičiuotas F-įvertis ir gauti rezultatai pateikti 4 lentelėje. Klasifikuojant tekstus latvių kalba iš 13981 tekstų teisingai buvo suklasifikuoti 13801 tekstai. Kiti 180 tekstų buvo klaidingai arba pusiau klaidingai atpažinti, todėl, kad tekste buvo vartojama daug tarptautinių žodžių ar dėl kalbų panašumo. Iš jų 151 tekstas buvo priskirtas įvairioms kalboms, dėl to, kad tekste buvo panaudota daug žodžių kitomis kalbomis, pavyzdžiui sporto komandų pavadinimai. 68 tekstai buvo sporto tematika. 29 tekstai buvo priskirti lietuvių kalbai, dėl kalbos panašumo. Ir 83 tekstai buvo priskirti klaidingai dėl tekste minimų tarptautinių žodžių, pavadinimų ar pavardžių. Klasifikuoti rezultatai pateikiami 5 lentelėje. Pagal 2 formulę paskaičiuotas taikyto metodo tikslumas, pagal 2 formulę paskaičiuotas išsamumas ir pagal 4 formulę paskaičiuotas F-įvertis ir gauti rezultatai pateikti 6 lentelėje.

Kadangi klaidingai teigiamų ir teisingai neigiamų rezultatų testuojant tik lietuviškus tekstus gauti neįmanoma, buvo nuspręsta klaidingai teigiamus it teisingai neigiamus rezultatus laikyti klaidingai ir teisingai suklasifikuotus tekstus pagal giminingas kalbas. Latviškus tekstus priskirtus lietuvių kalbai laikyti klaidingai teigiamais , lietuvių kalbos atžvilgiu ir Lietuviškus tekstus priskirtus latvių kalbai laikyti klaidingai teigiamais, latvių kalbos atžvilgiu.

24 (2) 푡푡 = Tikslumas [18] 푡푡 + 푘푡

(3) 푡푡 Išsamumas [18] = 푡푡 + 푘푛

(4) 푡푖푘푠푙푢푚푎푠 ∗ 푖š푠푎푚푢푚푎푠 F-įvertis [18] = 2 ∗ 푡푖푘푠푙푢푚푎푠 + 푖š푠푎푚푢푚푎푠

Lentelė 3. Rezultatų klasifikavimas lietuvių kalbos atpažinimo modeliui [19] tt – 23652 kt – 29 (teisingai teigiami) (klaidingai teigiami) Teisingai suklasifikuotas tekstas Kita kalba parašytas tekstas priskirtas lietuvių kalbai kn – 28 tn – 0 (klaidingai neigiami) teisingai neigiami Tekstas kuris yra lietuvių kalba Kita kalba parašytas tekstas nepriskirtas lietuvių neatpažintas kalbai

Lentelė 4. Rezultatų įverčiai lietuvių kalbos atpažinimo modeliui F-įvertis 0.999

Tikslumas 0.999

Išsamumas 0.999

Lentelė 5. Rezultatų klasifikavimas latvių kalbos atpažinimo modeliui [19] tt – 13801 kt – 3 (teisingai teigiami) (klaidingai teigiami) Teisingai suklasifikuotas tekstas Kita kalba parašytas tekstas priskirtas latvių kalbai kn – 180 tn – 0 (klaidingai neigiami) teisingai neigiami Tekstas kuris yra latvių kalba neatpažintas Kita kalba parašytas tekstas nepriskirtas latvių kalbai

Lentelė 6. Rezultatų įverčiai latvių kalbos atpažinimo modeliui F-įvertis 0.993

Tikslumas 0,999

Išsamumas 0.987

Blogai suklasifikuoto tekstų pavyzdys: „Į trečią vietą pakilo "Liverpool" komanda, namie 1:0 įveikusi "Leisester City" futbolininkus. "Liverpool" sąskaitoje 18 taškų po 10 rungtynių. Įspūdingą pergalę iškovojo

25 nesėkmingai čempionatą pradėję Londono "Chelsea" futbolininkai, namie net 6:1 sutriuškinę "Coventry City" komandą. Net 4 įvarčius į varžovų vartus įmušęs olandas Jimmy Floyd Hasselbaink (Džimis Floidas Haselbainkas) ...“

4.7.2 Rusų, ukrainiečių ir baltarusių kalbų modelių įvertinimas

Klasifikuojant tekstus rusų kalba iš 18355 tekstų teisingai buvo suklasifikuoti 18318 tekstai. Kiti 37 tekstai buvo klaidingai arba pusiau klaidingai atpažinti, todėl, kad tekste buvo vartojama daug tarptautinių žodžių ar dėl kalbų panašumo, tekstai buvo suklasifikuoti kaip anglų kalba parašyti tekstai, buvo priskirti klaidingai dėl tekste minimų tarptautinių žodžių, pavadinimų ar pavardžių. Klasifikuoti rezultatai pateikiami 7 lentelėje. Pagal 2 formulę paskaičiuotas taikyto metodo tikslumas, pagal 3 formulę paskaičiuotas išsamumas ir pagal 4 formulę paskaičiuotas F-įvertis ir gauti rezultatai pateikti 8 lentelėje. Klasifikuojant tekstus baltarusių kalba iš 18081 tekstų teisingai buvo suklasifikuoti 17637 tekstai. Kiti 444 buvo klaidingai priskirti, iš jų 430 rusų kalbai, o 14 tekstų buvo klaidingai arba pusiau klaidingai atpažinti, todėl, kad tekste buvo vartojama daug tarptautinių žodžių ar dėl kalbų panašumo, tekstai buvo suklasifikuoti kaip anglų kalba parašyti tekstai, buvo priskirti klaidingai dėl tekste minimų tarptautinių žodžių, pavadinimų ar pavardžių. Klasifikuoti rezultatai pateikiami 9 lentelėje. Pagal 2 formulę paskaičiuotas taikyto metodo tikslumas, pagal 2 formulę paskaičiuotas išsamumas ir pagal 4 formulę paskaičiuotas F-įvertis ir gauti rezultatai pateikti 10 lentelėje. Klasifikuojant tekstus ukrainiečių kalba iš 2784 tekstų teisingai buvo suklasifikuoti 2136 tekstai. Kiti 648 buvo klaidingai priskirti, iš jų 449 rusų kalbai, o 199 tekstai buvo klaidingai arba pusiau klaidingai atpažinti ir priskirti kitoms kalboms, todėl, kad tekste buvo vartojama daug tarptautinių žodžių ar dėl kalbų panašumo, tekstai buvo suklasifikuoti kaip anglų kalba parašyti tekstai, buvo priskirti klaidingai dėl tekste minimų tarptautinių žodžių, pavadinimų ar pavardžių. Klasifikuoti rezultatai pateikiami 11 lentelėje. Pagal 2 formulę paskaičiuotas taikyto metodo tikslumas, pagal 3 formulę paskaičiuotas išsamumas ir pagal 4 formulę paskaičiuotas F-įvertis ir gauti rezultatai pateikti 12 lentelėje. Kadangi klaidingai teigiamų ir teisingai neigiamų rezultatų testuojant tik rusiškus tekstus gauti neįmanoma, buvo nuspręsta klaidingai teigiamus it teisingai neigiamus rezultatus laikyti klaidingai ir teisingai suklasifikuotus tekstus pagal giminingas kalbas. baltarusiškus ir ukrainietiškus tekstus priskirtus rusų kalbai laikyti klaidingai teigiamais , rusų kalbos atžvilgiu ir rusiškus tekstus priskirtus baltarusių ar ukrainiečių kalbai laikyti klaidingai teigiamais, baltarusių ar ukrainiečių kalbos atžvilgiu.

26 Lentelė 7. Rezultatų klasifikavimas rusų kalbos atpažinimo modeliui [19] tt – 18318 kt – 879 (teisingai teigiami) (klaidingai teigiami) Teisingai suklasifikuotas tekstas Kita kalba parašytas tekstas priskirtas rusų kalbai kn – 37 tn – 0 (klaidingai neigiami) teisingai neigiami Tekstas kuris yra rusų kalba neatpažintas Kita kalba parašytas tekstas nepriskirtas rusų kalbai

Lentelė 8. Rezultatų įverčiai rusų kalbos atpažinimo modeliui F-įvertis 0.976

Tikslumas 0.954

Išsamumas 0.998

Lentelė 9. Rezultatų klasifikavimas baltarusų kalbos atpažinimo modeliui [19] kt – 0 tt – 17637 (klaidingai teigiami) (teisingai teigiami) Kita kalba parašytas tekstas priskirtas baltarusių Teisingai suklasifikuotas tekstas kalbai kn – 444 tn – 0 (klaidingai neigiami) teisingai neigiami Tekstas kuris yra baltarusių kalba Kita kalba parašytas tekstas nepriskirtas baltarusių neatpažintas kalbai

Lentelė 10. Rezultatų įverčiai baltarusų kalbos atpažinimo modeliui F-įvertis 0,987

Tikslumas 1,000

Išsamumas 0.975

Lentelė 11. Rezultatų klasifikavimas ukrainiečių kalbos atpažinimo modeliui [19] kt – 0 tt – 2136 (klaidingai teigiami) (teisingai teigiami) Kita kalba parašytas tekstas priskirtas ukrainiečių Teisingai suklasifikuotas tekstas kalbai kn – 648 tn – 0 (klaidingai neigiami) teisingai neigiami Tekstas kuris yra ukrainiečių kalba Kita kalba parašytas tekstas nepriskirtas ukrainiečių neatpažintas kalbai

Lentelė 12. Rezultatų įverčiai ukrainiečių kalbos atpažinimo modeliui F-įvertis 0.868

27 Tikslumas 1,000

Išsamumas 0.767

4.7.3 Azerbaidžaniečių, turkų ir turkmėnų kalbų modelių įvertinimas

Atlikus eksperimentą su azerbaidžaniečių kalbos atpažinimo modeliu iš 15085 tekstų teisingai buvo suklasifikuoti 14791 tekstai. 294 tekstai buvo klaidingai arba pusiau klaidingai atpažinti, iš jų 54 tekstai suklasifikuoti kaip turkų kalbos tekstai, todėl, kad tekste buvo vartojama daug tarptautinių žodžių ar dėl kalbų panašumo. Klasifikuoti rezultatai pateikiami 13 lentelėje. Pagal 2 formulę paskaičiuotas taikyto metodo tikslumas, pagal 3 formulę paskaičiuotas išsamumas ir pagal 4 formulę paskaičiuotas F-įvertis ir gauti rezultatai pateikti 14 lentelėje. Klasifikuojant tekstus turkų kalba iš 11452 tekstų teisingai buvo suklasifikuoti 11421 tekstai. Kiti 31 tekstai buvo klaidingai arba pusiau klaidingai atpažinti, todėl, kad tekste buvo vartojama daug tarptautinių žodžių ar dėl kalbų panašumo. Iš jų nebuvo nei vieno teksto suklasifikuoto kaip azerbaidžaniečių ar turkmėnų kalba. Klasifikuoti rezultatai pateikiami 15 lentelėje. Pagal 2 formulę paskaičiuotas taikyto metodo tikslumas, pagal 3 formulę paskaičiuotas išsamumas ir pagal 4 formulę paskaičiuotas F-įvertis ir gauti rezultatai pateikti 16 lentelėje. Klasifikuojant tekstus turkmėnų kalba iš 3000 tekstų teisingai buvo suklasifikuoti 2957 tekstai. Kiti 43 tekstai buvo klaidingai arba pusiau klaidingai atpažinti, todėl, kad tekste buvo vartojama daug tarptautinių žodžių ar dėl kalbų panašumo. Iš jų nebuvo nei vieno teksto suklasifikuoto kaip azerbaidžaniečių ar turkų kalba. Klasifikuoti rezultatai pateikiami 17 lentelėje. Pagal 2 formulę paskaičiuotas taikyto metodo tikslumas, pagal 3 formulę paskaičiuotas išsamumas ir pagal 4 formulę paskaičiuotas F-įvertis ir gauti rezultatai pateikti 18 lentelėje. Lentelė 13. Rezultatų klasifikavimas azerbaidžaniečių kalbos atpažinimo modeliui [19] kt – 0 tt – 15085 (klaidingai teigiami) (teisingai teigiami) Kita kalba parašytas tekstas priskirtas Teisingai suklasifikuotas tekstas azerbaidžaniečių kalbai kn – 294 tn – 0 (klaidingai neigiami) teisingai neigiami Tekstas kuris yra azerbaidžaniečių kalba Kita kalba parašytas tekstas nepriskirtas neatpažintas azerbaidžaniečių kalbai

Lentelė 14. Rezultatų įverčiai azerbaidžaniečių kalbos atpažinimo modeliui F-įvertis 0.990

28 Tikslumas 1,000

Išsamumas 0.981

Lentelė 15. Rezultatų klasifikavimas turkų kalbos atpažinimo modeliui [19] tt – 11421 kt – 54 (teisingai teigiami) (klaidingai teigiami) Teisingai suklasifikuotas tekstas Kita kalba parašytas tekstas priskirtas turkų kalbai kn – 31 tn – 0 (klaidingai neigiami) teisingai neigiami Tekstas kuris yra turkų kalba neatpažintas Kita kalba parašytas tekstas nepriskirtas turkų kalbai

Lentelė 16. Rezultatų įverčiai turkų kalbos atpažinimo modeliui F-įvertis 0.996

Tikslumas 0,995

Išsamumas 0.997

Lentelė 17. Rezultatų klasifikavimas turkmėnų kalbos atpažinimo modeliui [19]

kt – 0 tt – 2957 (klaidingai teigiami) (teisingai teigiami) Kita kalba parašytas tekstas priskirtas turkmėnų Teisingai suklasifikuotas tekstas kalbai kn – 43 tn – 0 (klaidingai neigiami) teisingai neigiami Tekstas kuris yra turkmėnų kalba Kita kalba parašytas tekstas nepriskirtas turkmėnų neatpažintas kalbai

Lentelė 18. Rezultatų įverčiai turkmėnų atpažinimo modeliui F-įvertis 0.993

Tikslumas 1,000

Išsamumas 0.986

4.7.4 Apache Tika kalbos identifikavimas

Lentelė 19. Apache Tika kalbos identifikavimo rezultatai Tekstyno kalba Tikslumas Išsamumas F-įvertis Azerų - - - Baltarusių 1.000 0.096 0.175 29 Latvių - - - Lietuvių 1.000 0.999 0.999 Rusų 1.000 0.996 0.998 Turkų - - - Turkmėnų - - - Ukrainiečių 1.000 0.768 0.868

4.7.5 Cybozu Labs kalbos identifikavimas

Lentelė 20. Cybozu Labs identifikavimo rezultatai. Tekstyno kalba Tikslumas Išsamumas F-įvertis Azerų 1.000 0.981 0.990 Baltarusių 1.000 0.975 0.987 Latvių 0.999 0.987 0.993 Lithuanian 0.999 0.999 0.999 Russian 0.954 0.998 0.976 Turkish 0.995 0.997 0.996 Turkmen 1.000 0.986 0.993 Ukrainian 1.000 0.767 0.868 4.8 Eksperimentinio testavimo, bei mokymo tekstynų paruošimas.

Tam, kad teisingai įvertinti kalbos atpažinimo metodus bei kalbų modelius reikia tinkamai pasiruošti mokymo bei testavimo tekstynus. Tekstynas buvo pasirinkta išmėginti du skirtingus variantus, kur pirmasis variantas buvo mokymo imtį pasirinkti dešimt procentų viso tekstyno ir devyniasdešimt procentų tekstyno palikti testavimui, o antrasis variantas buvo dvidešimt procentų tekstyno imti mokymui ir aštuoniasdešimt procentų tekstyno naudoti testavimui. Tekstai mokymams paimti atsitiktine tvarka pagal kalbą, kadangi kiekvienas kalbos modelis buvo kuriamas tik iš tos kalbos tekstyno dalies.

4.8.1 Kalbos atpažinimo bibliotekos pasirinkimas

Išnagrinėjus pirmajame skyriuje apžvelgtus egzistuojančius sprendimus, buvo nuspręsta nekurti naujo kalbos atpažinimo algoritmo, nes jau yra sukurtas algoritmas, kuris veikia virš devyniasdešimt devynių procentų tikslumu. Tačiau ši biblioteka, kaip ir likusios kitos nepalaikė azerbaidžaniečių kalbos atpažinimo, todėl nuspręsta sukurti ir ištestuoti sukurta kalbos atpažinimo modelį su jau ištestuota biblioteka.

4.8.2 Azerbaidžaniečių kalbos atpažinimo modelio kūrimas.

Atlikus išankstinius tyrimus buvo išsiaiškinta, jog azerbaidžaniečių kalba yra gimininga ir panaši į turkų bei turkmėnų kalbas. Todėl kalbos atpažinimo modelį reikėjo tikrinti ir su šiomis kalbomis. Turkų kalbai jau egzistavo sukurtas kalbos atpažinimo modelis, todėl norint tinkamai

30 įvertinti azerbaidžaniečių kalbos atpažinimo modelį reikia patikrinti ir su kitomis kalbomis, kadangi kalbos modelis turi atpažinti tik azerbaidžaniečių kalba parašytus dokumentus.

Mokymo duomenys buvo apdoroti paprastais metodais, kurie pašalino „teksto triukšmą“. Panaikinti skaitmenys, interneto nuorodų adresai, elektroninio pašto adresai. Tekste esančios didžiosios raidės pakeistos mažosiomis, taip pat panaikinti skyrybos ženklai, tokie kaip klaustukai, šauktukai ar kabutės.

N-gram kalbos atpažinimo modelis buvo sukurtas atsižvelgiant į 4.2 skyriuje apžvelgtą kalbos atpažinimo metodiką. Mokymo tekstynas buvo suskaidytas į trigramas, vėliau jos buvo surūšiuotos pagal dažnumą. Suskaičiavus kiekvienos trigramos dažnumus, retai pasikartojančios trigramos buvo pašalintos iš sąrašo. Iš likusio sąrašo buvo panaikinti trigramų dublikatai ir taip gautas pradinis azerbaidžaniečių kalbos modelis.

Vėliau šis kalbos modelis buvo rankiniu būdu peržiūrėtas ar nėra likę klaidingų įrašų. Rastos klaidos pašalintos ir padarius išvadas pagal rastas klaidas, patobulintas trigramų kalbos modelio generavimo procesas.

31 5 STEMMER

5.1 Snowball: kamienų išskyrimo algoritmų kūrimo kalba

Algoritminiai kamienų išskyrimai vis dar yra puikus įrankis informacijos gavyboje. Vis dėl to yra ne vienas kamienų išskyrimo algoritminių aprašymų. Vienas iš jų yra [20] Snowball, kuria galima tiksliai apibrėžti kamienų išskyrimo procesą, taip pat iš kurio galima greitai sugeneruoti C kalbos arba Java kalbos kamienų išskyrimo algoritmų programas. Yra dvi pagrindinės priežastys kurti Snowball algoritmus. Pirmoji tai lengvai prieinami kamienų išskyrimo algoritmai sukurti kitoms kalboms. Iš kurių galima pasisemti idėjų bei žinių. Antroji yra lengvai suvokiamos klaidos algoritme, ko pasėkoje gaunami tiksliai realizuoti kamienų išskyrimo algoritmai pritaikyti norimai kalbai.

5.2 Porter kamienų išskyrimo algoritmas

Porter kamienų išskyrimo algoritmas [21], tai žodžio morfologinių galūnių pašalinimo procesas. Jo pagrindinė paskirtis dalis yra termų normalizavimo proceso, kuris įprastai, yra atliekamas kuriant informacijos paieškos ir gavybos sistemas. Pirmasis kamienų išskyrimo algoritmas buvo sukurtas 1979 metais, kompiuterių laboratorijoje Kembridže, kaip dalis didesnio informacijos gavybos projekto. Nuo 1999 metų algoritmas plačiai paplito visuomenėje ir dabar jau yra perrašytas apie 27 skirtingomis programavimo kalbomis. Stemmer algoritmas yra lingvistinis normalizavimas, kuris iš įvairių žodžių formų variantų sutraukia juos į vieną bendrą formą. Taip pat svarbu žinoti jog kamienų išskyrimo algoritmas naudojamas pagerinti informacijos gavybos sistemų našumą. Žiūrint iš gramatinio požiūrio kamienų išskyrimo algoritmas gali padaryti daugybę klaidų. Taip pat kamienų išskyrimo algoritmai dauguma yra tinkami rašytinei ir taisyklingai kalbai, o ne šnekamajai kalbai. Be to kamienų išskyrimo algoritmai visiškai nėra taikytini kažkurioms kalboms (pavyzdžiui Kinų).

5.3 Kamienų išskyrimo naudojimas informacijos gavyboje

Ankstyvosiose informacijos gavybos sistemose, tekste esantys žodžiai paprastai būdavo apdorojami, iš jų būdavo išskiriami kamienai ir naudojami kaip indeksavimo proceso dalis ir tik žodžių kamienai buvo laikomi pagrindiniame informacijos gavybos sistemos indekse. Kiekvienos užklausos žodžiai taip pat buvo apdorojami kamieno išskyrimo algoritmų. Ir tuomet paieškos rezultatus vartotojas matydavo apdorotus kamienų išskyrimo algoritmo.

32 Pranašesnis būdas yra išlaikyti kiekvieną žodį W ir jo išskirtą kamieno formą s(W) ir abipusiai juos susieti informacijos gavybos sistemoje. Tuomet kai W yra susietas su s(W) galime gauti iš s(W) galimų žodžių, esančių informacijos gavybos sistemos indekse, sąrašą W[] , taip pat kaip iš žodžio W galime gauti išskirtą kamieno formą s(W). Bet koks žodis gali būti paieškomas tiek išskirtų kamienų formoje tiek originalioje formoje. Jei reikia galima parodyti išskirtą kamieną žodį ir kokie žodžiai panaudojus kamieno išskyrimo algoritmą gaunami tokioje formoje.

5.4 Lietuvių kalbos taisyklės

5.4.1 Galūnė

Galūnė [22] – kintamoji žodžio dalis, rodanti jo ryšį su kitais žodžiais. Tačiau ne visi žodžiai baigiasi galūnėmis. Galūnėmis paprastai baigiasi linksniuojamieji ir asmenuojamieji žodžiai (vyras – vyro – vyrui...; nešu – neši – neša...), o nekaitomi žodžiai galūnių neturi. Tik sąlygiškai galūnėmis laikoma ir veiksmažodžių esamojo laiko 3 asmens balsius (dirb-a, tik-i; raš- o). Iš daugiskaitos 1 ir 2 asmens formų matyti, kad tai yra kamiengaliai (dirb-a-me, dirb-a-te; tik- i-me, tik-i-te; raš-o-me, raš-o-te).

Galūnės ne tik rodo žodžių ryšius, bet ir įformina žodį kaip kalbos vienetą. Todėl, keičiant galūnes, galima sukurti naujų žodžių: vilk-as – vilk-ė; stal-as – stal-ius;graž-us – grož-is; be galvos – begalv-is ir t.t.

5.4.2 Linksniuojamų kalbos dalių galūnių rašyba

Lietuvių kalboje yra keturios linksniuojamos kalbos dalys: 1. Daiktavardis 2. Būdvardis 3. Skaitvardis 4. Įvardis Visi jie yra vadinami vardažodžiais. (Gali būti linksniuojami ir veiksmažodžio formos – dalyviai.) Galūnių rašybos ypatybės [23] yra susijusios su jų kaityba skaičiais ir linksniais. 1. Balsių e ir ia rašyba 1.1. Jei žodžių vienaskaitos vardininke yra galūnės -is, -ys, -i, -ia, -ias, -uo, tai kitų linksnių (išskyrus vietininką) galūnėse nerašoma (medis – medžiai, žaltys – žalčiai, graži – gražiai, dalia – daliai, sesuo – seseriai, žalias – žaliam).

33 1.2. Jei žodžio vienaskaitos vardininke yra galūnė -ė, tai kituose linksniuose gali būti rašoma e (katė – katei, kates, kate; medinė– medinei, medine, medines). 1.3. Visų žodžių vienaskaitos ir daugiskaitos galūnėse visada rašoma -e (lietuje, ausyje, laukuose, mokytojuje, žaliose, žaliuose, dviejuose, kituose). Žodžio duktė linksniavimą (duktė – dukters, dukteriai, dukterį, dukteria, dukteryje...). 2. Ilgųjų balsių y ir ū rašyba 2.1. I linksniuotės daiktavardžiai vienaskaitos vardininke gali turėti galūnę -ys (arkl-ys). 2.2. Kai kurie daiktavardžiai ir būdvardžiai daugiskaitos vardininke gali turėti galūnes -ys ir - ūs (piemenys, pilys, sūnūs, gudrūs). 2.3. Kai kurių I ir III linksniuočių daiktavardžių vienaskaitos ir daugiskaitos vietininkų galūnės gali būti -yje, -yse (medyje, vinyje, avyse). Sutrumpėjusių vietininkų formų galūnę -y (medy, pagiry) ir atsakančių į klausimą kada? žodžių rašybą (vidurnaktį, vidurvasarį). 3. Nosinių balsių rašyba 3.1. Nosinės balsės visada rašomos žodžių vienaskaitos galininko ir daugiskaitos kilmininko galūnėse (gražią, lėlę, tą pilį, gardų medų, linksmų draugų, šviesių dienų). 3.2. Nosinės balsės visada rašomos įvardžiuotinių formų moteriškos giminės vienaskaitos galininke (dvi) ir įnagininke (viena), daugiskaitos kilmininke (dvi) ir galininke (viena) (baltąją, baltąja, baltųjų, baltąsias); vyriškos giminės vienaskaitos galininke (dvi) ir daugiskaitos kilmininke (dvi) (baltąjį, baltųjų). 4. Kiti rašybos atvejai 4.1. Nosinės balsės rašomos asmeninių įvardžių vienaskaitos kilmininke (manęs, tavęs, savęs), o galininke nerašomos (mane, tave, save). 4.2. Skaitvardžių nuo vienuolikos iki devyniolikos, įvardžio keliolika bei bevardės giminės būdvardžio galininko galūnės rašomos be nosinių balsių (ką? – dvylika mėnesių, keliolika draugų, daryti gera). 4.3. Nekaitomų tarptautinių žodžių vardininkų linksnių galūnes -ė, -i, -u (ateljė, fojė, želė, taksi, žiuri, interviu).

5.4.3 Galūnės lietuvių kalboje

Žodžiai, kuriuos padaromi, kečiant galūnę, dažnai keičia ir šaknies balsę.  drąsa => drįsti

 senas => senis 34 Dėl tarmių poveikio bendrinėje kalboje vartojamos ilgosios ir trumposios vienaskaitos įnagininko ir vietininko, daugiskaitos naudininko ir įnagininko galūnės. Abi galūnių formos yra taisyklingos ir vartojamos lietuvių kalboje, tik rašytinėje kalboje įprastinės yra ilgosios, o sakytinėje – trumposios.

 šunimi – šunim

 geležimi – geležim

Kintant linksniavimo sistemai, atsiranda vienaskaitos vardininko, kilmininko, įnagininko, daugiskaitos vardininko gretutinių formų. Rašytinėje kalboje labiau tinka pirmosios, sakytinėje – visos.

 mėnuo => mėnulis

 akmenimis => akmeniu

Kalboje vartojamos gretutinės paprastųjų veiksmažodžių bendraties ir 1 bei 2 asmens formos, sangrąžiniai veiksmažodžiai. Visos šios formos taisyklingos, tik ilgosios būdingesnės rašytinei kalbai, o trumposios – sakytinei.

 bėgti => bėgt

 nešti => nešt

5.5 Lietuviškas stemmer

Pirmajame tiriamajame darbe buvo atliktas esamo lietuvių kalbos Stemmer algoritmo tyrimas. Tyrimui buvo naudojamas kamienų išskyrimo algoritmas skirtas lietuvių kalbai [24], sukurtas prieš du metus. Tačiau jis buvo neišbaigtas iki galo. Todėl reikėjo įsivertinti bei ištirti algoritmą grafiškai pavaizduotą priede Nr. 3, ko pasėkoje pasirodė pirmieji požymiai, kad algoritmas dar nėra išbaigtas, tačiau tai buvo puiki pradžia link lietuviško kamienų išskyrimo algoritmo.

5.6 Algoritmo testavimui skirta programa

Norint greitai apdoroti visą tekstyną reikėjo susikurti programą, kurios pagalba būtų galima lengvai apdoroti tekstyną. Tuo pačiu buvo nuspręsta ir paskaičiuoti algoritmo tikslumą tiek visam tekstynui tiek atskiroms kalbos dalims. Tam tikslui buvo pasitelkta Clojure [25] programavimo kalba ir sukurta paprasta programa, kuri labai greitai apdorodavo tekstyną ir

35 tuo pačiu išvesdavo į ekraną bei į atskirus failus pagal kalbos dalis aptiktus klaidingus apkarpymus, tai leido greitai ir efektyviai matyti algoritmo veikimo kitimą ir eliminuoti klaidas.

5.7 Algoritmo papildymas

Norint padidinti algoritmo tikslumą algoritmą reikėjo papildyti visomis galūnėmis, kadangi pirmojo tyrimo metu nebuvo surinktas pilnas tekstynas iš kurio galima būtų išvesti visas galūnes. Turimame tekstyne galūnės buvo atskirtos nuo žodžio šaknies, todėl savo sukurtos programos pagalba buvo išskirtos, surūšiuotos ir atrinktos unikalios galūnės bei priesagos. Papildžius algoritmą galūnėmis bei priesagomis, tikslumas padidėjo, tačiau to nepakako, kad algoritmas veiktų labai gerai. Vėliau buvo nuspręsta keisti patį algoritmą. Buvo mėginama algoritmą išskaidyti pagal kalbos dalis. Pirmiausia mėginti pritaikyti daiktavardžių bei skaitvardžių karpymą, o vėliau tik veiksmažodžių, būdvardžių bei kitų kalbos dalių apdorojimą. Toks algoritmas iš pradžių atrodė veiksmingas, tačiau taip pat nedavė norimų rezultatų, kuomet buvo aprašyti visų kalbos dalių algoritmų fragmentai. Trečiuoju bandymu buvo nuspręsta supaprastinti algoritmą. Pašalinus ankstesnius algoritmo fragmentus buvo paliktas tik daiktavardžių apdorojimas ir buvo mėginama apdoroti tik daiktavardžius. Testuojant ir tobulinant algoritmą tuo pačiu metu buvo keičiami tiek galūnių sąrašai tiek priesagų sąrašai, kadangi algoritmas siekdavo apkarpyti žodį su tuo metu iš sąrašo tinkančia ilgiausia galūne ar priesaga, kas kartais iššaukdavo neteisingą žodžio apdorojimą. Šiai problemai spręsti buvo mėginama atskirti priesagas į du etapus, pirmajame etape mėginama atskirti trumpesnes priesagas, o antrajame ilgesnes. Šis sprendimas padėjo padidinti algoritmo veikimą ir buvo nuspręsta palikti šį algoritmą kaip pagrindinį karkasą visoms kalbos dalims.

5.8 Rusiškas Stemmer algoritmas

Kadangi rusų kalba yra plačiai naudojama, todėl pavyko rasti internete jau sukurtą rusų kalbai pritaikytą algoritmą [26].

5.9 Azerų Stemmer algoritmas

Azerbaidžaniečių kalba yra gimininga Turkų kalbai, tai reiškia, kad žodžiai turi priesagų grandinę (pvz. viena priesagą daugiskaitinė ir viena galininko). Taip pat ji turi balsių harmoniją, kur kiekviena priesaga turi kelis variantus ir galima atrinkti jas pagal balses esančias šaknyje. Reikėtų identifikuoti priesagų sąrašą, taip pat reikėtų išsiaiškinti kurios priesagos aptinkamos prie tam tikrų balsių šaknyje ir parašyti taisykles. Gautas stemmer algoritmas gali veikti ne taip tiksliai kaip tikimasi, tačiau tikslumas šiuo atveju nėra pirmasis kriterijus, kadangi 36 informacijos gavyboje pirminio apdorojimo metu siekiama sumažinti saugomos informacijos kiekį ir tik tuomet jau žiūrima į tikslumą.

5.10 Skirtingų algoritmų gauti rezultatai

Lentelė 21. Skirtingų Stemmer algoritmų tikslumas skirtingoms kalbos dalims

Duomenų failas lt2 Lith Dktv Original_first_edit Žodžių kiekis Tikslumas Tikslumas Tikslumas Tikslumas duomenų faile vksm.txt 33.31% 14.70% 9.74% 12.58% 339719 psdlv.txt 19.35% 24.89% 4.40% 2.66% 63331 padlv.txt 35.24% 30.94% 10.51% 10.79% 58780 test2.txt 62.89% 28.01% 15.61% 18.47% 1122 bdvr.txt 22.35% 21.39% 12.13% 5.85% 724384 all.txt 27.52% 26.37% 29.40% 13.99% 1397592 ivard.txt 50.40% 43.07% 43.60% 33.33% 751 dktv.txt 31.76% 41.65% 74.45% 28.98% 241933 sktv.txt 50.17% 49.38% 30.36% 14.98% 1763 prvks.txt 22.34% 51.88% 33.27% 36.48% 7677 Bendras vidurkis: 35.53% 33.23% 26.35% 17.81% 2837052

5.10.1 Algoritmo pritaikymas Daiktavardžiams

Kadangi duomenų gavyboje dažniausiai ieškoma panaudojant daiktavardžius, buvo nuspręsta sukurti Stemmer algoritmo versiją pritaikytą tik daiktavardžių apdorojimui. Keičiant algoritmą buvo atsižvelgta tik į daiktavardžių darybą. Pritaikyti algoritmą daiktavardžiams buvo gana nesunku, kadangi daiktavardžių daryba yra gana paprasta. Daiktavardį sudaro žodžio šaknis, priesagos ir galūnė. Daiktavardinių priesagų yra gana nemažai (apie 600), o galūnių gerokai mažiau.

37

Lentelė 22. Daiktavardžio stalas vediniai, daiktavardžių darybos pavyzdys Galūnės ir Šaknis Galūnės ir Šaknis priesagos priesagos stal as Stal ius stal o Stal iau s stal ui Stal iu i stal ą Stal ių stal u Stal ium i stal e stal iuj e stal an stal iun stal ų stal ių stal ams stal iam s stal us stal iu s stal ais stal iai s stal uos e stal iuos e stal uos stal iuos stal uos na stal iuos na stal ai

38 6 PIRMINIO APDOROJIMO KOMPONENČIŲ PRITAIKYMAS KARKASINĖMS SISTEMOMS 6.1 Karkasų palyginimas

6.1.1 Apache UIMA karkasas

Apache UIMA [27] yra nestruktūrizuotos informacijos valdymo sistemos kurios analizuoja didelius kiekius nestruktūrizuotų duomenų siekiant atrasti vartotojui reikalingą informaciją. Apache UIMA leidžia atskirti iš bendros sutemos tik reikalingus komponentus, tam, kad sistema būtų kuo mažiau apkraunama. Leidžia komponentus naudoti kaip interneto servisus, pasiekiamus iš bet kur. Taip pat interneto servisai įgalina replikaciją. Tačiau šis karkasas šiuo metu neturi daugelio pirminio apdorojimo modulių, kurių reikia pirminio teksto apdorojimo procesui.

6.1.2 LingPipe karkasas

2003 m. kompanijos Alias-i sukurtas įrankis teksto apdorojimui – LingPipe [28] . Šio įrankio pagrindinė paskirtis – identifikuoti ir išskirti žmonių, organizacijų ar vietovių pavadinimus iš naujienų srautų. Taip pat LingPipe pagalba galima klasifikuoti Twitter trumpųjų pranešimų sistemos paieškos rezultatus ir suskirstyti į kategorijas bei panaudoti įrankį rašybos klaidų tikrinimui. LingPipe įrankis paremtas Java technologija.

Kaip ir dauguma kitų modulių LingPipe, turi pirminio apdorojimo funkcijų, kurios apima prižiūrimą mokymąsi statistiniais modeliais, kaip žodynų atitikimas ar reguliariųjų išraiškų atitikimas. Sistema turi sakinių atpažinimo metodus, tokenizavimo metodus, rašybos tikrinimą.

6.2 Pirminio apdorojimo komponenčių pritaikymas LingPipe sistemai

6.2.1 Karkaso paruošimas naujų modulių įdiegimui

Norint papildyti LingPipe karkasą naujais moduliais, visų pirma reikia atsisiųsti karkaso šaltinio kodą. Jį galima atsisiųsti adresu: http://alias-i.com/lingpipe/web/download.html Karkasas yra sukurtas Java kalba, todėl reikalingas ir Java kūrimo paketas, pagal LingPipe reikalavimus, me mažesnės nei 1.5 versijos. Karkaso kūrimo aplinka buvo pasirinkta Eclipse IDE [29]

39 Paleidus Eclipse IDE reikia kurti naują projektą, panaudojant build.xml failą, importuoti reikiamas bibliotekas ir atsižvelgiant į LingPipe API kuriami nauji moduliai skirti pirminiam teksto apdorojimui.

6.2.2 Kalbos identifikavimo modulis

Kalbos identifikavimo modulis buvo kuriamas panaudojus trečiojo tiriamojo eksperimentiniams tyrimams skirtą programos kodo dalį ir panaudojant Cybozu Labs Language Identification biblioteką kartu su kurtais kalbų atpažinimo n-gram

6.2.3 Teksto normalizavimo modulis

Teksto normalizavimo modulis, kuris yra skirtas teksto normalizavimui susideda iš trijų funkcijų kurios skirtingai normalizuoja tekstą. Pirmoji funkcija atlieka viso teksto raidžių pakeitimą į mažosiomis raidėmis parašytą tekstą ir yra iškviečiama su komanda „java -cp lingpipe-modules.jar lt.vdu.lingpipe.normalization.Normalize“, kuriai galima nurodyti du parametrus: 1) Parametras 1 – direktorijos pavadinimas iš kurios bus skaitomi failai 2) Parametras 2 – direktorijos pavadinimas į kurią rašomi normalizuoti failai

Parametras 2 yra neprivalomas, tačiau nenurodžius šio parametro pirmajame parametre nurodyti failą bus pakeičiami į normalizuotus. Antroji funkcija atlieka sakinio pirmo žodžio normalizavimą. Toks normalizavimas yra naudingas, kuomet reikia išsaugoti įvairius esinius tolimesniam apdorojimui. Ši funkcija taip pat turi du parametrus kaip ir pirmoji funkcija. Trečioji funkcija yra teksto normalizavimas naudojant Cybozu Labs sukurtą language identification biblioteką. Šią funkciją aptikau trečiojo tiriamojo darbo metu tirdamas teksto kalbos identifikavimo procesą pagal pateiktus duomenų failus.

6.2.4 Stopwords modulis

Šis modulis yra skirtas atrinkti dažnai pasikartojančius žodžius, kurie reikalingi atrenkat nereikšmingus žodžius. Labai dažnai pasikartojantys žodžiai tampa nereikšmingi dėl jų pasikartojimo dažnumo, todėl duomenų gavyboje, informacijos paieškoje įprastai dažnai pasikartojantys žodžiai atmetami iš užklausų. Šis procesas leidžia efektyviau veikti sistemoms ir vartotojui grąžinti tikslesnius rezultatus.

40 Norint gauti žodžių dažnumo sąrašą iš savo duomenų pakanka susikompiliavus LingPipe karkasą, komandinėje eilutėje parašyti komandą: „java -cp lingpipe-modules.jar lt.vdu.lingpipe.CountWords“. Pagal nutylėjimą programa ieškos tame pačiame kataloge direktorijos pavadinimu „count“ kurioje turėtų būti patalpinti tekstiniai failai. Esant poreikiui, galima nurodyti komandinėje eilutėje papildomą argumentą, su nuorodą į kitą direktoriją arba failą, tuomet komanda turėtų būti tokia: „java -cp lingpipe-modules.jar lt.vdu.lingpipe.stopwords.CountWords C:\corpus\lt“. Taip pat yra galimybė modulį įtraukti į savo projektą ir nurodžius direktoriją funkcijai getResultData su direktorijos parametru ir gauti sąrašą tolimesniam jo naudojimui ar apdorojimui.

6.2.5 Stemmer modulis

Stemmer modulis, kuris pradėtas kurti antro tiriamojo darbo metu ir pilnai užbaigtas šį semestrą yra skirtas žodžių galūnių kapojimui, su tikslu sumažinti indekso dydį, bei pagreitinti paieškas duomenyse. Šio modulio naudojimosi principas yra taip pat paprastas, tam kad vartotojams nereiktų vargti ties pirminio apdorojimo proceso etapais. Jei dar nėra sukompiliuotas lingpipe-modules.jar paketas, tuomet jį reiktų sukompiliuoti ir tuomet iškviesti steminimo modulį su komanda „java - cp lingpipe-modules.jar lt.vdu.lingpipe.stemmer.Stemm“ ir perduoti keturis parametrus: 1) Kurios kalbos stemmer algoritmą naudosime (pvz.. ltStemmer arba russianStemmer); 2) Įvesties failo vardą; 3) Išvesties į failą parametro įgalinimas „-o“; 4) Išvesties failo vardas.

6.2.6 POS modulis

POS žymeklio modulis buvo sukurtas panaudojant išnaudojant KLC kurtą lemuoklį, siunčiant jam HTTP užklausą ir kaip atsakymą gaunant sulemuotą tekstą. Gauti rezultatai apdorojami reguliariosiomis išraiškomis ir atskiriama tik kalbos dalis. Tačiau šis būdas yra labai neefektyvus šiuo atveju, nes lemuoklio serveris yra nepajėgus apdoroti didelių kiekių užklausų.

6.2.7 Failo turinio kodavimo į UTF-8 modulis

Sukurtas failų turinio kodavimo modulis leidžiantis konvertuoti daugumą failo kodavimo formato į UTF-8 koduotę. Tam, kad būtų galima naudotis kitais moduliais, ši procedūra yra būtina.

41 Norint perkoduoti tekstinius duomenis į UTF-8 koduotę reikia sukompiliavus LingPipe karkasą jį įtraukti į savo projekto biblioteką ir įtraukti klasę „lt.vdu.lingpipe.encoding.RecodeFiles“. Šiai klasei galima nurodyti direktoriją kurioje yra tekstiniai dokumentai, arba įkelti dokumentus į pagal nutylėjimą nustatytą vieta – projekto direktorijoje sukūrus naują direktoriją, pavadinimu „recode“, kurioje patalpinti tekstinius duomenis. Duomenys bus perkoduojami ir įrašomi tuo pačiu failo pavadinimu.

42 7 REZULTATAI IR IŠVADOS

Pirminio apdorojimo proceso analizėje apsibrėžti pirminio teksto apdorojimo grandinės etapai, pasidomėjus kiekvieno etapo atliekamais procesais atlikta egzistuojančių sprendimų paieška ir analizė, esant poreikiui komponentės patobulintos, bei nesant reikiamoms komponentėms, sukurtos naujos. Atlikus teksto apdorojimo karkasų apžvalgą pasirinktas LingPipe karkasas ir įprogramuotos komponentės skirtos pirminiam teksto apdorojimui. Dokumentuota programos naudojimosi instrukcija ir galimybės, leisiančios vartotojams atlikti priminį teksto apdorojimą. Atsižvelgus į tyrime gautus rezultatus suformuluotos tolimesnių tyrimų kryptys bei uždaviniai.

7.1 Magistro darbo metu gauti rezultatai

1) Darbo metu atlikta pirminio teksto apdorojimo proceso analizė; 2) Aprašyti pirminio teksto apdorojimo žingsniai; 3) Atlikta esamų komponenčių paieška bei analizė; 4) Atliktas kalbos identifikavimo modelio palyginimas su Apache Tika kalbos identifikavimu; 5) Suprogramuotas tokenizavimo modulis; 6) Trečiojo tiriamojo darbo metu sukurto eksperimentiniams tyrimams skirto kalbos identifikavimo modulio perprogramavimas ir pritaikymas pirminio teksto apdorojimo procesui modulis; 7) Suprogramuotas “stop-words” statistinis modulis; 8) Suprogramuotas dokumentų koduotės konvertavimo modulis panaudojant jUniversalCharDetect; 9) Suprogramuotas taisyklėmis pagrįstas teksto normalizavimo modulis, taip pat papildytas Cybozu Labs teksto normalizavimo klase; 10) Suprogramuotas kalbos dalių identifikavimo modulis kuris naudoja KLC lemuoklio servisą lietuvių kalbai. Taip pat įtrauktas RussianPOSTagger [8] įskiepis kurio pagalba atrenkamos rusų kalbos dalys; 11) Aprašyta karkaso naudojimosi instrukcija.

Atsižvelgiant į gautus rezultatus galima teigti, jog pavyko sukurti pirminio apdorojimo karkasą lietuvių, rusų ir azerų kalboms.

43 7.2 TOLIMESNI TYRIMAI

Kadangi dokumentų pirminio apdorojimo tema yra labai plati, todėl atliekant tyrimus ir eksperimentus išsiaiškinta jog pirminiam teksto apdorojimo procesui reikia daugiau komponenčių: 1) Diakritiniai ženklų komponentė – Reikalingi transformavimai į tekstą be diaktrinių ženklų (č->c); 2) Transliteracijos komponentė – kirilicos teksto transformavimas į lotyniškomis raidėmis užrašytą tekstą; 3) Rašybos klaidų tikrinimo komponentė – rašybos klaidų tikrinimas apdorojant duomenis. 4) POS modulis – reikalingas kalbos dalių atpažinimo modulis kuri būtų viešai ir be apribojimų prieinamas visiems.

44 8 LITERATŪROS SĄRAŠAS

[1] Christopher D. Manning, Prabhakar Raghavan and Hinrich Schutze, „Cambridge University,“ 2008. [Tinkle]. Pasiekiamas: http://www.langtoninfo.co.uk/web_content/9780521865715_frontmatter.pdf. [Kreiptasi 06 04 2014]. [2] S. Rababah, „Modern Information Retrieval,“ 2011. [Tinkle]. Pasiekiamas: http://web2.aabu.edu.jo/tool/course_file/lec_notes/902333_chapter07.pdf. [Kreiptasi 03 03 2014]. [3] The Apache Software Foundation, „Apache Tika - Supported documment formats,“ [Tinkle]. Pasiekiamas: http://tika.apache.org/1.4/formats.html#Text_formats. [Kreiptasi 03 05 2014]. [4] W3, „Character encoding,“ [Tinkle]. Pasiekiamas: http://www.w3.org/International/O- charset. [Kreiptasi 02 05 2014]. [5] „Java port of universalchardet,“ [Tinkle]. Pasiekiamas: http://code.google.com/p/juniversalchardet/. [Kreiptasi 02 03 2014]. [6] A. S. Foundation, „Apache OpenNlp,“ [Tinkle]. Pasiekiamas: https://opennlp.apache.org/. [Kreiptasi 04 03 2014]. [7] Vytautas Zinkevičius, Vidas Daudaravičius, Erika Rimkutė, „Kompiuterinės lingvistikos centras - morfologinis anotatorius,“ [Tinkle]. Pasiekiamas: http://donelaitis.vdu.lt/main.php?id=4&nr=7_1. [Kreiptasi 02 04 2014]. [8] Andrew Krizhanovsky, „Russian POS tagger,“ [Tinkle]. Pasiekiamas: http://rupostagger.sourceforge.net/. [Kreiptasi 24 03 2014]. [9] „Автоматическая Обработка Текста,“ AOT, [Tinkle]. Pasiekiamas: http://www.aot.ru/. [Kreiptasi 05 02 2014]. [10] „Apache Tika - a content analysis toolkit,“ Apache, [Tinkle]. Pasiekiamas: http://tika.apache.org/. [Kreiptasi 01 12 2013]. [11] „Apache Nutch,“ Apache, [Tinkle]. Pasiekiamas: http://nutch.apache.org/. [Kreiptasi 26 09 2013]. [12] „Apache Lucene,“ Apache, [Tinkle]. Pasiekiamas: http://lucene.apache.org/core/. [Kreiptasi 11 10 2013]. [13] „Apache OODT,“ Apache, [Tinkle]. Pasiekiamas: http://oodt.apache.org/. [Kreiptasi 15

45 11 2013]. [14] C. A. Mattmann, „Apache Tika: 1 point oh!,“ [Tinkle]. Pasiekiamas: http://www.slideshare.net/chrismattmann/apache-tika-1-point-oh. [Kreiptasi 12 10 2013]. [15] „Cybozu labs,“ Cybozu Inc., [Tinkle]. Pasiekiamas: http://labs.cybozu.co.jp/en/. [Kreiptasi 02 12 2013]. [16] Dr. Saed Sayad, „An Introduction to Data Mining,“ [Tinkle]. Pasiekiamas: http://www.saedsayad.com/naive_bayesian.htm. [Kreiptasi 06 04 2014]. [17] R. T. Giuseppe Rizzo, „Evaluating Named Entity Recognition,“ [Tinkle]. Pasiekiamas: http://nerd.eurecom.fr/ui/paper/Rizzo_Troncy-wekex11.pdf. [Kreiptasi 22 03 2012]. [18] „Wikipedia, the free encyclopedia,“ [Tinkle]. Pasiekiamas: http://en.wikipedia.org/wiki/Precision_and_recall. [Kreiptasi 18 05 2012]. [19] The Stanford Natural Language Processing Group, „Evaluation in information,“ [Tinkle]. Pasiekiamas: http://nlp.stanford.edu/IR-book/pdf/08eval.pdf. [Kreiptasi 02 05 2012]. [20] M. Porter, „Snowball: A language for stemming algorithms,“ 10 2001. [Tinkle]. Pasiekiamas: 12. [21] Tartarus, „The Porter Stemming Algorithm,“ Tartarus, 01 2006. [Tinkle]. Pasiekiamas: http://tartarus.org/martin/PorterStemmer/. [Kreiptasi 11 11 2012]. [22] A. Urbanavičius, „Lietuvių kalba ir literatūros istorija,“ [Tinkle]. Pasiekiamas: http://ualgiman.dtiltas.lt/zodzio_sudetis.html. [Kreiptasi 02 11 2012]. [23] emokykla.lt, „Linksniuojamų kalbos dalių galūnių rašyba,“ [Tinkle]. Pasiekiamas: http://lietuviu5- 6.mkp.emokykla.lt/lt/mo/zinynas/linksniuojamu_kalbos_daliu_galuniu_rasyba/. [Kreiptasi 26 09 2012]. [24] Ž. Medelis, „Lithuanian language processing tools to be used in NLP, search or other applications,“ [Tinkle]. Pasiekiamas: https://github.com/zmedelis/ltlangpack/blob/master/snowball/lithuanian.sbl. [Kreiptasi 03 10 2012]. [25] „Clojure,“ [Tinkle]. Pasiekiamas: http://clojure.org/. [Kreiptasi 13 05 2012]. [26] „Russian stemming algorithm,“ [Tinkle]. Pasiekiamas: http://snowball.tartarus.org/algorithms/russian/stemmer.html. [Kreiptasi 03 04 2014]. [27] „Apache UIMA,“ The Apache Software Foundation, [Tinkle]. Pasiekiamas: 46 http://uima.apache.org/. [Kreiptasi 03 04 2014]. [28] „Prudure online writing lab,“ [Tinkle]. Pasiekiamas: http://owl.english.purdue.edu/owl/resource/577/01/. [Kreiptasi 05 05 2012]. [29] „Eclipse,“ The Eclipse Foundation, [Tinkle]. Pasiekiamas: http://www.eclipse.org/. [Kreiptasi 03 02 2014]. [30] D. Zuokas, Ž. Medelis, T. Krilavičius ir V. Kaušas, „Application of Bootstrap Techniques for Police Summaries Retrieval,“ įtraukta Operational Research for Business and Social Processes, The 3rd National Young Scientists Conference of the Lithuanian OR Society, abstracts, Vilnius, 2010. [31] V. Zinkevičius, V. Daudaravičius ir E. Rimkutė, „Morfologinis anotatorius,“ 2011. [Tinkle]. Pasiekiamas: http://donelaitis.vdu.lt/main.php?id=4&nr=7_1. [Kreiptasi 15 August 2011]. [32] V. Zinkevičius, „MorfoLema,“ 2011. [Tinkle]. Pasiekiamas: http://donelaitis.vdu.lt/main.php?id=4&nr=3_1. [Kreiptasi 15 August 2011]. [33] F. Xing, „A New Model for Automatic Sentence Segmentation,“ Computer and Information Science, t. 4, nr. 4, 2011. [34] G. Vickery ir S. Wunch-Vincent, Participative web and user-created content: web 2.0, wikis and social networking, Organisation for Economic Co-operation and Development, 2007. [35] A. Urbanavičius, „Kalbos dalys,“ [Tinkle]. Pasiekiamas: http://ualgiman.dtiltas.lt/kalbos_dalys.html. [Kreiptasi 28 August 2011]. [36] M. Spousta, M. Marek ir P. Pecina, „Victor: The Web Page Cleaning Tool,“ įtraukta WaC4, 2008. [37] T. Segaran ir J. Hammerbacher, „Natural Language Corpus Data,“ įtraukta Beautiful Data, O'Reilly Media, 2009. [38] L. Philips, „The Double Metaphone search algorithm,“ C/C++ Users Journal, June 2000. [39] F. Patman ir L. Shaefer, „Is Soundex good enough for you? on the hidden risks of Soundex-based name searching,“ Language Analysis Systems, 2001. [40] Panagiotis G. Ipeirotis, „ Analyzing the Amazon Mechanical Turk Marketplace,“ XRDS , t. 17 , nr. 2, Winter 2010. [41] V. Paliulionis, „Lietuvišku adresu geokodavimo problemos ir ju sprendimo budai,“ Informacijos mokslai, 2009. 47 [42] G. Pajarskaitė ir e. al, „Designing HMM-Based Part-of-Speech Tagger for Lithuanian Language,“ Informatica, t. 15, 2004. [43] P. Norvig, „How to Write a Spelling Corrector,“ 2011. [Tinkle]. Pasiekiamas: http://norvig.com/spell-correct.html. [Kreiptasi 15 August 2011]. [44] C. D. Manning, P. Raghavan ir H. Schutze, Introduction to information retrieval, Cambridge University Press, 2008. [45] C. D. Manning ir H. Schutze, Foundations of Statistical Natural Language Processing, MIT Press, 1999. [46] S. Li ir K. Momoi, „A composite approach to language/encoding detection,“ 21 April 2008. [Tinkle]. Pasiekiamas: http://www- archive.mozilla.org/projects/intl/UniversalCharsetDetection.html. [Kreiptasi 28 August 2011]. [47] L. Lemnitzer, „Sentence Segmentation,“ 2007. [Tinkle]. Pasiekiamas: http://www.cl.uni-heidelberg.de/courses/archiv/ss06/textech/slidesSentSeg.pdf. [48] T. Krilavičius ir Ž. Medelis, „tokenmill/ltlangpack/snowball,“ 2010. [Tinkle]. Pasiekiamas: https://github.com/tokenmill/ltlangpack/tree/master/snowball. [Kreiptasi 15 August 2011]. [49] T. Krilavičius ir D. Kuliešienė, „Lithuanian Soundex,“ Baltic Institute of Advanced Technologies, Vilnius, 2011. [50] M. Krikščionaitis, „Teisės ontologijos: pasaulio ir Lietuvos konktekstų analizė ir lyginimas,“ Jurisprudencija: mokslo darbai, nr. 107, pp. 28-35, 2008. [51] C. Kohlschütter, P. Fankhauser ir W. Nejdl, „Boilerplate Detection using Shallow Text Features,“ Text, pp. 441-450, 2010. [52] X. Huang, F. Peng, D. Schuurmans, N. Cercone ir S. Robertson, „Applying Machine Learning to Text Segmentation,“ pp. 333-362, 2003. [53] S. Haykin, Neural Networks. Comprehensive Foundation, Prentice Hall, 1998. [54] E. Frank, „The (un)official Lovins stemmer page,“ 2011. [Tinkle]. Pasiekiamas: http://www.cs.waikato.ac.nz/~eibe/stemmers/index.html. [Kreiptasi 15 August 2011]. [55] S. Evert, „StupidOS: A High-Precision Approach to Boilerplate Removal,“ įtraukta 3rd Web as Corpus Workshop, 2007. [56] R. Baeza-Yates ir B. Ribeiro-Neto, Modern information retrieval, Addison Wesley, 1999.

48 [57] Mark Hall, Eibe Frank, Geoffrey Holmes, Bernhard Pfahringer, Peter Reutemann, Ian H. Witten, „The WEKA Data Mining Software: An Update;,“ SIGKDD Explorations, 2009. [58] John J. Horton David G. Rand Richard J. Zeckhauser, „The Online Laboratory: Conducting Experiments in a Real Labor Market,“ January 6th, 2011. [59] Snowball, „The Lovins stemming algorithm,“ Snowball, 2011. [Tinkle]. Pasiekiamas: http://snowball.tartarus.org/algorithms/lovins/stemmer.html. [Kreiptasi 15 August 2011]. [60] Snowball, „The Kraaij-Pohlmann stemming algorithm,“ 2011. [Tinkle]. Pasiekiamas: http://snowball.tartarus.org/algorithms/kraaij_pohlmann/stemmer.html. [Kreiptasi 15 August 2011]. [61] Snowball, „Stemming algorithms for various European languages,“ 2011. [Tinkle]. Pasiekiamas: http://snowball.tartarus.org/texts/stemmersoverview.html. [Kreiptasi 16 August 2011]. [62] Wikipedia contributors, „Soundex,“ 21 07 2011. [Tinkle]. Pasiekiamas: http://en.wikipedia.org/wiki/Soundex. [Kreiptasi 24 08 2011]. [63] J. Ghosh and A. Strehl, „Similarity-Based Text Clustering: A Comparative Study,“ In Jacob Kogan, Charles Nicholas, and Marc Teboulle, editors, Grouping Multidimensional Data, chapter 3. [64] Wikipedia contributors, „New york state identification and intelligence system,“ 2011. [Tinkle]. Pasiekiamas: http://en.wikipedia.org/w/index.php?title=New_York_State_Identification_and_Intellige nce_System&oldid=430896899. [Kreiptasi 24 08 2011]. [65] Wikipedia contributors, „Metaphone,“ 2011. [Tinkle]. Pasiekiamas: http://en.wikipedia.org/w/index.php?title=Metaphone. [Kreiptasi 24 08 2011]. [66] Wikipedia contributors, „Daitch–Mokotoff Soundex,“ 2011. [Tinkle]. Pasiekiamas: http://en.wikipedia.org/w/index.php?title=Daitch-Mokotoff_Soundex. [Kreiptasi 24 08 2011]. [67] Aniket Kittur, Ed H. Chi, Bongwon Suh. , „Crowdsourcing User Studies With Mechanical Turk.,“ Palo Alto Research Center, USA, 2011. [68] „Unicode Transformation Format 8-bit,“ Amazon.com, [Tinkle]. Pasiekiamas: http://www.utf-8.com/. [Kreiptasi 05 02 2014]. [69] Lena Grothe, Ernesto William De Luca, Andreas Nurnberger, „A Comparative Study on

49 Language Identification Methods,“ [Tinkle]. Pasiekiamas: http://lrec.elra.info/proceedings/lrec2008/pdf/249_paper.pdf. [Kreiptasi 06 02 2014]. [70] „Naive Bayes classifier,“ 18 sausis 2012. [Tinkle]. Pasiekiamas: http://en.wikipedia.org/wiki/Naive_Bayes_classifier. [Kreiptasi 21 vasaris 2012]. [71] Schmitt, John C., „Trigram-based method of language identification,“ [Tinkle]. Pasiekiamas: http://www.google.com/patents/US5062143. [Kreiptasi 25 03 2014]. [72] G. H. Chris Paice, „The Lancaster Stemming Algorithm,“ [Tinkle]. Pasiekiamas: http://www.comp.lancs.ac.uk/computing/research/stemming/Links/paice.htm. [Kreiptasi 11 11 2012]. [73] D. M. K. B. V. T. Hamish Cunningham, „GATE: an Architecture for Development of Robust HLT Applications,“ [Tinkle]. Pasiekiamas: http://acl.ldc.upenn.edu/P/P02/P02- 1022.pdf. [Kreiptasi 22 02 2014]. [74] L. JB, „The Lovins stemming algorithm,“ [Tinkle]. Pasiekiamas: http://snowball.tartarus.org/algorithms/lovins/stemmer.html. [Kreiptasi 24 11 2012]. [75] J. B. Lovins, „Universitas Mercu Buana,“ [Tinkle]. Pasiekiamas: http://journal.mercubuana.ac.id/data/MT-1968-Lovins.pdf. [Kreiptasi 14 12 2012]. [76] Alias-i, „LingPipe: Language Identification Tutorial,“ Alias-i, [Tinkle]. Pasiekiamas: http://alias-i.com/lingpipe/demos/tutorial/langid/read-me.html. [Kreiptasi 06 01 2014]. [77] T. Apache, „Apache Tika - Content Detection,“ Apache, [Tinkle]. Pasiekiamas: https://tika.apache.org/1.4/detection.html. [Kreiptasi 01 03 2014]. [78] Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze, Introduction to Information Retrieval, Cambridge University Press, 2008. [79] da Silva, Joaquim Ferreira; Lpes, Gabriel Pereira, „Identification of Document Language is Not yet a Completely Solved Problem,“ įtraukta In Proc. of Computational Intelligence for Modelling, Control and Automation, 2006 and International Conference on Intelligent Agents, Web Technologies and Internet Commerce, 2006. [80] Daniël de Kok, Harm Brouwer, „Natural Language Processing for the Working Programmer,“ [Tinkle]. Pasiekiamas: http://www.nlpwp.org/nlpwp.pdf. [Kreiptasi 02 01 2014]. [81] Van Rijsbergen, C.J., Information Retrieval, Butterworth-Heinemann, 1979. [82] Shuyo Nakatani, 12 03 2010. [Tinkle]. Pasiekiamas: http://www.slideshare.net/shuyo/language-detection-library-for-java. [Kreiptasi 25 09 2013].

50 [83] Rocha Anderson, „Naive Bayes classifier,“ [Tinkle]. Pasiekiamas: http://www.ic.unicamp.br/~rocha/teaching/2011s2/mc906/aulas/naive-bayes- classifier.pdf. [Kreiptasi 03 01 2014]. [84] Bergsma Shane; McNamee Paul; Bagdouri Mossaab; Fink Clayton; Wilson Theres, „Language identification for creating language-specific Twitter collections,“ įtraukta Proceedings of the Second Workshop on Language in Social Media, 2012.

51 9 PRIEDAI

9.1 Priedas Nr.1 Tiriamojo darbo Nr.:1 Santrauka

Magistro tiriamojo darbo autorius: Raimondas Širvinskas

Magistro tiriamojo darbo pavadinimas: „Stemmer“ lietuvių kalbai algoritmas

Vadovas: prof. dr. Tomas Krilavičius

Darbas pristatytas: Vytauto Didžiojo Universitetas, Informatikos fakultetas, Kaunas, 2013 birželis. Puslapių skaičius: 16

Lentelių skaičius: 2

Paveikslų skaičius: 1

Priedų skaičius: 1

The main purpose of this work is to analyze the Lithuanian speech recognition capabilities used in the limbs and trunk keywords release. The work gives an overview of extraction methods strains, reviews literature for research thesis. I have also analyzed problem of the research work. Ascertained Porter stemmer algorithm. In research is only found in the trunk separation algorithm for the Lithuanian language, written in language Snowball. The algorithm was used to the test data and the assessment of its effectiveness was calculated.

52 9.2 Priedas Nr.2 Tiriamojo darbo Nr.:2 Santrauka

Darbo autorius: Raimondas Širvinskas

Darbo pavadinimas: „Stemmer“ algoritmo tobulinimas

Vadovas: Dr. Tomas Krilavičius

Darbas pristatytas: Vytauto Didžiojo Universitetas, Informatikos fakultetas, Kaunas, 2013 birželis. Puslapių skaičius: 61

Lentelių skaičius: 4

Paveikslų skaičius: 4

Priedų skaičius: 1

Šis tiriamasis darbas yra pirmojo tiriamojo darbo tęsinys. Kadangi pirmajame tiriamajame darbe buvo labiau susitelkta ties algoritmo analize ir tyrimu, todėl šiame darbe buvo susitelkta ties algoritmo tobulinimu bei tinkamo tekstyno, algoritmui įvertinti, surinkimu. Tekstynas buvo sudarytas iš sąrašų su žodžio nekaitoma dalimi, bei jo galūnių bei priesagų vedinių. Testavimui buvo sukurta programa kuri kompiliuodavo algoritmą, apdorodavo tekstyną naudojant algoritmą ir paskaičiuodavo tikslumą. Buvo testuojamas kiekvienas algoritmo pakeitimas ir tikrinamas tikslumo pokytis kiekvienai kalbos daliai atskirai ir skaičiuojamas bendras rezultatas. Algoritmas papildytas visais galūnių ir priesagų deriniais išvestais iš anksčiau minėtų sąrašų, kadangi tiek galūnės, tiek to žodžio galimos priesagos buvo išskirtos šalia žodžio nekaitomos dalies. Vėliau buvo nuspręsta keisti ir patį algoritmą, nes tiek galūnių papildymas, tiek priesagų papildymas nedavė teigiamų rezultatų. Tobulinant ir testuojant algoritmą buvo pastebėta, jog didinant tikslumą vienai kalbos daliai, ženkliai mažėdavo tikslumas kuriai nors vienai ar kelioms kalbos dalims. Todėl buvo sukurti keli skirtingi algoritmų variantai iš kurių kiekvienas turėjo vieną ar daugiau kalbos dalį, su kuria jis veikdavo geriausiai.

53 9.3 Priedas Nr.3 Tiriamojo darbo Nr.:3 Santrauka

Magistro darbo autorius: Raimondas Širvinskas

Magistro darbo pavadinimas: Kalbos atpažinimo metodai lietuvių, rusų ir azerbaidžaniečių kalboms

Vadovas: prof. dr. Tomas Krilavičius

Darbas pristatytas: Vytauto Didžiojo Universitetas, Informatikos fakultetas, Kaunas, 2013 gruodis. Puslapių skaičius: 22

Lentelių skaičius: 18

Paveikslų skaičius: 1

Priedų skaičius: 1

Šiame tiriamajame darbe atliktas lietuvių, latvių, rusų, baltarusių, ukrainiečių, azerbaidžaniečių, turkų ir turkmėnų kalbų atpažinimo metodų tyrimas. Apžvelgta teorinė medžiaga apie kalbos atpažinimo metodus. Išmėgintos trys bibliotekos skirtos teksto kalbos atpažinimui bei įvertinta jų kokybė. Sukaupti tekstynai eksperimentiniams tyrimams su šiomis kalbomis atlikti. Sukurtas azerbaidžaniečių kalbos atpažinimo modelis paremtas n-gram ir jų dažniais tekste. Taip pat įvertintas esamas lietuvių kalbos atpažinimo modelis ir aptikus klaidų, patobulintas lietuvių kalbos atpažinimo modelis. Vėliau atliktas tyrimas su giminingomis kalbomis, kurio metu ištirta kaip kiekvienas kalbos modelis atpažįsta savo kalbą ir kaip gimininga kalba kartais atpažįstama kaip kita kalba. Apibendrinus atliktą tyrimą pateikti tiriamojo darbo rezultatai ir išvados.

54 9.4 Priedas Nr.4 Snowball versija Porter kamienų išskyrimo algoritmas lietuvių kalbai

55 9.5 Priedas Nr.5 IVUS 2013 konferencijai pateiktas bei pristatytas straipsnis

Straipsnis pateiktas kompaktiniame diske. Failo pavadinimas diske – IVUS_2013.docx.

56 9.6 Priedas Nr.6 IVUS 2014 konferencijai pateiktas bei pristatytas straipsnis

Straipsnis pateiktas kompaktiniame diske. Failo pavadinimas diske – IVUS_2014.docx. Dalyvio pažymėjimo kopija:

57 9.7 Priedas Nr.7 Pirminio apdorojimo komponentės suprogramuotos į LingPipe sistemą

LingPipe karkasas kartu su suprogramuotomis pirminio teksto apdorojimo komponentėmis yra pateikiamas kompaktiniame diske, aplanke „LingPipe sistema“. Kompaktiniame diske pateikiamas programos šaltinio kodas, kartu su sukompiliuotu LingPipe karkasu.

58 9.8 Priedas Nr.: 8 Pirmojo tiriamojo darbo metu gauti rezultatai

Pirmojo tiriamojo darbo metu gauti rezultatai 1) Tiriamojo darbo metu surinkta reikiama literatūra, tam, kad būtų galima ateityje tobulinti algoritmą lietuvių kalbai. 2) Literatūros dėka nustatyta, kad nepakanka aprašyti visas galūnes bei priesagas, nes to nepakanka geram algoritmui. 3) Išsiaiškinta jog reikia susidėlioti funkcijų seką taip, kad kiekviena funkcija nesugadintų žodžio, kol jam nebus išskirtas kamienas. 4) Nustatyti pagrindiniai algoritmo trūkumai kuriuos pašalinus algoritmo tikslumas ženkliai padidėtų. 5) Pritaikius lietuvių kalbos taisykles bei galūnių ir priesagų vedinius buvo galima kurti algoritmą. To buvo atsisakyta nes buvo rastas dviejų metų pradėtas bet nebaigtas lietuviškas Porter kamienų išskyrimo algoritmas, todėl nuspręsta įvertini algoritmą. 6) Norint įvertinti algoritmą reikėjo pirmiausia išsiaiškinti algoritmo veikimą, panaudojus Snowball kompiliatorių buvo sukompiliuota į Java programinį kodą ir tuomet galima buvo naudoti testavimui pasiruoštus duomenis ir įvertinti algoritmą. 7) Įvertintas algoritmas ir nustatyti pagrindiniai jo trūkumai. 8) Iškeltas tikslas ir uždaviniai antram tiriamajam darbui.

9.9 Priedas Nr.: 9 Antrojo tiriamojo darbo metu gauti rezultatai

1) Darbo metu sukurtas ir sutvarkytas tekstynas, tinkantis Stemmer algoritmo vertinimui. 2) Algoritmas papildytas įvairiomis galūnėmis bei priesagomis, sugeneruotais iš gautų tekstynų. 3) Sukurta programa vykdanti testavimą bei rezultato skaičiavimą kiekvienai kalbos daliai atskirai ir bendrą tikslumą. 4) Patobulintas ir pakeistas algoritmas kuris leido padidinti jo tikslumą. 5) Atliktas eksperimentinis tyrimas išmėginant įvairiausius algoritmo variantus. 6) Atlikus eksperimentus prieita išvados jog algoritmas veikia geriau jei pritaikomas kiekvienai kalbos daliai atskirai, todėl sukurti ir ištobulinti keli skirtingi algoritmo variantai skirtingoms kalbos dalims.

9.10 Priedas Nr.: 10 Trečiojo tiriamojo darbo metu gauti rezultatai

1) Darbo metu sukurtas ir sutvarkytas tekstynas, skirtas kalbos atpažinimo algoritmų vertinimui. 2) Įvertini esami kalbos atpažinimo metodai. 59 3) Atsižvelgiant į rezultatus pasirinktas kalbos atpažinimo metodas. 4) Atliktas eksperimentinis tyrimas kuriant n-gram kalbos modelį, kalboms kurių nepalaikė pasirinktas kalbos atpažinimo metodas. 5) Sukurtas ir įvertintas azerbaidžaniečių kalbos atpažinimo modelis. 6) Atlikus eksperimentinį tyrimą su lietuvių kalbos atpažinimo modeliu aptikti bei ištaisyti kalbos atpažinimo modelio netikslumai. 7) Sukurti įrankiai panaudojus esamas bibliotekas tekstynų kaupimui, n-gram kalbos modelio kūrimui, n-gram kalbos modelio įvertinimui.

60