Initial commit

This commit is contained in:
2020-01-27 08:56:08 +01:00
commit b7525048d6
27129 changed files with 3409855 additions and 0 deletions

View File

@@ -0,0 +1,261 @@
<?php
/*
*
* implements a Paice/Husk Stemmer written in PHP by Alexis Ulrich (http://alx2002.free.fr)
*
* rewriting rules to extract a stem from an English word
*
* This code is in the public domain.
*
*/
$PaiceHuskStemmerRules_en = array(
'ai*2.', # { -ia > - if intact }
'a*1.', # { -a > - if intact }
'bb1.', # { -bb > -b }
'city3s.', # { -ytic > -ys }
'ci2>', # { -ic > - }
'cn1t>', # { -nc > -nt }
'dd1.', # { -dd > -d }
'dei3y>', # { -ied > -y }
'deec2ss.', # { -ceed > -cess }
'dee1.', # { -eed > -ee }
'de2>', # { -ed > - }
'dooh4>', # { -hood > - }
'e1>', # { -e > - }
'feil1v.', # { -lief > -liev }
'fi2>', # { -if > - }
'gni3>', # { -ing > - }
'gai3y.', # { -iag > -y }
'ga2>', # { -ag > - }
'gg1.', # { -gg > -g }
'ht*2.', # { -th > - if intact }
'hsiug5ct.', # { -guish > -ct }
'hsi3>', # { -ish > - }
'i*1.', # { -i > - if intact }
'i1y>', # { -i > -y }
'@i1d.', # { -i@ > -id -- see nois4@> & vis3@> }
'juf1s.', # { -fuj > -fus }
'ju1d.', # { -uj > -ud }
'jo1d.', # { -oj > -od }
'jeh1r.', # { -hej > -her }
'jrev1t.', # { -verj > -vert }
'jsim2t.', # { -misj > -mit }
'jn1d.', # { -nj > -nd }
'j1s.', # { -j > -s }
'lbaifi6.', # { -ifiabl > - }
'lbai4y.', # { -iabl > -y }
'lba3>', # { -abl > - }
'lbi3.', # { -ibl > - }
'lib2l>', # { -bil > -bl }
'lc1.', # { -cl > c }
'lufi4y.', # { -iful > -y }
'luf3>', # { -ful > - }
'lu2.', # { -ul > - }
'lai3>', # { -ial > - }
'lau3>', # { -ual > - }
'la2>', # { -al > - }
'll1.', # { -ll > -l }
'mui3.', # { -ium > - }
'mu*2.', # { -um > - if intact }
'msi3>', # { -ism > - }
'mm1.', # { -mm > -m }
'nois4@>', # { -sion > -@ }
'noix4ct.', # { -xion > -ct }
'noi3>', # { -ion > - }
'nai3>', # { -ian > - }
'na2>', # { -an > - }
'nee0.', # { protect -een }
'ne2>', # { -en > - }
'nn1.', # { -nn > -n }
'pihs4>', # { -ship > - }
'pp1.', # { -pp > -p }
're2>', # { -er > - }
'rae0.', # { protect -ear }
'ra2.', # { -ar > - }
'ro2>', # { -or > - }
'ru2>', # { -ur > - }
'rr1.', # { -rr > -r }
'rt1>', # { -tr > -t }
'rei3y>', # { -ier > -y }
'sei3y>', # { -ies > -y }
'sis2.', # { -sis > -s }
'si2>', # { -is > - }
'ssen4>', # { -ness > - }
'ss0.', # { protect -ss }
'suo3>', # { -ous > - }
'su*2.', # { -us > - if intact }
's*1>', # { -s > - if intact }
's0.', # { -s > -s }
'tacilp4y.', # { -plicat > -ply }
'ta2>', # { -at > - }
'tnem4>', # { -ment > - }
'tne3>', # { -ent > - }
'tna3>', # { -ant > - }
'tpir2b.', # { -ript > -rib }
'tpro2b.', # { -orpt > -orb }
'tcud1.', # { -duct > -duc }
'tpmus2.', # { -sumpt > -sum }
'tpec2iv.', # { -cept > -ceiv }
'tulo2v.', # { -olut > -olv }
'tsis0.', # { protect -sist }
'tsi3>', # { -ist > - }
'tt1.', # { -tt > -t }
'uqi3.', # { -iqu > - }
'ugo1.', # { -ogu > -og }
'vis3@>', # { -siv > -@ }
'vie0.', # { protect -eiv }
'vi2>', # { -iv > - }
'ylb1>', # { -bly > -bl }
'yli3y>', # { -ily > -y }
'ylp0.', # { protect -ply }
'yl2>', # { -ly > - }
'ygo1.', # { -ogy > -og }
'yhp1.', # { -phy > -ph }
'ymo1.', # { -omy > -om }
'ypo1.', # { -opy > -op }
'yti3>', # { -ity > - }
'yte3>', # { -ety > - }
'ytl2.', # { -lty > -l }
'yrtsi5.', # { -istry > - }
'yra3>', # { -ary > - }
'yro3>', # { -ory > - }
'yfi3.', # { -ify > - }
'ycn2t>', # { -ncy > -nt }
'yca3>', # { -acy > - }
'zi2>', # { -iz > - }
'zy1s.', # { -yz > -ys }
'end0.' # end rule: the stem has already been found
);
?>

View File

