首页 > 解决方案 > 使用 Python 在数据库中保存带有西班牙口音的记录

问题描述

我需要清除西班牙语的数据库,但要求是我必须保留重音标记。

例如,如果数据库包含“Administración”和“Administracion”,我必须将它们标识为相等,但保留带有重音符号的那个。经过一些研究,每一种解决方案,比如将 Unicode 转换为 ASCII 或使用 PyEnchant,都会保留一个没有重音标记的解决方案。

是否有任何库(对于 Python 3.5)或方法来确定正确的库并保留它?

标签: pythonpython-3.xspell-checkingdiacritics

解决方案


注意事项

根据数据库的内容,这很可能是一项不平凡的任务,因为尽管可能存在拼写错误:

  • *administracion administración

西班牙语中也有许多词对,它们只是口音不同,但都是有效词:

  • ejército ejercito ejercitó|tu

如果你只考虑名词,这个数字会减少很多,主要是不同重音的外来词:

  • beisbol béisbol

和一些母语的多种拼写

  • período periodo|reúma reuma

询问

如果您不太可能遇到这种情况,您可以使用如下方式的 sql 查询:

SELECT a.word AS "Good word", b.word AS "Bad word"
FROM   spanish_db AS a
JOIN   spanish_db AS b

--Spanish words have at most one accent so can safely nest REPLACE
ON     REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(a.word, "á", "a"), 
                                                       "é", "e"), 
                                                       "í", "i"), 
                                                       "ó", "o"), 
                                                       "u", "u") = b.word

--So as not to match identical words
AND    a.word != b.word

这将返回所有出现重音和非重音形式的单词对。您可以根据需要调整它以编辑/删除/清理条目。


例子

Good word       Bad word
"acedía"        "acedia"
"aeróbic"       "aerobic"
"aeróstato"     "aerostato"
"afrodisíaco"   "afrodisiaco"
"alcalá"        "alcala"
"alvéolo"       "alveolo"
"alérgeno"      "alergeno"
"amoníaco"      "amoniaco"
"anémona"       "anemona"
"arcén"         "arcen"

推荐阅读