这个问题是关于我之前的问题口音不敏感搜索django sqlite
正如响应中提到的,没有直接的方法可以这样做。我已经想到了一个解决办法,但我不确定是不是一个好办法:
用例:假设数据库有一个表NewsArticles
,其中一列是ArticleText
。顾名思义,ArticleText
包含新闻文章的文本,其中包括几个带有重音字符的单词。假设在一篇主键为aid123
的文章的ArticleText
中有一个这样的词是Puerto Aisén
。现在,用户可以搜索Puerto Aisén
或Puerto Aisen
,并且应该能够获得具有PK aid123
的文章,并以粗体显示找到的重音单词(<b>Puerto Aisén</b>
)。
解决方案:我在表normalizedArticleText
中添加了一个列,并使其包含unicode.normalize
(重音删除)版本的文本。现在,每当出现搜索查询时,我首先使用s.decode('ascii')
确定查询是否包含重音字符,然后在相应的列中进行相应的搜索。
问题:我正在复制整个数据。此外,如果搜索查询是关键字的非重音版本,我就无法将重音关键字加粗。
有什么好的建议吗?我正在使用django与sqlite
尝试使用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.normalizehttps://docs.python.org/2/library/unicodedata.html unicodedata.normalize
祝你好运!