@@ -0,0 +1,407 @@
<?php
/*
*
* implements a Paice/Husk Stemmer written in PHP by Alexis Ulrich (http://alx2002.free.fr)
*
* rewriting rules to extract a stem from a French word
*
* This code is in the public domain.
*
*/
$PaiceHuskStemmerRules_fr = array(
'esre1>', # { -erse > -ers }
'esio1>', # { -oise > -ois }
'siol1.', # { -lois > -loi }
'siof0.', # { -fois > -fois }
'sioe0.', # { -eois > -eois }
'sio3>', # { -ois > - }
'st1>', # { -ts > -t }
'sf1>', # { -fs > -f }
'sle1>', # { -els > -el }
'slo1>', # { -ols > -ol }
'sé1>', # { -és > -é }
'étuae5.', # { -eauté > - }
'étuae2.', # { -eauté > -eau }
'tnia0.', # { -aint > -aint }
'tniv1.', # { -vint > -vin }
'tni3>', # { -int > - }
'suor1.', # { -rous > -ou }
'suo0.', # { -ous > -ous }
'sdrail5.', # { -liards > -l }
'sdrai4.', # { -iards > -i }
'erèi1>', # { -ière > -ier }
'sesue3x>', # { -euses > -euse }
'esuey5i.', # { -yeuse > -i }
'esue2x>', # { -euse > -eux }
'se1>', # { -es > -e }
'erèg3.', # { -gère > -g }
'eca1>', # { -ace > -ac }
'esiah0.', # { -haise > - }
'esi1>', # { -ise > -is }
'siss2.', # { -ssis > -ss }
'sir2>', # { -ris > -r }
'sit2>', # { -tis > -t }
'egané1.', # { -énage > -énag }
'egalli6>', # { -illage > - }
'egass1.', # { -ssage > -sag }
'egas0.', # { -sage > - }
'egat3.', # { -tage > - }
'ega3>', # { -age > - }
'ette4>', # { -ette > - }
'ett2>', # { -tte > -t }
'etio1.', # { -oite > -oit }
'tioç4c.', # { -çoit > -c }
'tio0.', # { -oit > -oit }
'et1>', # { -te > -t }
'eb1>', # { -be > -b }
'snia1>', # { -ains > -ain }
'eniatnau8>', # { -uantaine > - }
'eniatn4.', # { -ntaine > -nt }
'enia1>', # { -aine > -ain }
'niatnio3.', # { -ointain > -oint }
'niatg3.', # { -gtain > -gt }
'eé1>', # { -ée > -é }
'éhcat1.', # { -taché > -tach }
'éhca4.', # { -aché > - }
'étila5>', # { -alité > - }
'étici5.', # { -icité > - }
'étir1.', # { -rité > -rit }
'éti3>', # { -ité > - }
'égan1.', # { -nagé > -nag }
'éga3>', # { -agé > - }
'étehc1.', # { -cheté > -chet }
'éte3>', # { -eté > - }
'éit0.', # { -tié > -tié }
'é1>', # { -é > - }
'eire4.', # { -erie > - }
'eirue5.', # { -eurie > - }
'eio1.', # { -oie > -oi }
'eia1.', # { -aie > -ai }
'ei1>', # { -ie > -i }
'eng1.', # { -gne > -gn }
'xuaessi7.', # { -isseaux > - }
'xuae1>', # { -eaux > -eau }
'uaes0.', # { -seau > -seau }
'uae3.', # { -eau > - }
'xuave2l.', # { -evaux > -eval }
'xuav2li>', # { -vaux > -vail }
'xua3la>', # { -aux > -al }
'ela1>', # { -ale > -al }
'lart2.', # { -tral > -tr }
'lani2>', # { -inal > -in }
'laé2>', # { -éal > -é }
'siay4i.', # { -yais > -i }
'siassia7.', # { -aissais > - }
'siarv1*.', # { -vrais > -vrai if intact }
'sia1>', # { -ais > -ai }
'tneiayo6i.', # { -oyaient > -oi }
'tneiay6i.', # { -yaient > -i }
'tneiassia9.', # { -aissaient > - }
'tneiareio7.', # { -oieraient > -oi }
'tneia5>', # { -aient > - }
'tneia4>', # { -aient > -a }
'tiario4.', # { -oirait > -oi }
'tiarim3.', # { -mirait > -mir }
'tiaria3.', # { -airait > -air }
'tiaris3.', # { -sirait > -sir }
'tiari5.', # { -irait > - }
'tiarve6>', # { -evrait > - }
'tiare5>', # { -erait > - }
'iare4>', # { -erai > - }
'are3>', # { -era > - }
'tiay4i.', # { -yait > -i }
'tia3>', # { -ait > - }
'tnay4i.', # { -yant > -i }
'emèiu5>', # { -uième > - }
'emèi4>', # { -ième > - }
'tnaun3.', # { -nuant > -nu }
'tnauqo3.', # { -oquant > -oqu }
'tnau4>', # { -uant > - }
'tnaf0.', # { -fant > -fant }
'tnaté2>', # { -étant > -ét }
'tna3>', # { -ant > - }
'tno3>', # { -ont > - }
'zeiy4i.', # { -yiez > -i }
'zey3i.', # { -yez > -i }
'zeire5>', # { -eriez > - }
'zeird4.', # { -driez > -d }
'zeirio4.', # { -oiriez > -oi }
'ze2>', # { -ez > - }
'ssiab0.', # { -baiss > - }
'ssia4.', # { -aiss > - }
'ssi3.', # { -iss > - }
'tnemma6>', # { -amment > - }
'tnemesuey9i.', # { -yeusement > -i }
'tnemesue8>', # { -eusement > - }
'tnemevi7.', # { -ivement > - }
'tnemessia5.', # { -aissement > -aiss }
'tnemessi8.', # { -issement > - }
'tneme5>', # { -ement > - }
'tnemia4.', # { -aiment > -ai }
'tnemé5>', # { -ément > - }
'el2l>', # { -le > -l }
'lle3le>', # { -ell > -el }
'letô0.', # { -ôtel > -ôtel }
'lepp0.', # { -ppel > -ppel }
'le2>', # { -el > - }
'srei1>', # { -iers > -ier }
'reit3.', # { -tier > -t }
'reila2.', # { -alier > -ali }
'rei3>', # { -ier > - }
'ertâe5.', # { -eâtre > - }
'ertâé1.', # { -éâtre > -éâtr }
'ertâ4.', # { -âtre > - }
'drai4.', # { -iard > - }
'erdro0.', # { -ordre > -ordre }
'erute5.', # { -eture > - }
'ruta0.', # { -atur > -atur }
'eruta1.', # { -ature > -atur }
'erutiov1.', # { -voiture > -voitur }
'erub3.', # { -bure > -b }
'eruh3.', # { -hure > -h }
'erul3.', # { -lure > -l }
'er2r>', # { -re > -r }
'nn1>', # { -nn > -n }
'rèi3.', # { -ièr > - }
'srev0.', # { -vers > -vers }
'sr1>', # { -rs > -r }
'rid2>', # { -dir > -d }
're2>', # { -er > - }
'xuei4.', # { -ieux > - }
'esuei5.', # { -ieuse > - }
'lbati3.', # { -itabl > -it }
'lba3>', # { -abl > - }
'rueis0.', # { -sieur > - }
'ruehcn4.', # { -ncheur > -nc }
'ecirta6.', # { -atrice > - }
'ruetai6.', # { -iateur > - }
'rueta5.', # { -ateur > - }
'rueir0.', # { -rieur > - }
'rue3>', # { -eur > - }
'esseti6.', # { -itesse > - }
'essere6>', # { -eresse > - }
'esserd1.', # { -dresse > -dress }
'esse4>', # { -esse > - }
'essiab1.', # { -baisse > -baiss }
'essia5.', # { -aisse > - }
'essio1.', # { -oisse > -oiss }
'essi4.', # { -isse > - }
'essal4.', # { -lasse > -l }
'essa1>', # { -asse > -ass }
'ssab1.', # { -bass > -bas }
'essurp1.', # { -prusse > -uss }
'essu4.', # { -usse > - }
'essi1.', # { -isse > -ss }
'ssor1.', # { -ross > -ros }
'essor2.', # { -rosse > -ros }
'esso1>', # { -osse > -oss }
'ess2>', # { -sse > -s }
'tio3.', # { -oit > - }
'rès2re.', # { -sèr > -ser }
'rè0e.', # { -èr > -ère }
'esn1.', # { -nse > -èns }
'eu1>', # { -ue > -u }
'sua0.', # { -aus > -aus }
'su1>', # { -us > -u }
'utt1>', # { -utt > -tt }
'tuç3c.', # { -çut > -c }
'uç2c.', # { -çu > -c }
'ur1.', # { -ru > -r }
'ehcn2>', # { -nche > -nc }
'ehcu1>', # { -uche > -uch }
'snorr3.', # { -rrons > -rr }
'snoru3.', # { -urons > -ur }
'snorua3.', # { -aurons > -aur }
'snorv3.', # { -vrons > -vr }
'snorio4.', # { -oirons > -oi }
'snori5.', # { -irons > - }
'snore5>', # { -erons > - }
'snortt4>', # { -ttrons > -tt }
'snortîa7.', # { -aîtrons > - }
'snort3.', # { -trons > -tr }
'snor4.', # { -rons > - }
'snossi6.', # { -issons > - }
'snoire6.', # { -erions > - }
'snoird5.', # { -drions > -d }
'snoitai7.', # { -iations > - }
'snoita6.', # { -ations > - }
'snoits1>', # { -stions > -stion }
'noits0.', # { -stion > -stion }
'snoi4>', # { -ions > - }
'noitaci7>', # { -ication > - }
'noitai6.', # { -iation > - }
'noita5.', # { -ation > - }
'noitu4.', # { -ution > -u }
'noi3>', # { -ion > - }
'snoya0.', # { -ayons > -ayons }
'snoy4i.', # { -yons > -i }
'snoça1.', # { -açons > -açon }
'snoçr1.', # { -rçons > -rçon }
'snoe4.', # { -eons > - }
'snosiar1>', # { -raisons > - }
'snola1.', # { -alons > -alon }
'sno3>', # { -ons > - }
'sno1>', # { -ons > -on }
'noll2.', # { -llon > -ll }
'tnennei4.', # { -iennent > -ien }
'ennei2>', # { -ienne > -ien }
'snei1>', # { -iens > -ien }
'sneé1>', # { -éens > -éen }
'enneé5e.', # { -éenne > -e }
'neé3e.', # { -éen > -e }
'neic0.', # { -cien > -cien }
'neiv0.', # { -vien > -vien }
'nei3.', # { -ien > - }
'sc1.', # { -cs > -c }
'sd1.', # { -ds > -d }
'sg1.', # { -gs > -g }
'sni1.', # { -ins > -in }
'tiu0.', # { -uit > - }
'ti2.', # { -it > - }
'sp1>', # { -ps > -p }
'sna1>', # { -ans > -an }
'sue1.', # { -eus > -eu }
'enn2>', # { -nne > -n }
'nong2.', # { -gnon > -gn }
'noss2.', # { -sson > -ss }
'rioe4.', # { -eoir > - }
'riot0.', # { -toir > -toir }
'riorc1.', # { -croir > -croi }
'riovec5.', # { -cevoir > -c }
'rio3.', # { -oir > - }
'ric2.', # { -cir > -l }
'ril2.', # { -lir > -l }
'tnerim3.', # { -mirent > -mir }
'tneris3>', # { -sirent > -sir }
'tneri5.', # { -irent > - }
'tîa3.', # { -aît > - }
'riss2.', # { -ssir > -ss }
'tî2.', # { -ît > - }
'tâ2>', # { -ât > - }
'ario2.', # { -oira > -oi }
'arim1.', # { -mira > -m }
'ara1.', # { -ara > -ar }
'aris1.', # { -sira > -sir }
'ari3.', # { -ira > - }
'art1>', # { -tra > -tr }
'ardn2.', # { -ndra > -nd }
'arr1.', # { -rra > -rr }
'arua1.', # { -aura > -aur }
'aro1.', # { -ora > -or }
'arv1.', # { -vra > -vr }
'aru1.', # { -ura > -ur }
'ar2.', # { -ra > - }
'rd1.', # { -dr > -d }
'ud1.', # { -du > - }
'ul1.', # { -lu > -l }
'ini1.', # { -ini > -in }
'rin2.', # { -nir > - }
'tnessiab3.', # { -baissent > -baiss }
'tnessia7.', # { -aissent > - }
'tnessi6.', # { -issent > - }
'tnessni4.', # { -inssent > -ins }
'sini2.', # { -inis > -in }
'sl1.', # { -ls > -l }
'iard3.', # { -drai > -d }
'iario3.', # { -oirai > -oi }
'ia2>', # { -ai > - }
'io0.', # { -oi > -oi }
'iule2.', # { -elui > -el }
'i1>', # { -i > - }
'sid2.', # { -dis > -d }
'sic2.', # { -cis > -c }
'esoi4.', # { -iose > - }
'ed1.', # { -de > -d }
'ai2>', # { -ia > - }
'a1>', # { -a > - }
'adr1.', # { -rda > -rd }
'tnerè5>', # { -èrent > - }
'evir1.', # { -rive > -riv }
'evio4>', # { -oive > - }
'evi3.', # { -ive > - }
'fita4.', # { -atif > - }
'fi2>', # { -if > - }
'enie1.', # { -eine > -ein }
'sare4>', # { -eras > - }
'sari4>', # { -iras > - }
'sard3.', # { -dras > -d }
'sart2>', # { -tras > -tr }
'sa2.', # { -as > - }
'tnessa6>', # { -assent > - }
'tnessu6>', # { -ussent > - }
'tnegna3.', # { -angent > -ang }
'tnegi3.', # { -igent > -ig }
'tneg0.', # { -gent > -gent }
'tneru5>', # { -urent > - }
'tnemg0.', # { -gment > -gment }
'tnerni4.', # { -inrent > -in }
'tneiv1.', # { -vient > -vien }
'tne3>', # { -ent > - }
'une1.', # { -enu > -en }
'en1>', # { -ne > -n }
'nitn2.', # { -ntin > - }
'ecnay5i.', # { -yance > -i }
'ecnal1.', # { -lance > -lanc }
'ecna4.', # { -ance > - }
'ec1>', # { -ce > -c }
'nn1.', # { -nn > -n }
'rit2>', # { -tir > - }
'rut2>', # { -tur > -t }
'rud2.', # { -dur > -d }
'ugn1>', # { -ngu > -ng }
'eg1>', # { -ge > -g }
'tuo0.', # { -out > -out }
'tul2>', # { -lut > -l }
'tû2>', # { -ût > - }
'ev1>', # { -ve > -v }
'vè2ve>', # { -èv > -ev }
'rtt1>', # { -ttr > -tt }
'emissi6.', # { -issime > - }
'em1.', # { -me > -m }
'ehc1.', # { -che > -ch }
'céi2cè.', # { -iéc > -ièc }
'libi2l.', # { -ibil > -ibl }
'llie1.', # { -eill > -eil }
'liei4i.', # { -ieil > -i }
'xuev1.', # { -veux > -veu }
'xuey4i.', # { -yeux > -i }
'xueni5>', # { -ineux > - }
'xuell4.', # { -lleux > -l }
'xuere5.', # { -ereux > - }
'xue3>', # { -eux > - }
'rbé3rbè.', # { -ébr > -èbr }
'tur2.', # { -rut > -r }
'riré4re.', # { -érir > -er }
'rir2.', # { -rir > -r }
'câ2ca.', # { -âc > -ac }
'snu1.', # { -uns > -un }
'rtîa4.', # { -aîtr > - }
'long2.', # { -gnol > -gn }
'vec2.', # { -cev > -c }
'ç1c>', # { -ç > -c }
'ssilp3.', # { -pliss > -pl }
'silp2.', # { -plis > -pl }
'tèhc2te.', # { -chèt > -chet }
'nèm2ne.', # { -mèn > -men }
'llepp1.', # { -ppell > -ppel }
'tan2.', # { -nat > -n }
'rvè3rve.', # { -èvr > -evr }
'rvé3rve.', # { -évr > -evr }
'rè2re.', # { -èr > -er }
'ré2re.', # { -ér > -er }
'tè2te.', # { -èt > -et }
'té2te.', # { -ét > -et }
'epp1.', # { -ppe > -pp }
'eya2i.', # { -aye > -ai }
'ya1i.', # { -ay > -ai }
'yo1i.', # { -oy > -oi }
'esu1.', # { -use > -us }
'ugi1.', # { -igu > -g }
'tt1.', # { -tt > -t }
# end rule: the stem has already been found
'end0.'
);
?>

