Skiemenatorius Calibrei

Posted: 2013-03-18 in Darbeliai
Žymos:,

Kažko tai po pastarojo įskiepuko sukilo noras toliau kažką paprasto Calibrei padaryt. O ir, žinia, aukelės praverčia. Žodžiu, pasiskaitinėjau, ko žmonės nori ir ėmiausi tokio trenkto projektėlio — skiemenavimo įskiepio.

Kaip visada, klausimas, o nafig jo reikia? Šiaip tai jo reikia man pačiam asmeniškai. Bo aš skaitau knygas su Kindlu, mėgstu AZW3 (KF8) formatą, o ten yra šiokių tokių skirtumų nuo MOBI. Esminis skirtumas — lygiavimo pagal abu kraštus algoritmas. MOBI kadangi tokio formatavimo kaip ir neturi, tai jis nustatomas pačiame Kindle. O Kindlo lygiavimo algoritmas toks gudrus — nedaro per didelių tarpų. Ištempia eilutę, jei tarpo plotis viršija kokią tai ribą, toliau netempia, palieka tokią pusiau kairėn lygiuotą eilutę. Atrodo gan gražiai ir estetiškai. Ypač su anglų kalba. O lietuviški žodžiai tai kur kas ilgesni. Na, bet kentėt galima. Velnias žino, kodėl, su AZW3 Amazonas pakeitė lygiavimo politiką — tempiama iki kraštų ir viskas. Negražiai atrodo. O kairinio lygiavimo aš irgi nemėgstu, kažkaip „neknygiškai“ atrodo.

Gera žinia ta, kad naujojoje Kindle programinėje įrangoje įdiegta nauja savybė — „lengvasis“ skiemenavimas. Jei žodžiai knygoje bus suskiemenuoti iš anksto, įterpiant „lengvojo“ skiemenavimo ženklus (HTML kodukas ­), tai Kindlas knygą gražiai suskiemenuos! T.y. perkels žodžius pagal skiemenis į kitą eilutę. Teksto paieška veikia, visa kita irgi veikia, kaip priklauso. Tiesa, knygos apimtis padidėtų smarkiai, nes tų kodukų būtų priterpta bile kiek. Iš kitos pusės, o ar man tų kelių bitukų gaila? Tikrai ne. Be to, galima knygą būtų suskiemenuoti, įkelti į Kindlą, o po to skiemenavimą panaikinti. Tiek tos bėdos.

Tai va ir nusprendžiau skiemenavimui padaryti paprastą įskiepį. Pradžiai AZW3 ir EPUB knygoms, nes jų konteinerių perpakavimą Calibre palaiko „iš prigimties“. Paskui, jei netingėsiu, pabandysiu ir MOBI padaryt. O iš bėdos, tai ir to nelabai reikia, juk galima konvertuot. Žodžiu, jei nebus per daug pisnios, kada nors vėliau padarysiu ir MOBI palaikymą, bet pradžiai jo nebus.

1 diena. Paišyba ir karkasas

Nupiešiau ikonėlę. Šiaip sau, kad gražiau būtų . Idėją nusigrobiau iš pačios Calibre tekstinio failo piktogramos. Sudėliojau karkasėlį, meniu, būsimas visokias procedūras ir panašiai. Sugalvojau maždaug principą, kaip viskas bus vykdoma. Šiek tiek paeksperimentavau ir panaršiau Calibre kodą. Dar, tiesa, prieš tai su Kovidu Goyaliu, Calibre kūrėju, pasiaiškinau, kaip šitą idėją apskritai įgyvendinti, nurodė pavyzduką konkretų, kuris man turėtų padėti.

2 diena. Skiemenavimo prototipas

Šįkart pradėjau nuo prototipo. Nusprendžiau naudoti Open Office skiemenavimo žodynus — jie laisvai prieinami ir yra daugybei kalbų. Be to, yra ir Python freimvorkėlis, kuris moka tais žodynais naudotis. Tad pirmu bandymu susikodijau primityvų prototipą, kuris perkramto knygą ir suskiemenuoja žodžius į konsolę va taip:

Word: Daugelis
Hyword: Dau-ge-lis
Word: gyventojų
Hyword: gy-ven-to-jų
Word: prieglobstį
Hyword: prie-globs-tį
Word: randa
Hyword: ran-da
Word: Pelkėtosios
Hyword: Pel-kė-to-sios
Word: Keteros
Hyword: Ke-te-ros
Word: tuomet
Hyword: tuo-met
Word: nebuvo
Hyword: ne-bu-vo
Word: vadinama
Hyword: va-di-na-ma
Word: Ištuštėjusiąja
Hyword: Iš-tuš-tė-ju-sią-ja

