使用Python在Database中保存带有西班牙语重音的记录

时间:2018-05-30 14:56:06

标签: python python-3.x spell-checking diacritics

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

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

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

2 个答案:

答案 0 :(得分:2)

注意事项

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

  • * { AssetFileDescriptor afd = null; try { AssetManager manager = context.getAssets(); afd = manager.openNonAssetFd(fileName); return new long[] { afd.getParcelFileDescriptor().detachFd(), afd.getStartOffset(), afd.getLength() }; } catch (IOException e) { if (!e.getMessage().equals("") && !e.getMessage().equals(fileName)) { Log.e(LOGTAG, "Error while loading asset " + fileName + ": " + e); } return new long[] {-1, -1, -1}; } administracion

西班牙语中也有许多成对的单词,只是在重音上有所不同,但它们都是有效的单词:

  • administración ejército ejercito | ejercitó tu

如果您只考虑名词,那么这个数字会减少很多,大部分降为foreign loanwords,但应力不同:

  • beisbol

和一些本地单词multiple spellings

  • béisbol período | periodo reúma

查询

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

reuma

这将返回所有带有重音和不重音形式的单词对。您可以根据需要对其进行修改,以编辑/删除/清除条目。


示例

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

答案 1 :(得分:0)

您如何看待根据字典的ascii对索引中的数据库查询建立索引?假设只有一种形式的ascii密钥:

def ascii_word(word):
   accents=(("á","a"), ("é","e"), ("í","i"), ("ó","o"), ("ú","u"), ("ü","u"), ("ñ","n"))
   for acc in accents: word=word.replace(acc[0],acc[1])
   return word

query_result = ["Administración", "Administracion", "si", "sí", "hola"]
filtered_dict={}

for s in query_result:
   ascii=ascii_word(s)
   if ascii in filtered_dict.keys(): 
      if s!=ascii: filtered_dict[ascii] = s
  else:
      filtered_dict[ascii] = s

  result=list(filtered_dict.values())
  print(result)

这将打印到['Administración', 'sí', 'hola']