View File

@@ -0,0 +1,148 @@
<?php
/*
*
* implements a Paice/Husk Stemmer written in PHP by Alexis Ulrich (http://alx2002.free.fr)
*
* This code is in the public domain.
*
*/
class PaiceHuskStemmer
{
// the rule patterns include all accented forms for a given language
var $rule_pattern_en = "/^([a-z]*)(\*){0,1}(\d)([a-z]*)([.|>])/";
var $rule_pattern_fr = "/^([a-zàâèéêëîïôûùç]*)(\*){0,1}(\d)([a-zàâèéêëîïôûùç]*)([.|>])/";
// we include both languages to prevent I/O of files everywhere
function getIntlVars(&$PaiceHuskStemmerRules, &$rule_pattern, $language)
{
if ($language == 'fr')
{
require(realpath(dirname(__FILE__)) . '/PaiceHuskStemRules_fr.php');
$PaiceHuskStemmerRules = $PaiceHuskStemmerRules_fr;
$rule_pattern = $this->rule_pattern_fr;
}
else if ($language == 'en')
{
require(realpath(dirname(__FILE__)) . '/PaiceHuskStemRules_en.php');
$PaiceHuskStemmerRules = $PaiceHuskStemmerRules_en;
$rule_pattern = $this->rule_pattern_en;
}
}
// returns the number of the first rule from the rule number $rule_number
// that can be applied to the given reversed form
// returns -1 if no rule can be applied, ie the stem has been found
function getFirstRule($reversed_form, $rule_number, $language='en') {
$this->getIntlVars($PaiceHuskStemmerRules, $rule_pattern, $language);
$nb_rules = sizeOf($PaiceHuskStemmerRules);
for ($i=$rule_number; $i<$nb_rules; $i++) {
// gets the letters from the current rule
$rule = $PaiceHuskStemmerRules[$i];
$rule = preg_replace($rule_pattern, "\\1", $rule);
if (strncasecmp($rule,$reversed_form,strlen($rule)) == 0) return $i;
}
return -1;
}
/*
* Check the acceptability of a stem for a given language
*
* $reversed_stem: the stem to check in reverse form
* $language: text language (default: French)
*/
function checkAcceptability($reversed_stem, $language='en') {
switch ($language) {
case 'en': # English
if (preg_match("/[aeiouy]$/",$reversed_stem)) {
// if the form starts with a vowel then at least two letters must remain after stemming (e.g., "owed"/"owing" --> "ow", but not "ear" --> "e")
return (strlen($reversed_stem) >= 2);
}
else {
// if the form starts with a consonant then at least three letters must remain after stemming
if (strlen($reversed_stem) < 3) return False;
// and at least one of these must be a vowel or "y" (e.g., "saying" --> "say" and "crying" --> "cry", but not "string" --> "str", "meant" --> "me" or "cement" --> "ce")
return (preg_match("/[aeiouy]/",$reversed_stem));
}
break;
case 'fr': # French
if (preg_match("/[aàâeèéêëiîïoôuûùy]$/",$reversed_stem)) {
// if the form starts with a vowel then at least two letters must remain after stemming (e.g.: "étaient" --> "ét")
return (strlen($reversed_stem) > 2);
}
else {
// if the form starts with a consonant then at least two letters must remain after stemming
if (strlen($reversed_stem) <= 2) {
return False;
}
// and at least one of these must be a vowel or "y"
return (preg_match("/[aàâeèéêëiîïoôuûùy]/",$reversed_stem));
}
break;
break;
default:
die("Error in checkAcceptability function: the language <i>$language</i> is not supported.");
}
}
/*
* the actual Paice/Husk stemmer
* which returns a stem for the given form
*
* $form: the word for which we want the stem
* $language: the word language (default: French)
*/
function Stem($form, $language='en') {
$this->getIntlVars($PaiceHuskStemmerRules, $rule_pattern, $language);
$intact = True;
$stem_found = False;
$reversed_form = strrev($form);
$rule_number = 0;
// that loop goes through the rules' array until it finds an ending one (ending by '.') or the last one ('end0.')
while (True) {
$rule_number = $this->getFirstRule($reversed_form, $rule_number, $language);
if ($rule_number == -1) {
// no other rule can be applied => the stem has been found
break;
}
$rule = $PaiceHuskStemmerRules[$rule_number];
preg_match($rule_pattern, $rule, $matches);
if (($matches[2] != '*') || ($intact)) {
$reversed_stem = $matches[4] . substr($reversed_form,$matches[3],strlen($reversed_form)-$matches[3]);
if ($this->checkAcceptability($reversed_stem,$language)) {
$reversed_form = $reversed_stem;
if ($matches[5] == '.') break;
}
else {
// go to another rule
$rule_number++;
}
}
else {
// go to another rule
$rule_number++;
}
}
return strrev($reversed_form);
}
}
?>

