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 {
00223   ffint32 result = 0;
00224   int high, low, i;
00225 
00226   for(high = IE_LIST_LEN -1, low = -1; high - low > 1; ) {
00227     i = (high + low) / 2;
00228     if(ffstring_compare(&word->data, ie_list[i][0]) < 1)
00229       high = i;
00230     else
00231       low = i;
00232   }
00233   if(ffstring_equals(&word->data, ie_list[high][0])) {
00234     if((result = ffstring_delete(&word->data)))
00235       return result;
00236     else if((result = ffstring_create(ie_list[high][index], &word->data)))
00237       return result;
00238     else return 1;  
00239   }  
00240   else
00241     return 0;
00242 }
00243 
00244 ffint32 ffpriv_ie_genitive(ffword* word) {
00245   return ffpriv_ie_list_get(word, 1);
00246 }
00247 
00248 ffint32 ffpriv_ie_partitive(ffword* word)
00249 {
00250   return ffpriv_ie_list_get(word, 2);
00251 }
00252 

Generated on Sun May 15 21:50:47 2005 for FinFlect by  doxygen 1.4.1