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

知识
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(比赛需要,只好推广一下)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值