我需要清除一个西班牙语的数据库,但要求是我必须保留重音符号。
例如,如果数据库包含“Administración”和“Administracion”,我必须将它们标识为等号,但保留一个带有重音标记的数据库。经过一些研究,每个解决方案,如将Unicode转换为ASCII或使用PyEnchant,保留没有重音标记的解决方案。
是否有任何库(对于Python 3.5)或确定正确的库并保留它?
答案 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,但应力不同:
tú
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']