使用sqlite

时间:2015-07-10 02:44:19

标签: python django sqlite python-2.7

此问题与我之前的问题Accent insensitive search django sqlite

有关

如回应中所述,没有直接的方法可以这样做。我想出了一个解决方案,但我不确定它是否是一个好的解决方案:

用例:假设数据库有一个表NewsArticles,其中一列为ArticleText。顾名思义ArticleText包含新闻文章的文本,其中包括带有重音字符的几个单词。假设ArticleText中包含主键aid123的文章中出现的一个此类词是Puerto Aisén。现在,用户可以搜索Puerto AisénPuerto Aisen,并且应该能够使用粗体(aid123)找到带有PK <b>Puerto Aisén</b>的文章。

解决方案:我在表normalizedArticleText中再添加一列,并使其包含文本的unicode.normalize(已删除重音)版本。现在每当搜索查询到来时,我首先使用s.decode('ascii')确定查询是否包含重音字符,然后在相应列中进行相应搜索。

问题:我正在复制整个数据。此外,如果搜索查询是关键字的非重音版本,则无法加粗重音关键字。

有什么好的建议吗?我正在使用django和sqlite

1 个答案:

答案 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

祝你好运!