View File

@@ -0,0 +1,82 @@
<?php
/*
*
* implements a Paice/Husk Stemmer written in PHP by Alexis Ulrich (http://alx2002.free.fr)
*
* Tool kit
*
* This code is in the public domain.
*
*/
require_once(realpath(dirname(__FILE__)) . '/PaiceHuskStemmer.php');
class StemmingToolkit
{
// punctuation characters
var $punctuation = array('.', ',', ';', ':', '!', '?', '"', '\'', '(', ')', '--');
/*
* standardized punctuation: each punctuation mark has a space before and after it
*
* $text: string, the text to be processed
* $lang: language of the text (default: English)
*/
function standardizePunctuation($text, $lang='en') {
// puts a space before and after a punctuation mark,
// whatever the number of spaces there were before and after it
$text = preg_replace('/( )*(["\'\.,;:\(\)\?!])( )*/', ' \\2 ', $text);
// whitespace
$text = preg_replace('/\s/', ' ', $text);
if ($lang == 'en') {
// handles the didn't, couldn't...
$text = str_replace('n \' t', 'n\'t', $text);
// handles the o'clock
$text = str_replace('o \' clock', 'o\'clock', $text);
}
return $text;
}
/*
* indexes the given text and returns an array of three arrays:
* - 'original': the original text
* - 'modified': the modified text, ie the standardized-punctuation form
* - 'index': an array of three-element arrays:
* - 'form': the form of the word in the original text
* - 'index': the index of the form in the modified text
* - 'stem': the stem of the form
*
* $text: string, the text to be processed
* $lang: language of the text (default: English)
*/
function indexText($text, $lang='en', $stem = true) {
global $punctuation;
require_once(realpath(dirname(__FILE__)) . '/stoplist_'.$lang.'.inc.php');
$indexArray = array();
$thisText = $this->standardizePunctuation($text, $lang);
$thisTextWords = explode(' ',$thisText);
$thisTextIndex = array();
$wordIndex = 0;
$stemmer = new PaiceHuskStemmer();
for ($i=0; $i<sizeOf($thisTextWords); $i++)
{
$form = $thisTextWords[$i];
$word = strtolower($form);
// words which length is 1 or 0 are not processed.
if ((!@in_array($word, $punctuation)) && (strlen($word) > 1) && (!@in_array($word, $stoplist))) {
$thisTextIndex[] = array('form'=>$form, 'stem'=>($stem ? $stemmer->Stem($word,$lang) : $word), 'index'=>$wordIndex);
}
$wordIndex = $wordIndex + strlen($word) + 1; // the last space
}
return array('original'=>$text, 'modified'=>$thisText, 'index'=>$thisTextIndex);
}
}
?>

