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