www.mamboteam.com
aptitude : me and my debian - a work in progress  
Startsida arrow Forum
2008-09-05
 
 
Huvudmeny
Startsida
debian
bash
Forum
Användarmeny
tidigare material
nyheter
grafik
BadVista
BASH Forum
Välkommen, Gäst
Vänligen Logga in eller Registrera.
Glömt ditt lösenord?
Svensk soundex (1 läser)
Ned Svara på det här inlägget Favoriserade: 0
ÄMNE: Svensk soundex
#38
marwal (Användare)
Menig
Inlägg: 27
graphgraph
Användare Offline Klicka här för att se användarens profil
Svensk soundex 2007-09-07 21:36 Karma: 0  
Soundex är en algoritm för att hitta likaljudande ord (ofta personnamn i en databas). Genom att ha lagrat soundexvärdet av förnamn så kan man hitta Yeshica fast man söker på Jessica. Soundex' algoritm går ut på att spara inledningsbokstaven i ordet, plocka bort alla vokaler och sedan ersätta de resterande konsonanterna med siffror enligt en tariff.
Mer att läsa om soundex finns här.

Soundex är dålig på svenska, så här är mitt försök till en svensk soundex. Jag har frångått den ursprungliga algoritmen och sparar vokaler som grupperas som hårda eller mjuka samt 'A' som är ett specialfall. I övrigt har jag utgått från ljud och försökt hitta en bra balans.

Projektet är fortfarande i experimentstadiet men fungerar ganska tillfredsställande.
Code:

  #!/usr/bin/env python # _*_ coding: utf-8 _*_ # Svensk SOUNDEX för att hitta ex.vis efternamn som # låter lika men stavas olika # Version: 0.4 (2007-09-10: 17:00) import os,sys verbose # 1 = verbose ON, 2 = full verbose ON, 0 = verbose OFF vflag 0 if len(sys.argv) < 2:     print "Exempel: " sys.argv[0] + " 'ord1' 'ord2'"     sys.exit(0) pro dict( A=('AU','AO','AA','AE'), # A (hård vokal), behandlas separat E=('IJ','J','IO','OE','AE','AI','IE','YE','II','I','Y',u'ä',u'ö',u'é','EE'), # mjuka vokaler O=('IU','EU','OU','OO','U',u'å',u'ü'# hårda vokaler ) con dict( B=('DD','PP','FV','FF','F','W','V','D','P'), C=('X','CK','CH','Q','GG','Z','SS','SC','SSJ','SJ','TJ','S','K'), J=('LJ','GJ','DJ','NG','G'), M=('MM','MN','NN','N'), R=('RR','LL','L','TT','T'), ) for w in sys.argv[1:]:     w.upper().decode('utf-8')     if verbose: print ' (:H)'# verbose     w.replace('H','')     for z in (procon):     for a in z:         for b in z[a]:         if verbose and (w.find(b)) >= 0# verbose             print '(' ':' ')',             vflag 1         w w.replace(b,a)         if vflag and verbose == 2# verbose             print '=' ',',             vflag 0     print w



Test:
$ ./se-soundex.py vik wijk wiihk
BEC
BEC
BEC


Inlägg ändrat av marwal, den 2007-09-10 17:03
  Logga in för att svara.
Upp Svara på det här inlägget
Powered by FireBoard
 
Top! Top!