[英]Is there a soundex function for python?
是否有用於 python 的 soundex 函數,如果沒有,您將如何制作 soundex 代碼?
Soundex
Code Letters
1 B, F, P, V
2 C, G, J, K, Q, S, X, Z
3 D, T
4 L
5 M, N
6 R
SKIP A, E, H, I, O, U, W, Y, H, W, and Y
例如:
傑克遜 = J250
華盛頓 = W252
克萊門特 = C455
Ashcraft = A261
吳 = W000
是的,您可以使用Fuzzy ,它是一個實現一些語音算法的 Python 庫。
sudo pip install fuzzy
>>> import fuzzy
>>> soundex = fuzzy.Soundex(4)
>>> soundex("Jackson")
'J250'
>>> soundex("Washington")
'W252'
>>> soundex("Clement")
'C453'
>>> soundex("Ashcraft")
'A261'
>>> soundex("Wu")
'W000'
你可以用海蜇
sudo pip install jellyfish
print "Soundex\t\t=", jellyfish.soundex("Ala ma kaca")
>Soundex = A452
#...
>Metaphone = AL M KK
>NYSIIS = AL
>Match rating codex = ALMKC
直接使用下面的soundex()
函數,無需安裝任何包!
摘自Jellyfish > _jellyfish.py包的片段
例子
print(soundex('kent')) # K530
print(soundex('Paul')) # P400
print(soundex('amnesty')) # A523
代碼
import unicodedata
def soundex(s):
if not s:
return ""
s = unicodedata.normalize("NFKD", s)
s = s.upper()
replacements = (
("BFPV", "1"),
("CGJKQSXZ", "2"),
("DT", "3"),
("L", "4"),
("MN", "5"),
("R", "6"),
)
result = [s[0]]
count = 1
# find would-be replacment for first character
for lset, sub in replacements:
if s[0] in lset:
last = sub
break
else:
last = None
for letter in s[1:]:
for lset, sub in replacements:
if letter in lset:
if sub != last:
result.append(sub)
count += 1
last = sub
break
else:
if letter != "H" and letter != "W":
# leave last alone if middle letter is H or W
last = None
if count == 4:
break
result += "0" * (4 - count)
return "".join(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.