View File

@@ -0,0 +1,632 @@
<?php
// English stoplist
$stoplist = array(
'a',
'able',
'about',
'above',
'according',
'accordingly',
'across',
'actually',
'after',
'afterwards',
'again',
'against',
'ago',
'ain\'t',
'all',
'allow',
'allows',
'almost',
'alone',
'along',
'already',
'also',
'although',
'always',
'am',
'among',
'amongst',
'amoungst',
'amount',
'an',
'and',
'another',
'any',
'anybody',
'anyhow',
'anyone',
'anything',
'anyway',
'anyways',
'anywhere',
'apart',
'appear',
'appreciate',
'appropriate',
'are',
'aren\'t',
'around',
'as',
'aside',
'ask',
'asking',
'associated',
'at',
'available',
'away',
'awfully',
'b',
'back',
'be',
'became',
'because',
'become',
'becomes',
'becoming',
'been',
'before',
'beforehand',
'behind',
'being',
'believe',
'below',
'beside',
'besides',
'best',
'better',
'between',
'beyond',
'bill',
'both',
'bottom',
'brief',
'but',
'by',
'c',
'c\'mon',
'c\'s',
'call',
'came',
'can',
'can\'t',
'cannot',
'cant',
'cause',
'causes',
'certain',
'certainly',
'changes',
'clearly',
'co',
'com',
'come',
'comes',
'computer',
'con',
'concerning',
'consequently',
'consider',
'considering',
'contain',
'containing',
'contains',
'corresponding',
'could',
'couldn\'t',
'couldnt',
'course',
'cry',
'currently',
'd',
'de',
'definitely',
'describe',
'described',
'despite',
'detail',
'did',
'didn\'t',
'different',
'do',
'does',
'doesn\'t',
'doing',
'don\'t',
'done',
'down',
'downwards',
'due',
'during',
'e',
'each',
'early',
'edu',
'eg',
'eight',
'either',
'eleven',
'else',
'elsewhere',
'empty',
'enough',
'entirely',
'especially',
'et',
'etc',
'even',
'ever',
'every',
'everybody',
'everyone',
'everything',
'everywhere',
'ex',
'exactly',
'example',
'except',
'f',
'far',
'few',
'fifteen',
'fifth',
'fify',
'fill',
'find',
'fire',
'first',
'five',
'followed',
'following',
'follows',
'for',
'former',
'formerly',
'forth',
'forty',
'found',
'four',
'from',
'front',
'full',
'further',
'furthermore',
'g',
'get',
'gets',
'getting',
'give',
'given',
'gives',
'go',
'goes',
'going',
'gone',
'got',
'gotten',
'greetings',
'h',
'had',
'hadn\'t',
'happens',
'hardly',
'has',
'hasn\'t',
'hasnt',
'have',
'haven\'t',
'having',
'he',
'he\'s',
'hello',
'help',
'hence',
'her',
'here',
'here\'s',
'hereafter',
'hereby',
'herein',
'hereupon',
'hers',
'herself',
'hi',
'high',
'him',
'himself',
'his',
'hither',
'hopefully',
'how',
'howbeit',
'however',
'hundred',
'i',
'i\'d',
'i\'ll',
'i\'m',
'i\'ve',
'ie',
'if',
'ignored',
'immediate',
'in',
'inasmuch',
'inc',
'indeed',
'indicate',
'indicated',
'indicates',
'inner',
'insofar',
'instead',
'interest',
'into',
'inward',
'is',
'isn\'t',
'it',
'it\'d',
'it\'ll',
'it\'s',
'its',
'itself',
'j',
'just',
'k',
'keep',
'keeps',
'kept',
'know',
'known',
'knows',
'l',
'last',
'late',
'lately',
'later',
'latter',
'latterly',
'least',
'less',
'lest',
'let',
'let\'s',
'like',
'liked',
'likely',
'little',
'long',
'look',
'looking',
'looks',
'ltd',
'm',
'made',
'mainly',
'make',
'many',
'may',
'maybe',
'me',
'mean',
'meanwhile',
'merely',
'might',
'mill',
'mine',
'more',
'moreover',
'most',
'mostly',
'move',
'much',
'must',
'my',
'myself',
'n',
'name',
'namely',
'nd',
'near',
'nearly',
'necessary',
'need',
'needs',
'neither',
'never',
'nevertheless',
'new',
'next',
'nine',
'no',
'nobody',
'non',
'none',
'noone',
'nor',
'normally',
'not',
'nothing',
'novel',
'now',
'nowhere',
'o',
'obviously',
'of',
'off',
'often',
'oh',
'ok',
'okay',
'old',
'on',
'once',
'one',
'ones',
'only',
'onto',
'or',
'other',
'others',
'otherwise',
'ought',
'our',
'ours',
'ourselves',
'out',
'outside',
'over',
'overall',
'own',
'p',
'part',
'particular',
'particularly',
'per',
'perhaps',
'placed',
'please',
'plus',
'possible',
'presumably',
'probably',
'provides',
'put',
'puts',
'q',
'que',
'quite',
'qv',
'r',
'rather',
'rd',
're',
'really',
'reasonably',
'regarding',
'regardless',
'regards',
'relatively',
'respectively',
'right',
's',
'said',
'same',
'saw',
'say',
'saying',
'says',
'second',
'secondly',
'see',
'seeing',
'seem',
'seemed',
'seeming',
'seems',
'seen',
'self',
'selves',
'sensible',
'sent',
'serious',
'seriously',
'seven',
'several',
'shall',
'she',
'should',
'shouldn\'t',
'show',
'side',
'since',
'sincere',
'six',
'sixty',
'so',
'some',
'somebody',
'somehow',
'someone',
'something',
'sometime',
'sometimes',
'somewhat',
'somewhere',
'soon',
'sorry',
'specified',
'specify',
'specifying',
'spite',
'still',
'sub',
'such',
'sup',
'sure',
'system',
't',
't\'s',
'take',
'taken',
'tell',
'ten',
'tends',
'th',
'than',
'thank',
'thanks',
'thanx',
'that',
'that\'s',
'thats',
'the',
'their',
'theirs',
'them',
'themselves',
'then',
'thence',
'there',
'there\'s',
'thereafter',
'thereby',
'therefore',
'therein',
'theres',
'thereupon',
'therewith',
'these',
'they',
'they\'d',
'they\'ll',
'they\'re',
'they\'ve',
'thick',
'thin',
'think',
'third',
'this',
'thorough',
'thoroughly',
'those',
'though',
'three',
'through',
'throughout',
'thru',
'thus',
'to',
'together',
'too',
'took',
'top',
'toward',
'towards',
'tried',
'tries',
'truly',
'try',
'trying',
'twelve',
'twenty',
'twice',
'two',
'u',
'un',
'under',
'unfortunately',
'unless',
'unlikely',
'until',
'unto',
'up',
'upon',
'us',
'use',
'used',
'useful',
'uses',
'using',
'usually',
'uucp',
'v',
'value',
'various',
'very',
'via',
'viz',
'vs',
'w',
'want',
'wants',
'was',
'wasn\'t',
'way',
'we',
'we\'d',
'we\'ll',
'we\'re',
'we\'ve',
'welcome',
'well',
'went',
'were',
'weren\'t',
'what',
'what\'s',
'whatever',
'when',
'whence',
'whenever',
'where',
'where\'s',
'whereafter',
'whereas',
'whereby',
'wherein',
'whereupon',
'wherever',
'whether',
'which',
'while',
'whither',
'who',
'who\'s',
'whoever',
'whole',
'whom',
'whose',
'why',
'will',
'willing',
'wish',
'with',
'within',
'without',
'won\'t',
'wonder',
'would',
'wouldn\'t',
'x',
'y',
'yes',
'yet',
'you',
'you\'d',
'you\'ll',
'you\'re',
'you\'ve',
'your',
'yours',
'yourself',
'yourselves',
'z',
'zero'
);
?>