Tataigi, veikia 🙂 Čia dar nufiltruojami žodžiai, kurių ilgis trumpesnis nei penkios raidės. O kam gi tokius skiemenuot?

Dar vienas šios dienos klausimas — kaip Calibre „koduoja“ kalbas. Open Office OXT failuose naudojama kalbos/dialekto koduoti. Na, tarkim, anglų kalba „en“, o amerikiečių anglų — „en_US“. O va Calibre knygos irgi turi kalbos laukelį, bet pasirodė, kad Calibre naudoja trijų raidžių kodavimą. Tarkim „lit“ — lietuvių kalbai, „eng“ — anglų, na ir taip toliau. Teko daug išsinagrinėti kodo, bet pavyko rasti, kad Calibre turi ir „vertimo“ iš dviejų ar kalbos/dialekto aprašų į savo trijų simbolių mechanizmą. Kai jau įsisavinau, tai tolimesnė žodynų valdymo koncepcija paaiškėjo.

3 diena. Sąsaja ir nuostatos

Ką gi, šios dienos gabalas skirtas įsiepiui buvo tikrai nelengvas. Jis nebuvo kažkoks sudėtingas, bet pilnas visokių smulkmenų, terliojimosi ir panašiai. Pirmiausia sudėliojau šiokį tokį nuostatų langelį. Nuostatų nedaug — iš tikrųjų tik viena. Raidžių kiekis, už kurį trumpesnių žodžių neskiemenuoti. O kitos „nuostatos“ — žodynų pridėjimo į įskiepį ir jų pašalinimo mechanizmas. Dar pasižiūrėjau, kad Open Office žodynai apleisti, bet Libre Office (tas pats š…, tik kitoj rankoj) visai padoriai prižiūrimi ir gražiai sudėti į vieną tinklapį. Taigi įdėjau į langelį ir rekomendaciją iš kur tuos žodynus parsisiųsti. Tie žodynai — tai OXT failai. Iš tikro, tai ZIP failai su tam tikra struktūra. Juose yra XML failas, kuriame suregistruoti viduje esantys žodynai, įskaitant ir skiemenavimo žodynus. Taigi, teko pasikapstyti ir tą failą „išmokti“ skaityti. O paskui iš OXT failo išsilupti reikalingą DIC failą. Na, kad vartotojams būtų patogiau, nereikėtų išarchyvuot patiems. Pyks gi kitaip 🙂 Be to, taip ir labai gerai, nes OXT aprašyme yra ir kalba nurodyta, o ir skiemenavimo žodynai gali būti įvairiai supakuoti. Negalima pasitikėti „susitarimu“ dėl failų pavadinimų, tuo gyvai įsitikinau kelis žodynus eksperimentams parsisiuntęs.

Taigi, XML failą skaityt išmokau, suprogramavau. Dabar iškilo klausimas, kur tuos žodynus sudėti. Ir taip pagalvojau, ir kitaip, ir apsisprendžiau Calibre įskiepių kataloge sukurti atskirą ZIP failą su žodynais. Calibre turi labai patogią klasikę darbui su ZIP failais, ja ir pasinaudojau.

Be abejo, pridėjau galimybę įkelti tiesiai ir DIC failą, tik apribojau jo pavadinimą, kad jame būtinai būtų kalbos kodas. Dar daryt kokį nors kalbos pasirinkimą… apsieis vartotojai. Tegu geriau OXT failus tempiasi.

Nuostatų langelis atrodo va taip:

Nuostatų dialogas Hyphenate This! Calibre įskiepiui

Vartotojo sąsają man kurti, kaip visada, nelengva užduotis, bet sudėliojau taip, kad pačiam atrodytų padoriai. To ir užtenka. Regis, šiandienai tiek. Lieka „juodoji“ darbinė dalis — skiemenavimas ir skiemenavimo ženklų pašalinimo procesų kūrimas. Kadangi prototipą jau turiu, reikės reikalą tik nudailinti ir pritaikyti. Dar reikės kažkaip progreso indikatorius apipavidalinti, nes vis tiek užduotėlė procesoriui pakankamai intensyvi, laiko užims.

4 diena

