[voikko-devel] Unicode-asiaa

Teemu Likonen tlikonen at iki.fi
Sun Aug 13 01:10:16 EEST 2006


Harri Pitkänen kirjoitti:

> 1) Määritellään lista merkeistä, jotka voivat sellaisenaan olla
> hyväksyttäviä tekstissä. Tämä ei ole aivan sama asia kuin keväällä
> puheena ollut lista suomenkielisessä tekstissä hyväksyttävistä
> merkeistä, sillä jossain määrin on järkevää hyväksyä ainakin joitakin
> yleisimpiä vieraskielisiä kirjaimia vaikkapa nimissä tai
> kreikkalaisia kirjaimia yksiköissä yms.

Tarkoitatko yksinään olevia merkkejä, siis tavallaan "välilyönnit merkin 
molemmin puolin" -tilannetta? Tuleeko siitä ongelmia, jos tällaisessa 
tilanteessa hyväksytään aivan kaikki merkit? Myös ilmaisu "x-merkki" on 
tavallinen. x:n paikalla voi olla mitä tahansa.

Vaan pelkäänpä, etten tässä ihan ymmärtänyt, mitä tarkoitit :)

> 2) Tehdään toinen lista merkeistä tai merkkiyhdistelmistä, jotka ovat
> hyväksyttäviä mutta jotka kuitenkin muutetaan joksikin toiseksi
> merkiksi ennen Malagalle antamista. Teemu voisikin listata nämä
> muunnokset, koska on näitä jo todo-listalle laittanut ja hallitsee
> asiat varmasti paremmin kuin minä. Siis muodossa
> U+1234 + U+5678 -> U+9012 (yhdistävät tarkkeet) ja
> U+1111 -> U+2222 (heittomerkit, yhdysviivat)
> Muunnoksen suunta on siis aina niin, että muunnetaan siihen merkkiin
> jota Suomi-malagassa on käytetty. Siis HYPHEN -> HYPHEN-MINUS. Jos
> saisin noista valmiin listan, siitä voisi helposti tehdä
> muunnostaulukon libvoikon lähdekoodiin.

Voi hoitaa.

Koko tämä yhdistävien tarkkeiden ajatus on käytännössä hyvin 
teoreettinen suomen kielessä. Olen ollut käsittävinäni, että Unicodessa 
oli aluksi tarkoitus (tai ainakin ehdotus) pysytellä niinkin 
abstraktilla tasolla, että _kaikki_ tarkkeelliset merkit tehtäisiin 
pelkästään erillisten yhdistävien tarkkeiden avulla. Siitä olisi kyllä 
teoriassa monia etuja.

Edellistä ajatusta kuitenkin vastustettiin hyvästä syystä: 
yhteensopivuus vanhojen käytäntöjen (mm. tekstitiedostojen) kanssa 
menisi rikki. Kaikkiallahan on kirjoitettu valmiiksi yhdistettyjä 
(pre-composed) merkkejä, ja niinpä ne otettiin mukaan Unicodeenkin. 
Joidenkin kielten osalta se on vaatinut todella paljon erilaisten 
yhdistelmien lisäämistä merkistöön.

Mutta... jokin sovellus voi sisäisesti haluta toimia niin, 
että "irrottaa" tarkkeen perusmerkistä[*]. Esimerkiksi jokin hakusanoja 
tallentava hakukone voisi koodata sanan "äiti" näin:
 a <yhdistävä_treema> i t i
Tallennettua sanaa etsiessä voisi tällä tavoin helposti löytää tuon 
sanan myös hakusanalla "aiti". Jättää vain yhdistävät tarkkeet 
huomiotta; niiden koodithan ovat tiedossa (U+0300..U+036F). Jollain 
toisella hakuoptiolla voitaisiin etsiä nimenomaan 
merkkiä "a<yhdistävä_treema>". Joissain kielissä on useita tarkkeita 
samassa perusmerkissä, ja haut voitaisiin rajata koskemaan juuri 
tiettyjä tarkkeita. Pre-composed-merkkien kanssa hakualgoritmi menee 
paljon monimutkaisemmaksi kuin yhdistäviä tarkkeita käytettäessä.

