[voikko] Common Lisp ja libvoikko

Teemu Likonen tlikonen at iki.fi
Thu Jul 7 12:49:32 EEST 2011


Harri Pitkänen kirjoitti 4.7.2011 klo 16.01:

> Jos haluat, voisit laittaa tuon koodin mukaan libvoikkoon, - -

Laitoin koodin cl-hakemistoon. Koodi on tarkoitus ladata ASDF:n avulla
tai mieluummin vielä korkeamman tasoisella apuohjelmalla, Quicklispillä
<http://www.quicklisp.org/>, joka hakee automaattisesti kaikki
tarvittavat kirjastot netistä. Quicklispin asentamisen jälkeen (ks.
edellä mainittu nettisivu) Voikko-kirjastoa voi kokeilla vaikka näin:


    $ export CL_SOURCE_REGISTRY="$HOME/voikko/libvoikko/cl/:"
    $ sbcl --noinform           # Käynnistetään SBCL-niminen CL-toteutus.
    * (ql:quickload "voikko")

    [Kirjastoja ladataan netistä (tai omalta levyltä) ja käännetään.]

    * (voikko:version)

    "3.3"


Tässä vaiheessa funktioiden dokumentit puuttuvat kokonaan. Lisäilen
niitä pikku hiljaa. Nämä toiminnot ovat nyt valmiina:


VOIKKO> (with-instance (i)
	  (print (spell i "kissa"))
	  (print (suggest i "kisssa"))
	  (set-option i :no-ugly-hyphenation nil) ; ja kaikki muutkin optiot
	  (print (multiple-value-list (hyphenate i "yliopisto")))
	  (set-option i :no-ugly-hyphenation t)
	  (print (multiple-value-list (hyphenate i "yliopisto")))
	  (print (analyze i "nykyisyys"))
	  (version))

"kissa" 
("kissa" "kissaa" "kisassa" "kisussa") 
(("y" "li" "o" "pis" "to") " - --  - ") 
(("yli" "opis" "to") "   -   - ") 
((("CLASS" . "nimisana") ("NUMBER" . "singular") ("SIJAMUOTO" . "nimento")
  ("STRUCTURE" . "=pppp=ppppp"))
 (("CLASS" . "nimisana") ("NUMBER" . "singular") ("SIJAMUOTO" . "nimento")
  ("STRUCTURE" . "=ppppppppp"))) 
=> "3.3"


Voikko-istunnon voi käynnistää ja lopettaa INIT- ja
TERMINATE-funktioillakin. WITH-INSTANCE-makro tekee ne vain
automaattisesti. Lisäksi tein funktion SPLIT-WORD, jolla voi jakaa sanan
tavurajan kohdalta kahteen osaan, jos sanan pituus ylittää tietyn
merkkimäärän. Seuraavan esimerkkisanan kohdalla tietenkin tarvittaisiin
asetusta "no ugly hyphenation".


VOIKKO> (with-instance (i)
	  (loop with sana = "yliopisto"
		for l from 0 upto (length sana)
		do (format t "~2D ~S~%" l (split-word i l sana))))
 0 ("" . "yliopisto")
 1 ("y" . "liopisto")
 2 ("y" . "liopisto")
 3 ("yli" . "opisto")
 4 ("ylio" . "pisto")
 5 ("ylio" . "pisto")
 6 ("ylio" . "pisto")
 7 ("yliopis" . "to")
 8 ("yliopis" . "to")
 9 ("yliopisto" . "")
=> NIL



More information about the voikko mailing list