Prevajalni sistem Amebis PresisSlovnični pregledovalnik Amebis BesanaSintetizator govora Amebis Govorec Amebisova domača stran
Prva stran Vmesniki Preverjanje Pregibanje Prenos Cenik Naročite Zgodovina  
  Kratka zgodovina Besane

Besana je nastala septembra 1988. Govorimo seveda o različici za operacijski sistem DOS. Toda če želimo spoznati ozadje njenega nastanka, se je treba vrniti na začetek leta 1988.

Najprej smo želeli narediti raziskovalno nalogo iz računalništva. Naloga je bila precej nenavadna: narediti paket za delo z nizi v pascalu. Standardni pascal pač ni imel nobene podpore za delo z nizi in človek, ki se razvadi v basicu, se jim zelo težko odpove. Paket je bil zasnovan kot skupina funkcij oziroma procedur, ki bi približno ustrezale funkcijam iz basica. Ideja je šepala že v zasnovi: nizi so bili predstavljeni kot dinamične strukture. To samo po sebi sicer ni slabo, ampak če vsaka črka vleče s sabo kazalec, postane rešitev strašno neoptimalna. Drugi udarec pa je prišel, ko smo ugotovili, da Turbo pascal že sam podpira delo z nizi. Zato smo morali raziskovalno nalogo predstaviti drugače: začeli smo trditi, da so naše funkcije v pomoč pri standardnem pascalu in so tudi prenosljive v druge prevajalnike. Ker pa je tudi to bilo videti vse skupaj precej nezadovoljivo, smo se odločili, da bomo dodali še kratek predstavitveni programček, ki bo uporabljal te funkcije. Ker smo se pri kemiji ravno ukvarjali z risanjem strukturnih formul ogljikovodikov, smo se odločili poskusiti s tem.

Kemiki imajo zelo lepo razdelano poimenovanje (nomenklaturo), ki jim omogoča, da se ne izgubijo v nepregledni množici organskih spojin. Iz imena je mogoče ugotoviti strukturo spojine in to celo enolično. Ime je treba le razrezati na ustrezne kose in na podlagi tega narisati strukturo spojine. Seveda smo problem nekoliko poenostavili in se omejili le na neciklične ogljikovodike z največ dvanajstimi ogljiki v glavni verigi ter nerazvejanimi radikali, dolgimi do pet atomov.

Prvo predstavitev delovanja programa smo narisali kar z urejevalnikom besedil. Potem smo se pravzaprav šele lotili dela in v slabem mesecu napisali program in besedilo raziskovalne naloge. Pri besedilu smo se še precej igrali z oblikovanjem, tako da je bil končni videz naloge na trenutke kar precej načičkan. Naloga je bila popoln uspeh. Kemikom se ni sanjalo o računalništvu, računalničarjem pa ne o kemiji in mogoče so tudi zato tako dobro ocenjevali program. Posebna značilnost naloge je bil tudi njen naslov, ki je verjetno še zdaj eden najdaljših, kar jih je kdaj bilo.

Naslednje leto smo se opogumljeni (ali bolje rečeno prevzetni) od uspeha odločili, da bomo spet naredili nalogo iz kake čim bolj nemogoče kombinacije področij. Da bi zgrozili našega mentorja Duškota, smo izbrali še nalogo, ki je bila milo rečeno nemogoča - avtomatsko prevajanje. In pred avtomatskim prevajanjem iz slovenščine najprej potrebuješ stavčno analizo, še pred njo pa besedno analizo za slovenščino.

In tako se je rodila Besana. Prvi poskusi so bili napisani v basicu in prva beseda, ki jo je Besana poznala, je bila voda (in sicer jo je poznala narobe, rodilnik dvojine in množine je bilo kasneje treba popraviti). Postopek je poiskal možne pomenske oblike za posamezno besedo na zelo primitiven način - generiral je vse oblike iz slovarja in jih primerjal z dano besedo. Slovar je bil enostaven spisek korenov z nekaj dodanimi števili.

