自训练模型实现简单的智能检索

知识
python基础、django基础

设计思路:
用户进行搜索时,记录搜索内容,当用户再次访问页面时,调用接口,请求服务器的模型进行关键词提取,将使用频率最高的几个关键词返回给用户。

参数:
Content:用户平常搜索的内容合集
Num:返回关键词数量

模型:
tf_idf_2.model 使用tf-idf算法,模型关键词训练量近千万。
模型下载地址:链接:https://pan.baidu.com/s/16iXtxrgpiTj8AveNHpgShQ 提取码:r5ck)

python包:
sklearn
jieba
numpy

后端:

views.py

class TFIDFView(View):

    def get(self,request):

        try:
            #展示关键词的数量
            num = int(self.request.GET.get('Num',constants.SHOW_KEYWORDS_NUM))
            content = self.request.GET.get('Content')
        except Exception as e:
            logger.error(e)
            return JsonResponse(data={
                    "code": "1",
                    "message": "参数错误"
                })

        try:
            #关键词提取
            result = NaturalLanguage.keyWords(content,num)
        except Exception as e:
            logger.error(e)
            return JsonResponse(data={
                "code": "1",
                "message": "未知错误"
            })

        return JsonResponse(data={
                "code": "0",
                "message": "OK",
                "result":result,
            })

NaturalLanguage.py

import joblib
import jieba
import numpy as np
import time

#加载模型
TF_IDF = joblib.load('/xxx/tf_idf_2.model')
#获取所有关键词
feature_names = TF_IDF.get_feature_names()

def keyWords(content,SHOW_KEYWORDS_NUM):
    start = time.time()

    try:
        #分词
        text = ' '.join(jieba.cut(content))
        #获取关键词集合
        keyword = TF_IDF.transform([text])

        result = []

        #转为数组
        keyword_toarray = keyword.toarray()

        #获取准确率最高的3项
        sort_list = np.sort(keyword_toarray)[0][-SHOW_KEYWORDS_NUM:]

        for each in sort_list:
            #获取对应下标
            index = np.argwhere(keyword_toarray == each)[0][1]
            # print(index)

            #获取准确率和关键词
            score = keyword_toarray[0][index]
            if score <= 0:
                continue
            word = feature_names[index]

            print(score,word)
            result.insert(0,{
                "Score":score,
                "Word":word,
            })

        return result

    except Exception as e:
        print(e)
        return None

    finally:
        print('time:{}'.format(time.time() - start))

if __name__ == '__main__':
    keywords = keyWords('python,人工智能,python,人工智能,python,java,php',3)
    print(keywords)

注意:
模型加载需要放置函数外,作为全局加载,以免每次请求都加载模型,导致请求极其缓慢。

效果:
postman测试
在这里插入图片描述
网站效果
在这里插入图片描述
推荐:
个人网站:www.tomyres.com(比赛需要,只好推广一下)

猜你喜欢

转载自blog.csdn.net/qq_35526165/article/details/106245271
今日推荐