/weak_and

使用修改过的Weak And算法来匹配合适的店铺与品牌

Primary LanguagePython

#Weak And 算法学习与移植

现在需要给app构建一个新的功能,让用户能够根据想要的产品去搜索品牌和店铺。考虑到算法的实现难易度,打算使用weak and算法来实现特征匹配。

read_goods_features.py

  1. 从本地文件中读取json保存的商品特征,以及其所属的品牌与店铺(不一定存在)。以及对于的店铺,品牌id。
  2. 建立一个字典,key是特征,也就是weak_and算法中的term,value是对应的店铺,品牌id,在读取时添加进该对于term,此时未按大小排序
  3. 建立一个字典,key是品牌,店铺id,value是一个字典,里面记录每个term出现的次数。在读取文件时同时统计,用这个作为店铺中term的tf值,所有总的term出现次数作为文本长度
  4. 对2过程建立的字典进行排序,得到term 的倒排索引,然后以此字典作为词库,计算term的idf,同时计算每个term对应的Did对应的wt以及统计UB。
  5. 将得到的倒排索引,idf字典,wt字典,以及UB字典,合并他们的value,保存成列表,并保存为json,存入redis库,以term作为索引

weak_and.py

  1. class TermData:目的是构建weak and算法类与redis库的中介

    1. 建立与redis的链接
    2. 输入要查询的term_query之后,索引redis,并返回只有这几个term构成的倒排索引,idf,wt,以及UB字典
  2. weak and算法类:

    1. 用TermData类以及查询的种类初始化,品牌和店铺属于不同总类,现在只有两个种类。
    2. 输入插叙的query_term后返回查询到的店铺或者品牌id
    3. 修改了fullEvaluation方式,原来论文中使用的相加,在这里使用的相乘。原因是在这里查询的是店铺或者品牌,如果目标没有该特性就不应该出现,同时也能避免某个特性计算出的值特别大,掩盖了其他特性,导致搜索结果有偏的问题。