5 NUM%=3
10 DIM SKL$(2,5), BESEDE$(NUM%),BESEDE%(NUM%,2),STEVILA$(2)
20 RESTORE 30:FOR N%=0 TO 2:FOR M%=0 TO 5:READ SKL$(N%,M%):NEXT M%,N%
30 DATA a,e,i,o,i,o, i,"",ama,i,ah,ama, e,"",am,e,ah,ami
40 RESTORE 50:FOR N%=0 TO NUM%:READ BESEDE$(N%):FOR M%=0 TO 2:READ BESEDE%(N%,M%):NEXT M%,N%
50 DATA "zvez",0,0,0
60 DATA "hi{",0,0,0
70 DATA "rek",0,0,0
75 DATA "vod",0,0,0
100 RESTORE 110:FOR N%=0 TO 2:READ STEVILA$(N%):NEXT N%
110 DATA ednina,dvojina,mnozina
500 INPUT "Vpisi besedo:",A$
510 F%=0:FOR N%=0 TO NUM%
520 IF LEFT$(A$,LEN(BESEDE$(N%)))<>BESEDE$(N%) THEN GOTO 600
525 BEEP
530 FOR M%=0 TO 2:FOR S%=0 TO 5
540 IF A$=BESEDE$(N%)+SKL$(M%,S%) THEN F%=1:PRINT "sam  sklon:";S%+1;"  ";STEVILA$(M%)
550 NEXT S%,M%
600 NEXT N%
610 IF F%=0 THEN PRINT "Te besede ne poznam!"
Programska koda BesAne dne 9. septembra 1988

Ker pa basic pri takratni komisiji za raziskovalne naloge ni bil preveč priljubljen, smo se morali odločiti za drug programski jezik. Tedaj je postal moderen jezik C in tako smo se odločili zanj. C je za začetnika strašno zoprn, še posebno pri delu s kazalci in nizi. Zato je pravi čudež, da je Besana sploh delovala, saj so bile v programu zapisane strašne neumnosti. Besana je bila pač program, na katerem smo se učili C, in sicer tiste vrste program, ki se ga takoj, ko se malo naučiš jezika, znebiš, in ga po potrebi napišeš na novo. Besana nikoli ni bila napisana na novo, vedno je bila le krpana.

Na začetku so se vse besede v slovar, ki je bil enostavno v formatu ASCII in se ga je dalo popravljati z vsakim urejevalnikom, dodajale kar ročno. Program za vnos je bil napisan šele kasneje. Na začetku je bil to ločen program in je bil napisan strašno potratno, saj se je koda podvajala za vsako besedno vrsto posebej. Šele kasneje (že po raziskovalni nalogi) je bila koda malce urejena in pridružena v en program.

Besana je bila tedaj preprost filter, ki je bral besedilo v formatu ASCII in na zaslon izpisoval, kaj je našel za posamezno besedo. Z daljšanjem besedil je bilo potem treba dodati izpis napak v datoteko (da so se našle besede, ki jih je bilo treba dodati), analiza pa se je izpisovala na zaslon in se jo je dalo preusmeriti v datoteko.

Pokazalo pa se je, da najdemo pri posameznih besedah več možnosti, kaj naj bi beseda pomenila. Tako je mize lahko rodilnik ednine ali pa imenovalnik množine besede miza. Zato smo dodali nekaj preprostih pravil, s katerimi smo poskušali izločiti odvečne možnosti - ta program se je imenoval Stava in naj bi bil predhodnik stavčne analize. To je bil ločen program od tedanje BesAne, čeprav je vseboval le en drugačen modul.