View File

@@ -0,0 +1,921 @@
<?php
// French stoplist
$stoplist = array(
'$',
'\'en',
'-ce',
'-ci',
'-elle',
'-elles',
'-en',
'-il',
'-ils',
'-je',
'-la',
'-le',
'-les',
'-leur',
'-lui',
'-là',
'-moi',
'-nous',
'-on',
'-t',
'-toi',
'-tu',
'-vous',
'-y',
'A',
'Ap.',
'Apr.',
'B',
'C',
'Ca',
'D',
'E',
'F',
'G',
'GHz',
'H',
'I',
'J',
'K',
'L',
'M',
'MHz',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'USD',
'V',
'W',
'X',
'Z',
'a',
'afin',
'afin d\'',
'afin de',
'afin qu\'',
'afin que',
'ah',
'ai',
'aie',
'aient',
'aies',
'ailleurs',
'ainsi',
'ainsi qu\'',
'ainsi que',
'ait',
'alentour',
'alias',
'allaient',
'allais',
'allait',
'allez',
'allons',
'alors',
'alors qu\'',
'alors que',
'après',
'après qu\'',
'après que',
'après-demain',
'arrière',
'as',
'assez',
'attendu',
'au',
'au cours d\'',
'au cours de',
'au cours des',
'au cours du',
'au regard d\'',
'au regard de',
'au regard des',
'au regard du',
'au sein d\'',
'au sein de',
'au sein des',
'au sein du',
'au sujet d\'',
'au sujet de',
'au sujet des',
'au sujet du',
'au travers d\'',
'au travers de',
'au travers des',
'au travers du',
'au-dedans',
'au-dehors',
'au-delà',
'au-delà d\'',
'au-delà de',
'au-delà des',
'au-delà du',
'au-dessous',
'au-dessus',
'au-devant',
'au-devant d\'',
'au-devant de',
'au-devant des',
'au-devant du',
'aucun',
'aucune',
'audit',
'aujourd\'',
'aujourd\'hui',
'auparavant',
'auprès',
'auprès d\'',
'auprès de',
'auprès des',
'auprès du',
'auquel',
'aura',
'aurai',
'auraient',
'aurais',
'aurait',
'auras',
'aurez',
'auriez',
'aurions',
'aurons',
'auront',
'aussi',
'aussi bien qu\'',
'aussi bien que',
'aussitôt',
'autant',
'autour',
'autour d\'',
'autour de',
'autour des',
'autour du',
'autre',
'autrefois',
'autres',
'autrui',
'aux',
'auxdites',
'auxdits',
'auxquelles',
'auxquels',
'avaient',
'avais',
'avait',
'avant',
'avant qu\'',
'avant que',
'avant-hier',
'avec',
'avez',
'aviez',
'avions',
'avoir',
'avons',
'ayant',
'ayez',
'ayons',
'bah',
'banco',
'beaucoup',
'ben',
'bien',
'bientôt',
'bis',
'bon',
'bé',
'c\'',
'c\'est-à-dire',
'c.-à-d.',
'cahin-caha',
'car',
'ce',
'ceci',
'cela',
'celle',
'celle-ci',
'celle-là',
'celles',
'celles-ci',
'celles-là',
'celui',
'celui-ci',
'celui-là',
'cent',
'cents',
'cependant',
'certain',
'certaine',
'certaines',
'certains',
'certes',
'ces',
'cet',
'cette',
'ceux',
'ceux-ci',
'ceux-là',
'cf.',
'cg',
'cgr',
'chacun',
'chacune',
'chaque',
'cher',
'chez',
'ci',
'ci-après',
'ci-dessous',
'ci-dessus',
'cinq',
'cinquante',
'cinquante et un',
'cinquante et une',
'cinquante-cinq',
'cinquante-deux',
'cinquante-et-un',
'cinquante-huit',
'cinquante-neuf',
'cinquante-quatre',
'cinquante-sept',
'cinquante-six',
'cinquante-trois',
'cl',
'cm',
'combien',
'comme',
'comment',
'contrario',
'contre',
'crescendo',
'céans',
'd\'',
'd\'abord',
'd\'accord',
'd\'affilée',
'd\'ailleurs',
'd\'après',
'd\'arrache-pied',
'd\'emblée',
'dans',
'davantage',
'de',
'de la part d\'',
'de la part de',
'de la part des',
'de la part du',
'de ladite',
'de laquelle',
'de même qu\'',
'de même que',
'de peur qu\'',
'de peur que',
'debout',
'dedans',
'dehors',
'delà',
'demain',
'depuis',
'derechef',
'derrière',
'des',
'desdites',
'desdits',
'desquelles',
'desquels',
'dessous',
'dessus',
'deux',
'devant',
'devers',
'dg',
'die',
'différentes',
'différents',
'dire',
'dis',
'disent',
'dit',
'dito',
'divers',
'diverses',
'dix',
'dix-huit',
'dix-neuf',
'dix-sept',
'dl',
'dm',
'donc',
'dont',
'dorénavant',
'douze',
'du',
'dudit',
'duquel',
'durant',
'dès',
'dès lors qu\'',
'dès lors que',
'dès qu\'',
'dès que',
'déjà',
'désormais',
'dû',
'eh',
'elle',
'elles',
'en',
'en cours d\'',
'en cours de',
'en deçà',
'en dépit d\'',
'en dépit de',
'en dépit des',
'en dépit du',
'en faveur d\'',
'en faveur de',
'en faveur des',
'en faveur du',
'en marge d\'',
'en marge de',
'en marge des',
'en marge du',
'en matière d\'',
'en matière de',
'en raison d\'',
'en raison de',
'en raison des',
'en raison du',
'en vertu d\'',
'en vertu de',
'en vertu du',
'en vue d\'',
'en vue de',
'en vue des',
'en vue du',
'en-dehors d\'',
'en-dehors de',
'en-dehors des',
'en-dehors du',
'encore',
'enfin',
'ensemble',
'ensuite',
'entre',
'entre-temps',
'envers',
'environ',
'es',
'est',
'et',
'et/ou',
'etc',
'eu',
'eu égard au',
'eu égard aux',
'eu égard à',
'eue',
'eues',
'euh',
'eurent',
'eus',
'eusse',
'eussent',
'eusses',
'eussiez',
'eussions',
'eut',
'eux',
'exprès',
'extenso',
'extremis',
'eûmes',
'eût',
'eûtes',
'facto',
'faire',
'fais',
'faisaient',
'faisais',
'faisait',
'faisons',
'fait',
'faites',
'fallait',
'faudrait',
'faut',
'fi',
'flac',
'fors',
'fort',
'forte',
'fortiori',
'frais',
'fur',
'furent',
'fus',
'fusse',
'fussent',
'fusses',
'fussiez',
'fussions',
'fut',
'fûmes',
'fût',
'fûtes',
'gr',
'grosso',
'grâce au',
'grâce aux',
'grâce à',
'guère',
'ha',
'han',
'haut',
'hein',
'hem',
'heu',
'hg',
'hier',
'hl',
'hm',
'holà',
'hop',
'hormis',
'hors',
'hui',
'huit',
'hum',
'hé',
'ibidem',
'ici',
'ici-bas',
'idem',
'il',
'illico',
'ils',
'ipso',
'item',
'j\'',
'jadis',
'jamais',
'je',
'jusqu\'',
'jusqu\'au',
'jusqu\'aux',
'jusqu\'à',
'jusque',
'juste',
'kg',
'km',
'l\'',
'l\'autre',
'l\'on',
'l\'un',
'l\'une',
'la',
'la leur',
'la mienne',
'la nôtre',
'la sienne',
'la tienne',
'la vôtre',
'laquelle',
'le',
'le leur',
'le mien',
'le nôtre',
'le sien',
'le tien',
'le vôtre',
'lequel',
'les',
'les autres',
'les leurs',
'les miennes',
'les miens',
'les nôtres',
'les siennes',
'les siens',
'les tiennes',
'les tiens',
'les vôtres',
'lesquelles',
'lesquels',
'leur',
'leurs',
'lez',
'loin',
'longtemps',
'lors',
'lors d\'',
'lors de',
'lors des',
'lors du',
'lors même qu\'',
'lors même que',
'lorsqu\'',
'lorsque',
'lui',
'là',
'là-bas',
'là-dedans',
'là-dehors',
'là-derrière',
'là-dessous',
'là-dessus',
'là-devant',
'là-haut',
'lès',
'm\'',
'ma',
'maint',
'mainte',
'maintenant',
'maintes',
'maints',
'mais',
'mal',
'malgré',
'me',
'mes',
'mg',
'mgr',
'mieux',
'mil',
'mille',
'milliards',
'millions',
'minima',
'ml',
'mm',
'modo',
'moi',
'moins',
'mon',
'moult',
'moyennant',
'mt',
'même',
'mêmes',
'n\'',
'naguère',
'ne',
'neuf',
'ni',
'non',
'nonante',
'nonobstant',
'nos',
'notre',
'nous',
'nul',
'nulle',
'néanmoins',
'octante',
'oh',
'on',
'ont',
'onze',
'or',
'ou',
'ouais',
'oui',
'outre',
'où',
'par',
'par rapport au',
'par rapport aux',
'par rapport à',
'par-ci',
'par-delà',
'par-derrière',
'par-dessous',
'par-dessus',
'par-devant',
'par-là',
'parbleu',
'parce',
'parce qu\'',
'parce que',
'parfois',
'parmi',
'partout',
'pas',
'pas grand-chose',
'passim',
'passé',
'pendant',
'personne',
'petto',
'peu',
'peut',
'peut-être',
'peuvent',
'peux',
'pis',
'plus',
'plus d\'un',
'plus d\'une',
'plusieurs',
'plutôt',
'point',
'posteriori',
'pour',
'pour qu\'',
'pour que',
'pourquoi',
'pourtant',
'pourvu qu\'',
'pourvu que',
'presqu\'',
'presque',
'primo',
'priori',
'prou',
'près',
'préalable',
'pu',
'puis',
'puisqu\'',
'puisque',
'qu\'',
'qua',
'quand',
'quant au',
'quant aux',
'quant à',
'quarante',
'quarante et un',
'quarante et une',
'quarante-cinq',
'quarante-deux',
'quarante-et-un',
'quarante-huit',
'quarante-neuf',
'quarante-quatre',
'quarante-sept',
'quarante-six',
'quarante-trois',
'quasi',
'quatorze',
'quatre',
'quatre-vingt',
'quatre-vingt-cinq',
'quatre-vingt-deux',
'quatre-vingt-dix',
'quatre-vingt-dix-huit',
'quatre-vingt-dix-neuf',
'quatre-vingt-dix-sept',
'quatre-vingt-douze',
'quatre-vingt-huit',
'quatre-vingt-neuf',
'quatre-vingt-onze',
'quatre-vingt-quatorze',
'quatre-vingt-quatre',
'quatre-vingt-quinze',
'quatre-vingt-seize',
'quatre-vingt-sept',
'quatre-vingt-six',
'quatre-vingt-treize',
'quatre-vingt-trois',
'quatre-vingt-un',
'quatre-vingt-une',
'quatre-vingts',
'que',
'quel',
'quelle',
'quelles',
'quelqu\'',
'quelqu\'un',
'quelqu\'une',
'quelque',
'quelque chose',
'quelquefois',
'quelques',
'quelques-unes',
'quelques-uns',
'quels',
'qui',
'quiconque',
'quinze',
'quoi',
'quoiqu\'',
'quoique',
'revoici',
'revoilà',
'rien',
's\'',
'sa',
'sans',
'sauf',
'se',
'secundo',
'seize',
'selon',
'sensu',
'sept',
'septante',
'sera',
'serai',
'seraient',
'serais',
'serait',
'seras',
'serez',
'seriez',
'serions',
'serons',
'seront',
'ses',
'si',
'sic',
'sine',
'sinon',
'situ',
'sitôt',
'six',
'soi',
'soient',
'sois',
'soit',
'soixante',
'soixante et onze',
'soixante et un',
'soixante-cinq',
'soixante-deux',
'soixante-dix',
'soixante-dix-huit',
'soixante-dix-neuf',
'soixante-dix-sept',
'soixante-douze',
'soixante-et-onze',
'soixante-et-un',
'soixante-et-une',
'soixante-huit',
'soixante-neuf',
'soixante-quatorze',
'soixante-quatre',
'soixante-quinze',
'soixante-seize',
'soixante-sept',
'soixante-six',
'soixante-treize',
'soixante-trois',
'sommes',
'son',
'sont',
'soudain',
'sous',
'souvent',
'soyez',
'soyons',
'stricto',
'suis',
'suite à',
'sur',
'sur-le-champ',
'surtout',
'sus',
't\'',
'ta',
'tacatac',
'tandis qu\'',
'tandis que',
'tant',
'tantôt',
'tard',
'te',
'tel',
'telle',
'telles',
'tels',
'ter',
'tes',
'toi',
'ton',
'toujours',
'tous',
'tout',
'toute',
'toutefois',
'toutes',
'treize',
'trente',
'trente et un',
'trente et une',
'trente-cinq',
'trente-deux',
'trente-et-un',
'trente-huit',
'trente-neuf',
'trente-quatre',
'trente-sept',
'trente-six',
'trente-trois',
'trois',
'trop',
'très',
'tu',
'tôt',
'un',
'une',
'unes',
'uns',
'va',
'vais',
'vas',
'vers',
'veut',
'veux',
'via',
'vice-versa',
'vingt',
'vingt et un',
'vingt et une',
'vingt-cinq',
'vingt-deux',
'vingt-huit',
'vingt-neuf',
'vingt-quatre',
'vingt-sept',
'vingt-six',
'vingt-trois',
'vis-à-vis',
'vite',
'vitro',
'vivo',
'voici',
'voilà',
'voire',
'volontiers',
'vos',
'votre',
'vous',
'y',
'zéro',
'à',
'à l\'encontre d\'',
'à l\'encontre de',
'à l\'encontre des',
'à l\'encontre du',
'à l\'instar d\'',
'à l\'instar de',
'à l\'instar des',
'à l\'instar du',
'à l\'insu d\'',
'à l\'insu de',
'à l\'insu des',
'à l\'insu du',
'à l\'issue d\'',
'à l\'issue de',
'à l\'issue des',
'à l\'issue du',
'à l\'occasion d\'',
'à l\'occasion de',
'à l\'occasion des',
'à l\'occasion du',
'à l\'égard d\'',
'à l\'égard de',
'à l\'égard des',
'à l\'égard du',
'à la suite d\'',
'à la suite de',
'à la suite des',
'à la suite du',
'à ladite',
'à laquelle',
'à même d\'',
'à même de',
'à partir d\'',
'à partir de',
'à partir des',
'à partir du',
'à travers',
'ç\'',
'ça',
'çà',
'ès',
'étaient',
'étais',
'était',
'étant',
'étiez',
'étions',
'été',
'êtes',
'être',
'ô',
);
?>