[英]Match string with normal characters with special characters in python
我正在嘗試找到一種使用python將用戶搜索查詢與搜索引擎中的數據庫記錄進行匹配的方法,但是當搜索查詢包含帶有重音符號的特殊字符(如元音)時,我遇到了麻煩。
例如:搜索查詢=“咖啡館”。 數據庫記錄=“咖啡廳”
我在查詢數據庫記錄時使用詞干。
哪一種匹配查詢的最直接方法是將包含特殊字符“café”的查詢與不包含特殊字符“ cafe”的字符串匹配,反之亦然?
UPDATE
我需要的所有信息已經被緩存,因此在數據庫中創建新列的方法並不那么吸引人。 我正在尋找一種基於python的解決方案。
實際上,很少有這樣做的方法。
我的猜測是,通過創建帶有巫婆字符的特殊地圖來為您完成此工作的最簡單,最簡單(但不是最好 )的方法可能會相互替換,而不是通過使用該地圖來創建查詢:
# -*- coding: utf-8 -*-
SPECIAL_CHARACTERS_MAP = {
'e': u'[eé]',
}
def get_query(string):
pattern_value = u''
for s in string:
pattern_value += s if s not in SPECIAL_CHARACTERS_MAP else SPECIAL_CHARACTERS_MAP[s]
query = u"SELECT * FROM table WHERE record LIKE '%{}%'".format(pattern_value)
return query
print get_query(u'ewqeé')
# SELECT * FROM table WHERE record LIKE '%[eé]wq[eé]é%'
# Code to query database ....
因此,您可以使用'a': 'u[aà]'
等更多情況擴展地圖。
另一種選擇是在數據庫中創建單獨的列,並使用與上面類似的數據結構(如SPECIAL_CHARACTERS_MAP
類似的數據結構來替換通常的特殊字符,以使您更容易地替換字符,但是在這種情況下,您必須執行相同的替換操作在將搜索字詞傳遞給LIKE
查詢之前。
SQL通配符使用完整信息來創建要與LIKE
運算符一起執行SELECT
查詢時要匹配的字符串。
我最終使用以下代碼解決了這個問題:
unicodedata.normalize('NFKD', "café").encode('ascii', 'ignore')
哪個回來了
cafe
此方法還可以校正以下字符:ü,ö,á,é,í,ó,ú,ü,ñ,ī
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.