我有一个数据库,里面有很多名字,比如:
John Smith
Scott J. Holmes
Dr. Kaplan
Ray's Dog
Levi's
Adrian O'Brien
Perry Sean Smyre
Carie Burchfield-Thompson
Björn Árnason
有些带重音的外文名称需要转换为带非重音字符的字符串。
我想将全名(去掉“'”、“-”等字符后)转换为用户登录名,如:
john.smith
scott.j.holmes
dr.kaplan
rays.dog
levis
adrian.obrien
perry.sean.smyre
carie.burchfieldthompson
bjorn.arnason
到目前为止我有:
Fullname.strip() # get rid of leading/trailing white space
Fullname.lower() # make everything lower case
... # after bad chars converted/removed
Fullname.replace(' ', '.') # replace spaces with periods
看看这个链接[修订]
这是页面上的代码
如果您不怕安装第三方模块,那么请查看python port of the Perl module ^{} (它也是on pypi)。
该模块只使用查找表对字符进行音译。我浏览了一下代码,它看起来很简单。所以我想它几乎可以在任何操作系统和任何Python版本(crossingfingers)上运行。与应用程序捆绑在一起也很容易。
使用此模块,您不必手动创建查找表(=减少了查找表不完整的风险)。
与unicode规范化技术相比,此模块的优势在于:unicode规范化不会替换所有字符。一个很好的例子是像“æ”这样的字符。Unicode标准化将其视为“字母,小写”(Ll)。这意味着使用
normalize
方法既不会给您一个替换字符,也不会给您一个有用的提示。不幸的是,这个字符不能用ASCII表示。所以你会犯错误的。上面提到的module在这方面做得更好。这实际上会将“æ”替换为“ae”。这确实有用而且有意义。
我所看到的最令人印象深刻的事情是它走得更远。它甚至可以正确地替换日语假名字符大部分。例如,它将“は”替换为“ha”。威奇非常好。
虽然它不是傻瓜证明,因为当前版本用“ti”代替“chi”。所以你必须小心处理那些更具异国情调的角色。模块的使用很简单:
注意,我和这个模块没有直接关系。碰巧我发现它很有用。
编辑:我提交的修补程序修复了有关日语假名的错误。我只修好了我能马上找到的那个。我可能错过了一些。
以下函数是通用函数:
显然,您应该知道字符串的编码。
相关问题 更多 >
编程相关推荐