Takrat pa se je začela počasi kazati ena zanimiva stvar, in sicer to, da je bilo med neznanimi besedami vedno več besed, ki so bile napačne. In pokazalo se je, da je to pravzaprav uporabno za to, da lahko popraviš vhodno besedilo, da potem ne vsebuje več napačnih besed, ki bi motile analizo. In pri vedno večjem številu besed, ki jih je Besana poznala, je bil delež napačnih med neznanimi vedno večji. Nekatere napake so se tudi pogosto ponavljale. Da ne bi bilo treba vsakič preverjati teh besed v slovarju, je bila BesAni v slovarju dodana oznaka o pravilnosti besede - na ta način je bilo možno dodati pogoste napake, da se ne bi kdaj dodale kot pravilne besede. Mimogrede pa se je dalo dodati še nasvete pri teh besedah, da je bilo vhodna besedila laže popraviti. Tako je Besana postala uporabna kot črkovalnik.

Do drugega zanimivega pojava pa je prišlo pri Stavi. Ta je uporabljala enostavna pravila, recimo to, da mora biti pridevnik oziroma samostalnik za predlogom v sklonu, ki zahteva predlog. Včasih pa beseda ni bila v pravem sklonu in v tem primeru je analizator pobrisal vse možnosti in beseda je na vsem lepem spet postala neznana. Čim več pravil je bilo vgrajeno v Stavi, tem večkrat so se take stvari dogajale. Včasih je bilo treba dopolniti pravila, vedno večkrat pa se je pokazalo, da je pravzaprav napaka v vhodnem besedilu. In potem se je v nekem trenutku pojavila ideja, da bi si program pri brisanju možnosti zapomnil, katero pravilo je zakrivilo brisanje in na koncu napisal pojasnilo, da na primer beseda za predlogom ni v pravem sklonu. Hmm, saj to bi pa morda bilo celo lahko uporabno za to, da človek najde napake v besedilu …

Nekaj let dela po zaključku raziskovalne naloge je program izboljšalo do faze, ko smo ga lahko začeli tudi prodajati. Kljub nenavadnim začetkom je Besana za DOS našla zelo veliko napak v besedilih in marsikateri uporabnik jo je leta uporabljal, dokler je ni v zgodovino preselil starinski uporabniški vmesnik, novi formati besedilnih datotek, ki jih ni več znala brati, in omejitve pri slovarju zaradi količine pomnilnika v operacijskem sistemu DOS.

Marsikaj bi se še dalo napisati o zgodovini BesAne, ampak zdaj je čas za novo BesAno, ki je zrasla iz pepela stare. Tokrat brez krpanja in brez kompromisov zaradi tega, ker bi bilo na voljo le 64 kB pomnilnika in je treba stvar posneti na 360 kB disketo in mora teči na procesorju 8086 na 8 MHz. Od stare BesAne so ostali le podatki in zamisli, vse ostalo je bilo napisano na novo, zdaj v jeziku C++. In tokrat najprej za prevajalnik Presis, po dolgih letih končno uresničen prvotni cilj. S pravo stavčno analizo, ne le s pomožnimi pravili (ki pa še vedno ostajajo v primeru, kadar analizatorju ne uspe opraviti dela). Z vgrajenim delom in znanjem mnogih, ki so vsa ta leta bolj ali manj sodelovali pri projektu. In iz Presisa je kot sestrski projekt spet izšla Besana, tokrat v osnovi kot program, ki pomaga pri iskanju slovničnih in slogovnih napak v besedilih. Ki se bo, upamo, skupaj s Presisom ob podpori zadovoljnih uporabnikov razvijal še naprej.

Peter Holozan
razvijalec

Vse pravice pridržane, © Amebis, d. o. o., Kamnik 1991 - 2010, v2.4.

Dodaj to spletno stran med priljubljene v svoj brskalnik. Pošlji naslov te spletne strani svojim prijateljem preko e-pošte. Deli to spletno stran s svojimi prijatelji na spletni strani Facebook. Deli to spletno stran s svojimi prijatelji na spletni strani Twitter. Deli to spletno stran s svojimi prijatelji na spletni strani LinkedIn. Deli to spletno stran s svojimi prijatelji na spletni strani delicious.