vlambda博客
学习文章列表

class blog9 Django实现中文分词

Django实现中文分词搜索

1安装库pip install jieba

2post应用包下创建tokenizer.py文件

3将下面固定工具包函数粘贴到tokenizer.py

#coding=utf-8
#中文分词解释器
import jieba
from whoosh.analysis import Tokenizer, Token
class ChineseTokenizer(Tokenizer):
def __call__(self, value, positions=False, chars=False,
keeporiginal=False, removestops=True,
start_pos=0, start_char=0, mode='', **kwargs):

t = Token(positions, chars, removestops=removestops, mode=mode,
**kwargs)
seglist = jieba.cut(value, cut_all=False) # (精确模式)使用结巴分词库进行分词
# seglist = jieba.cut_for_search(value) #(搜索引擎模式) 使用结巴分词库进行分词
for w in seglist:
print(w)
t.original = t.text = w
t.boost = 1.0
if positions:
t.pos = start_pos + value.find(w)
if chars:
t.startchar = start_char + value.find(w)
t.endchar = start_char + value.find(w) + len(w)
yield t # 通过生成器返回每个分词的结果token
def ChineseAnalyzer():
return ChineseTokenizer()


4在项目目录中D:\PycharmProjects\tianjinwuliu\venv\Lib\site-packages\haystack\backends拷贝文件whoosh_backend.py至应用post目录下并改名为whoosh_cn_backend.py

5编写post应用包下面的whoosh_cn_backend.py文件中把搜索模式改为我们自定义的名称

方法:ctrl+f搜索'bild_schema',找到def build_schema(self, fields): 方法里面的最后一天else语句修改分析器默认值analyzer=StemmingAnalyzer为我们工具包中定义的值analyzer=ChineseAnalyzer()

5setting中默认使用的引擎改为我们自定义的这个引擎

HAYSTACK_CONNECTIONS = {    'default':{        #'ENGINE':'haystack.backends.whoosh_backend.WhooshEngine',        'ENGINE':'post.whoosh_cn_backend.WhooshEngine',        'PATH':os.path.join(BASE_DIR,'whoosh_index'),    },}

6打开终端重新生成索引文件

python manage.py rebuild_index