繁体   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