【网站技术解析⑧】-- 检索系统实现(一)

本文介绍了如何使用Python数据分析库Pandas实现Django网站的检索系统,特别是针对单个词的检索逻辑。通过Pandas的read_sql方法读取数据库数据,然后利用str.contains方法检查name字段是否包含检索词。示例中,检索词'python'成功匹配到相应数据。文章还提及了随机抽样数据以增加用户体验,并为后续的短语检索处理做了铺垫。
摘要由CSDN通过智能技术生成

估计很多人会好奇下方这个检索系统怎么实现的,这里要说下,Django的orm跟数据库交互是挺方便的,增删改查,功能非常全面,如果你对orm精通,检索系统完全可以通过orm的语法来实现,不过我对Django的orm语法不是特别了解,工作也不是做web的,检索系统的实现利用的是python数据分析库Pandas的一些数据查询与处理方法

640?wx_fmt=jpeg

对于网站的检索,我这里主要处理了两种逻辑:

1、单个词:比如python

2、多个词>=2(短语):比如python学习、python学习视频


今天先讲第一种单个词的处理方法,由浅入深,方法其实都很简单,大部分核心处理逻辑其实也就是python中的某个方法就能完成,比如检索:python


1、对于读取数据,我这里用的Pandas的read_sql方法来读取数据库数据,返回的train_data是pandas的dataframe行列数据结构,在数据库中,我数据是按照name url两个字段进行保存的,检索单个词,我就是找出name字段中包含"python"的数据进行返回即可

def get_train_data():
  host_ip = "********"
  host_port = 3306
  db_instance = "********"
  table_name = "link"
  user = "********"
  pawd = "********"
  charset = "utf8"
  mysql_conn = connect(host=host_ip, user=user, password=pawd, db=db_instance, port=int(host_port), charset=charset)
  sql = 'SELECT * FROM ' + table_name
  # print(sql)
  train_data = pd.read_sql(sql, con=mysql_conn)
  return train_data


2、下方是检索的代码,因为是单个词的检索,比如"python",所以下方逻辑会走else逻辑,if len(all_true_index_list)>2逻辑不会执行

msg : 获取前端传过来的字符串“python”,做了简单的处理,转化成小写,去除收尾空格换行符,字符串中间的空格也去掉

df:get_train_data()上面获取的数据库中的数据,包含name和url两列

seed : 随机选取比例

df:df.sample是随机选取样本,frac=seed选取的比例,比如100个样本,如果seed是0.25,则最后随机选取的样本就是25个,这样做主要是为了造成一种假象,感觉数据经常变有很多很多2_02.png

cut_list:结巴分成后的list,“python”分词后是["python"],"python视频"分词后是["python","视频"],用于后面的检索


def get_filter_data(request):
   msg = request.POST.get("msg_input").lower().strip().replace(" ", "")
   df = get_train_data()
   seed = random.random()
   df = df.sample(frac=seed).reset_index(drop=True)
   # 增加结巴分词
   cut_list = list(jieba.cut(msg))
   all_true_index_list = []
   for word in cut_list:
      each_true_index_list = get_true_index(df, word)
      all_true_index_list.append(each_true_index_list)
   print("所有列表[[],[],[]]", all_true_index_list)

   if
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值