*) Veikkaan muuten, että Google tallentaa hakusanat juuri näin, koska se 
osaa hakea ilman tarkkeita tai +-merkin avulla tarkasti pyydettyjä 
tarkkeita.

Suomen kielen ja Voikon kannalta ei varmaankaan ole koskaan kovin suurta 
käytännön tarvetta yhdistäville tarkkeille. Uskoakseni tuki niille on 
kuitenkin suhteellisen helppo toteuttaa ehdottamallasi muunnoslistalla. 
Juuri samoin minäkin sen ajattelin, ja voin luoda tämän 
muunnostaulukon. Moinen saattaa jopa löytyä Unicode-standardista. 
Ainakin toiseen suuntaan se löytyy helposti:

$ unicode ä
U+00E4 LATIN SMALL LETTER A WITH DIAERESIS
UTF-8: c3 a4  UTF-16BE: 00e4  Decimal: &#228;
ä (Ä)
Uppercase: U+00C4
Category: Ll (Letter, Lowercase)
Bidi: L (Left-to-Right)
Decomposition: 0061 0308

Eli tietokannassa on merkistä myös Decomposition-tieto.

> 3) Libvoikkoon lisätään asetus, joka määrittelee mitä tehdään
> sanoille jotka sisältävät merkkejä, joita ei löydy kummastakaan
> edellä mainitusta ryhmästä. Nämä on joko hylättävä tai hyväksyttävä
> ilman oikolukua, sovelluksesta riippuu kumpi vaihtoehto on parempi.
> Oletus on hylätä sanat kuten nykyinen versio tekee. Hyväksyttäville
> sanoille tehdään kohdan 2
> mukainen "normalisaatio" ja korjausehdotukset annetaan aina tässä
> normaalimuodossa. Näin on pakko tehdä, koska jos käyttäjä kirjoittaa
> vaikkapa "vaaan" ja oikolukuohjelma haluaa ehdottaa korjausta
> "vaa'an" [1], ei se mitenkään voi tietää kumman tyyppistä
> heittomerkkiä käyttäjä haluaisi käyttää. Tämä "tavallisesti käytetty"
> heittomerkki on turvallisempi, sillä kaikissa sovelluksissa "oikea"
> heittomerkki ei välttämättä edes toimi.

Minusta on erittäin turvallista olettaa, että virallinen ä-kirjain on 
suomen kielessä aina U+00E4 ja että sen hajotelma U+0061 + U+0308 jää 
marginaaliin. Molemmat ovat tavallaan yhtä arvokkaita ja oikeita, 
mutta "massat jyräävät" toisesta yleisemmän normin. Näin ollen vaikka 
oikoluvulle tarjoisi kirjoitusvirheellisen, yhdistäviä tarkkeita 
käyttäen muodostetun sanan, niin sen voi ilman tunnon tuskia palauttaa 
pre-composed-muodossa - niin kuin ehdotit.

Sen sijaan mitä sanoisit siitä, että heittomerkin sisältävälle sanalle 
annettaisiin samasta sanasta aina molemmat ehdotukset? Esimerkkisi 
mukaan siis virhe "vaaan" tuottaisi ehdotukset "vaa'an" ja "vaa’an" 
(plus muut mahdolliset ehdotukset).

Kahta erilaista yhdysmerkkiä en ehdottaisi. Käyttäjä ei osa tehdä eroa 
sanojen
 linja-auto
 linja‐auto
välille, jos ja kun fontti näyttää molemmat yhdysmerkit samanlaisena. 
Ellei sitten alemman sanan yhdysmerkki näy esimerkiksi neliönä, kun 
sitä ei kaikissa fonteissa ole. Päätämme, että U+002D HYPHEN-MINUS on 
se virallisempi ja ehdotuksissa tarjotaan aina sitä.


(Puolinukuksissa höpisin tällaista. Täytyy huomenna vielä lukea oma 
teksti ja miettiä, mitä tuli kirjoitettua :-) )



More information about the devel mailing list