Main Page | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

ffpriv_ie_vowel_change.c

Go to the documentation of this file.
00001 /*
00002  * finflect - Algorithms and tools for inflecting Finnish nouns
00003  * Copyright (C) 2004, 2005  The FinFlect Team
00004  *
00005  * This library is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU Lesser General Public
00007  * License as published by the Free Software Foundation; either
00008  * version 2.1 of the License, or (at your option) any later version.
00009  *
00010  * This library is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  * Lesser General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU Lesser General Public
00016  * License along with this library; if not, write to the Free Software
00017  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018  *
00019  *
00020  * For the complete legal text of the GNU Lesser General Public License,
00021  * see the file LICENSE. For a complete list of authors and copyright
00022  * holders, see the file AUTHORS.
00023  */
00024 
00025 /**
00026  * @file ffpriv_ie_vowel_change.c Contains the exception list for i-e
00027  * vowel change and implements the functions for getting information
00028  * from it with binary search. The functions are declared in ffpriv_ie_vowel_change.h.
00029  */
00030 
00031 #include <stdlib.h>
00032 
00033 #include "fftypes.h"
00034 #include "ffstring.h"
00035 #include "ffword.h"
00036 
00037 #include "ffpriv_ie_vowel_change.h"
00038 
00039 #define IE_LIST_LEN 177
00040 
00041 static ffchar* ie_list[IE_LIST_LEN][3] = {
00042       {"alpi", "alve", "alpe"},
00043       {"appi", "ape", "appe"},
00044       {"arki", "arje", "arke"},
00045       {"arpi", "arve", "arpe"},
00046       {"hanhi", "hanhe", "hanhe"},
00047       {"hanki", "hange", "hanke"},
00048       {"happi", "hape", "happe"},
00049       {"hauki", "haue", "hauke"},
00050       {"heisi", "heide", "heit"},
00051       {"helmi", "helme", "helme"},
00052       {"henki", "henge", "henke"},
00053       {"hetki", "hetke", "hetke"},
00054       {"hiili", "hiile", "hiil"},
00055       {"hiiri", "hiire", "hiir"},
00056       {"hiisi", "hiide", "hiit"},
00057       {"hiki", "hie", "hike"},
00058       {"hirsi", "hirre", "hirt"},
00059       {"hirvi", "hirve", "hirve"},
00060       {"huoli", "huole", "huol"},
00061       {"huuli", "huule", "huul"},
00062       {"joki", "joe", "joke"},
00063       {"jousi", "jouse", "jous"},
00064       {"juoni", "juone", "juon"},
00065       {"juuri", "juure", "juur"},
00066       {"jälki", "jälje", "jälke"},
00067       {"järki", "järje", "järke"},
00068       {"järvi", "järve", "järve"},
00069       {"kaali", "kaale", "kaal"},
00070       {"kaari", "kaare", "kaar"},
00071       {"kaihi", "kaihe", "kaihe"},
00072       {"kaikki", "kaike", "kaikke"},
00073       {"kaksi", "kahde", "kah"},
00074       {"kampi", "kamme", "kampe"},
00075       {"kanki", "kange", "kanke"},
00076       {"kansi", "kanne", "kant"},
00077       {"kaski", "kaske", "kaske"},
00078       {"kausi", "kaude", "kaut"},
00079       {"kieli", "kiele", "kiel"},
00080       {"kilpi", "kilve", "kilpe"},
00081       {"kivi", "kive", "kive"},
00082       {"koipi", "koive", "koipe"},
00083       {"korpi", "korve", "korpe"},
00084       {"korsi", "korre", "kort"},
00085       {"koski", "koske", "koske"},
00086       {"kuori", "kuore", "kuor"},
00087       {"kurki", "kurje", "kurke"},
00088       {"kusi", "kuse", "kus"},
00089       {"kuusi", "kuuse", "kuus"},
00090       {"kylki", "kylje", "kylke"},
00091       {"Kymi", "Kyme", "Kyme"},
00092       {"kynsi", "kynne", "kynt"},
00093       {"käki", "käe", "käke"},
00094       {"kärki", "kärje", "kärke"},
00095       {"käsi", "käde", "kät"},
00096       {"köysi", "köyde", "köyt"},
00097       {"lahti", "lahde", "lahte"},
00098       {"lampi", "lamme", "lampe"},
00099       {"lapsi", "lapse", "las"},
00100       {"lehti", "lehde", "lehte"},
00101       {"lempi", "lemme", "lempe"},
00102       {"leski", "leske", "leske"},
00103       {"liemi", "lieme", "lien"},
00104       {"liesi", "liede", "liet"},
00105       {"lohi", "lohe", "loh"},
00106       {"loimi", "loime", "loime"},
00107       {"lovi", "love", "love"},
00108       {"lumi", "lume", "lun"},
00109       {"luomi", "luome", "luome"},
00110       {"länki", "länge", "länke"},
00111       {"länsi", "länne", "länt"},
00112       {"meri", "mere", "mer"},
00113       {"mesi", "mede", "met"},
00114       {"mieli", "miele", "miel"},
00115       {"moni", "mone", "mon"},
00116       {"mäki", "mäe", "mäke"},
00117       {"niemi", "nieme", "nieme"},
00118       {"nimi", "nime", "nime"},
00119       {"noki", "noe", "noke"},
00120       {"nummi", "numme", "numme"},
00121       {"nuoli", "nuole", "nuol"},
00122       {"nuori", "nuore", "nuor"},
00123       {"nurmi", "nurme", "nurme"},
00124       {"närhi", "närhe", "närhe"},
00125       {"onki", "onge", "onke"},
00126       {"onni", "onne", "onne"},
00127       {"orsi", "orre", "ort"},
00128       {"ovi", "ove", "ove"},
00129       {"parsi", "parre", "part"},
00130       {"parvi", "parve", "parve"},
00131       {"peitsi", "peitse", "peitse"},
00132       {"pieli", "piele", "piel"},
00133       {"pieni", "piene", "pien"},
00134       {"piki", "pie", "pike"},
00135       {"pilvi", "pilve", "pilve"},
00136       {"polvi", "polve", "polve"},
00137       {"poski", "poske", "poske"},
00138       {"povi", "pove", "pove"},
00139       {"puoli", "puole", "puol"},
00140       {"pursi", "purre", "purt"},
00141       {"putki", "putke", "putke"},
00142       {"pälvi", "pälve", "pälve"},
00143       {"reki", "ree", "reke"},
00144       {"reisi", "reide", "reit"},
00145       {"retki", "retke", "retke"},
00146       {"riihi", "riihe", "riih"},
00147       {"ripsi", "ripse", "ripse"},
00148       {"rupi", "ruve", "rupe"},
00149       {"ruuhi", "ruuhe", "ruuh"},
00150       {"saari", "saare", "saar"},
00151       {"saarni", "saarne", "saarne"},
00152       {"saksi", "sakse", "sakse"},
00153       {"salmi", "salme", "salme"},
00154       {"sampi", "samme", "sampe"},
00155       {"sappi", "sape", "sappe"},
00156       {"sarvi", "sarve", "sarve"},
00157       {"savi", "save", "save"},
00158       {"seimi", "seime", "seime"},
00159       {"sieni", "siene", "sien"},
00160       {"siipi", "siive", "siipe"},
00161       {"sini", "sine", "sine"},
00162       {"solki", "solje", "solke"},
00163       {"soppi", "sope", "soppe"},
00164       {"sormi", "sorme", "sorme"},
00165       {"suksi", "sukse", "sukse"},
00166       {"suoli", "suole", "suol"},
00167       {"Suomi", "Suome", "Suome"},
00168       {"suomi", "suome", "suome"},
00169       {"suoni", "suone", "suon"},
00170       {"susi", "sude", "sut"},
00171       {"suuri", "suure", "suur"},
00172       {"suvi", "suve", "suve"},
00173       {"sylki", "sylje", "sylke"},
00174       {"sänki", "sänge", "sänke"},
00175       {"särki", "särje", "särke"},
00176       {"sääri", "sääre", "säär"},
00177       {"sääski", "sääske", "sääske"},
00178       {"taimi", "taime", "taime"},
00179       {"talvi", "talve", "talve"},
00180       {"tammi", "tamme", "tamme"},
00181       {"teeri", "teere", "teer"},
00182       {"telki", "telje", "telke"},
00183       {"tiili", "tiile", "tiil"},
00184       {"tilhi", "tilhe", "tilhe"},
00185       {"toimi", "toime", "toime"},
00186       {"tonki", "tonge", "tonke"},
00187       {"torvi", "torve", "torve"},
00188       {"tosi", "tode", "tot"},
00189       {"tuki", "tue", "tuke"},
00190       {"tuli", "tule", "tul"},
00191       {"tuohi", "tuohe", "tuoh"},
00192       {"tuomi", "tuome", "tuon"},
00193       {"tuppi", "tupe", "tuppe"},
00194       {"tuuli", "tuule", "tuul"},
00195       {"typpi", "type", "typpe"},
00196       {"tyvi", "tyve", "tyve"},
00197       {"tyyni", "tyyne", "tyyn"},
00198       {"tähti", "tähde", "tähte"},
00199       {"täysi", "täyde", "täyt"},
00200       {"uni", "une", "un"},
00201       {"uusi", "uude", "uut"},
00202       {"varsi", "varre", "vart"},
00203       {"veitsi", "veitse", "veis"},
00204       {"veli", "velje", "velje"},
00205       {"veri", "vere", "ver"},
00206       {"vesi", "vede", "vet"},
00207       {"vieri", "viere", "vier"},
00208       {"viiksi", "viikse", "viikse"},
00209       {"viisi", "viide", "viit"},
00210       {"virsi", "virre", "virt"},
00211       {"vuohi", "vuohe", "vuoh"},
00212       {"vuori", "vuore", "vuor"},
00213       {"vuosi", "vuode", "vuot"},
00214       {"vyyhti", "vyyhde", "vyyhte"},
00215       {"väki", "väe", "väke"},
00216       {"yksi", "yhde", "yh"},
00217       {"ääni", "ääne", "ään"},
00218       {"ääri", "ääre", "äär"}
00219     };
00220 
00221 static ffint32 ffpriv_ie_list_get(ffword* word, ffint32 index) {
00222   ffint32 result = 0;
00223   int high, low, i;
00224 
00225   for(high = IE_LIST_LEN -1, low = -1; high - low > 1; ) {
00226     i = (high + low) / 2;
00227     if(ffstring_compare(&word->data, ie_list[i][0]) < 1)
00228       high = i;
00229     else
00230       low = i;
00231   }
00232   if(ffstring_equals(&word->data, ie_list[high][0])) {
00233     if((result = ffstring_delete(&word->data)))
00234       return result;
00235     else if((result = ffstring_create(ie_list[high][index], &word->data)))
00236       return result;
00237     else
00238       return 1;
00239   } else
00240     return 0;
00241 }
00242 
00243 ffint32 ffpriv_ie_genitive(ffword* word) {
00244   return ffpriv_ie_list_get(word, 1);
00245 }
00246 
00247 ffint32 ffpriv_ie_partitive(ffword* word) {
00248   return ffpriv_ie_list_get(word, 2);
00249 }
00250 

Generated on Thu Jun 2 23:16:59 2005 for FinFlect by  doxygen 1.4.2