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