Darau tikrąjį skiemenavimą. Truputuką išmokau naudotis XPath. Juokinga, iki šiol vis niekaip nereikėdavo, užtekdavo kažkaip DOM arba SAX, buvau prie jų nuo senų laikų pripratęs. XPath žiauriai supaprastina kai kuriuos dalykus. Na, tam jis ir buvo sugalvotas. Bet va, keisti tekstą etree medyje pavyko tik dalinai, jį man ėmė iškraipinėt. Ir šiaip galvojau, ir taip, mečiau visgi etree ir ėmiausi paprasto seno gero teksto apdorojimo. find, pos ir panašiai. Paieškau HTML žymės, randu jos pabaigą, tarpe ieškau teksto. Paprasta. Tiesa, kodo vos daugiau, nei su etree, bet paprasčiau. Nors, jaučiu, reikės vėliau visgi įkirsti sistemą iki galo ir padaryti, kaip reikia.

Toliau iškilo problemėlė. Niekaip nenori man AZW3 failo sukurti iš apdorotų gabalų. Pasirodo, laikiną failą reikia būtinai su atitinkamo formato plėtiniu kurti… Gerai, pavyko. Viską perdoroja, failą surenka, įdeda atgal į biblioteką. Suskaldau failą į dalis, pasižiūriu — o ten nieko! Mano dorojimo  nė pėdsako. Dedu vietoj skiemenavimo ženklų paprastus minusiukus. Yr. Dedu skiemenavimo ženklus — nėr.

Po pasilazdavojimo su Kovidu Goyaliu, randu, kad konkrečiai Kindle knygų atžvilgiu Calibre ne perrenka failus, o perkonvertuoja. Ir konvertavimo metu kažkur dingsta skiemenavimo simboliai. Net Calibre dev aplinką pasikūriau. Iki šiol įskiepius su paprastu įdiegimu testuodavau, pačios Calibre iš išeities kodo neleisdavau. Gerai, kad labai paprasta tą padaryti.

Į pavakarę atradau, kad niekur tie skiemenavimo ženklai neišnyksta. Juos tiesiog pakeičia atitinkamais unikodo simboliais. Ajajai. Bet, kaip visada, besikapstydamas daug išmokau 😀 Privalumas. Įžvelkime šviesiąją pusę, taip sakant.

Įkeliu suskiemenuotą knygą į Kindlą — viskas veikia, žodžius gražiai perkelia į kitą eilutę. Tuom dieną galima ir užbaigti.

5 diena. „Dasimušimai“

Na, penktą dieną gražinu visą įskiepį. Įdėjau ir skiemenavimo ženklų pašalinimo funkciją, kad patogiau būtų. Dėl visa ko. Tik laiko daug neturėjau, teko priešokomis pakodyt ir patestuot. Vėlai vakare prisidariau knygų su pavyzdukais ir pradėjau daryti Kindlo ekrano nuotraukas. Reikės įskiepį viešint.

6 diena. „Go live“

Ryte apsižiūrėjau, kad Kindlas neberodo turinio ir nebešokinėja per skyrius toms knygoms, kurios buvo suskiemenuotos. Negi mano įskiepis kažką taip kapitaliai sugadina? Tas pats mechanizmas naudojamas su „Tweak ebook“ funkcija. Išbandau su švaria knyga gimtąją Calibre „Tweak ebook“. Cha, irgi dingsta turinys. Toliau tegu aiškinasi profai, aš kol kas paskelbsiu įskiepį su šiuo apribojimu. Kam aktualu, išsibandys.

Aj velnias, kiek klaidų pirmoj versijoj palikau. Elementariai pamiršau įskiepį sudėti į švarią Calibre ir išbandyt „nuo-iki“. Viskas per skubėjimą. Teko ekstra tvarka skelbti antrą versiją. Ją jau galima naudoti 🙂 Vienas italas „sėdo ant testavimo“ ir siunčia laiškelius vieną po kito. Rankiot turėsiu ką, visgi tas knygų dorojimas nėra paprasta užduotis. Be to, pats ir tiek knygų neturiu ir dar visokių sudėtingų, kad galėčiau eksperimentuoti. Be to, tegu vartotojai irgi padirba, greičiau išgaudys visokias nesąmones.

O čia pora pavyzdžių, kaip atrodo tekstai (Kindle ekrano nuotraukos).

Neskiemenuotas originalas:

Kindle ekrano nuotrauka, neskiemenuotas lietuviškas tekstas

 

Skiemenuotas tekstas:

Kindle ekrano nuotrauka, skiemenuotas lietuviškas tekstas

 

Įskiepio gija mobileread.com tinklapyje.

Reklama

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s