簡體   English   中英

在python中用正常字符與特殊字符匹配字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM