gpt4 book ai didi

python - 可以使用这个 soundex 编码的一些帮助

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:53 25 4
gpt4 key购买 nike

美国人口普查局使用一种称为“soundex”的特殊编码来查找有关个人的信息。 soundex 是一种基于姓氏发音而不是拼写方式的姓氏(姓氏)编码。发音相同但拼写不同的姓氏,如 SMITH 和 SMYTH,具有相同的代码并一起归档。开发了 soundex 编码系统,以便您可以找到一个姓氏,即使它可能以各种拼写形式记录。

在本实验中,您将设计、编码和记录一个程序,该程序在输入姓氏时生成 soundex 代码。系统将提示用户输入姓氏,程序应输出相应的代码。

基本 Soundex 编码规则

姓氏的每个 soundex 编码都由一个字母和三个数字组成。使用的字母始终是姓氏的第一个字母。根据下面显示的 soundex 指南,这些数字被分配给姓氏的其余字母。如有必要,在末尾添加零以始终生成四字符代码。忽略其他字母。

Soundex 编码指南

Soundex 为各种辅音分配了一个编号。发音相似的辅音分配相同的编号:

数字辅音

1 B, F, P, V2 C、G、J、K、Q、S、X、Z3D、T4 公升5男,男6R

Soundex 忽略字母 A、E、I、O、U、H、W 和 Y。

有 3 个额外的 Soundex 编码规则被遵循。一个好的程序设计会将这些分别实现为一个或多个单独的功能。

规则 1. 带双字母的名字

如果姓有任何双字母,则应将其视为一个字母。例如:

  • Gutierrez 的编码为 G362(G,T 为 3,第一个 R 为 6,第二个 R 被忽略,Z 为 2)。

规则 2. 具有相同 Soundex 代码编号的并排字母的名称

如果姓氏在 soundex 编码指南中具有相同编号的不同字母并排排列,则应将它们视为一个字母。示例:

  • Pfister 编码为 P236(P、F 被忽略,因为它被认为与 P 相同,S 为 2,T 为 3,R 为 6)。

  • Jackson 编码为 J250(J,C 为 2,K 忽略与 C 相同,S 忽略与 C 相同,N 为 5,添加 0)。

规则 3. 辅音分隔符

3.a.如果元音 (A、E、I、O、U) 分隔两个具有相同发音代码的辅音,则对元音右侧的辅音进行编码。示例:

  • Tymczak 编码为 T-522(T,M 为 5,C 为 2,Z 被忽略(参见上面的“并排”规则),K 为 2)。由于元音“A”将 Z 和 K 分开,因此对 K 进行了编码。

3.b.如果“H”或“W”分隔两个具有相同发音代码的辅音,则右侧的辅音不被编码。示例:

*Ashcraft 编码为 A261(A,2 代表 S,C 被忽略,因为与 S 相同,中间有 H,6 代表 R,1 代表 F)。它没有编码为 A226。

到目前为止,这是我的代码:

surname = raw_input("Please enter surname:")
outstring = ""

outstring = outstring + surname[0]
for i in range (1, len(surname)):
nextletter = surname[i]
if nextletter in ['B','F','P','V']:
outstring = outstring + '1'

elif nextletter in ['C','G','J','K','Q','S','X','Z']:
outstring = outstring + '2'

elif nextletter in ['D','T']:
outstring = outstring + '3'

elif nextletter in ['L']:
outstring = outstring + '4'

elif nextletter in ['M','N']:
outstring = outstring + '5'

elif nextletter in ['R']:
outstring = outstring + '6'

print outstring

代码足以满足要求,我只是不确定如何编写这三个规则。那就是我需要帮助的地方。因此,我们将不胜感激。

最佳答案

这里有一些关于一般 Python 内容的小提示。

0) 您可以使用 for 循环遍历任何序列,字符串算作一个序列。所以你可以这样写:

for nextletter in surname[1:]:
# do stuff

这比计算索引和索引姓氏更容易编写和理解。

1) 您可以使用+= 运算符附加字符串。而不是

x = x + 'a'

你可以写

x += 'a'

至于对您的具体问题的帮助,您需要跟踪上一封信。如果您的作业有一条规则说“连续的两个‘z’字符应编码为 99”,您可以添加如下代码:

def rule_two_z(prevletter, curletter):
if prevletter.lower() == 'z' and curletter.lower() == 'z':
return 99
else:
return -1


prevletter = surname[0]
for curletter in surname[1:]:
code = rule_two_z(prevletter, curletter)
if code < 0:
# do something else here
outstring += str(code)
prevletter = curletter

嗯,您编写的代码是返回字符串整数,例如 '3',而我编写的代码是返回一个实际的整数,然后调用 str()在将它添加到字符串之前。无论哪种方式都可能没问题。

祝你好运!

关于python - 可以使用这个 soundex 编码的一些帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1562438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com