此问题与我之前的问题Accent insensitive search django sqlite
有关如回应中所述,没有直接的方法可以这样做。我想出了一个解决方案,但我不确定它是否是一个好的解决方案:
用例:假设数据库有一个表NewsArticles
,其中一列为ArticleText
。顾名思义ArticleText
包含新闻文章的文本,其中包括带有重音字符的几个单词。假设ArticleText
中包含主键aid123
的文章中出现的一个此类词是Puerto Aisén
。现在,用户可以搜索Puerto Aisén
或Puerto Aisen
,并且应该能够使用粗体(aid123
)找到带有PK <b>Puerto Aisén</b>
的文章。
解决方案:我在表normalizedArticleText
中再添加一列,并使其包含文本的unicode.normalize
(已删除重音)版本。现在每当搜索查询到来时,我首先使用s.decode('ascii')
确定查询是否包含重音字符,然后在相应列中进行相应搜索。
问题:我正在复制整个数据。此外,如果搜索查询是关键字的非重音版本,则无法加粗重音关键字。
有什么好的建议吗?我正在使用django和sqlite
答案 0 :(得分:0)
尝试使用unicodedata包。这是Python 3的一个例子:
import unicodedata
unicodedata.normalize('NFD', 'répertoire').encode('ascii', 'ignore')
或者,对于Python 2.7:
import unicodedata
unicodedata.normalize('NFD', u'répertoire').encode('ascii', 'ignore')
其中任何一个都会输出:
'repertoire'
只需用您的字符串替换répertoire
即可。 NFD
是规范化的form
。您可以在此处阅读有关不同形式的规范化的更多信息:
https://docs.python.org/3/library/unicodedata.html#unicodedata.normalize https://docs.python.org/2/library/unicodedata.html#unicodedata.normalize
祝你好运!