在做文章系统的时候,很多时候需要为这篇文章推荐最相近的文章。

解决思路是:给文章设定关键词然后模糊查询进行匹配。找到包含这个关键词的标题,然后给显示出来,作为最接近的文章。

但是有问题:这样的文章,排列顺序并不是我们想要的。

例如:两篇文章:第一篇:“用灵芝泡茶的功效”,第二篇:“泡茶的功效与作用”。我们发布一篇文章设定的关键词是:“茶”“功效”。

通过这样进行匹配,查询出来的结果是包含“茶”和“功效”的所有文章。

在显示上,第一篇排在第二篇的上面。

但是:很明显第二篇文章比第一篇的相似度更高。对“茶”和“功效”的相似度更高。

那么,如何做到最匹配的文章呢?

我想到一个简单的方法:计算关键词在标题上出现的位置的大小进行排序;

$words = "茶,功效";

$oTitle = "用灵芝泡茶的功效";

$oTitleTwo = "泡茶的功效与作用";

echo(strpos($oTitle,'茶'))."
";

echo(strpos($oTitle,'功效'))."
";

echo "


";

echo(strpos($oTitleTwo,'茶'))."
";

echo(strpos($oTitleTwo,'功效'))."
";

echo "


";

输出的结果:

12

18

3

9

然后计算结果:

第一篇:12+18 = 30,第二篇:3+9 = 12;

让后用这个从小到大排序;就完成了一个简单的相似度排序。

示例代码:

$words = "茶,功效";

$where['title'] = $this->createArr($words);

$keywordsList = $keywordsDB->where($where)->select();foreach($keywordsList as $k => $v){$keywordsList[$k]['poslike'] = $this->posLike($words,$v['title']);

};//array_multisort(array_column($keywordsList,'poslike'),SORT_DESC,$keywordsList);

array_multisort(array_column($keywordsList,'poslike'),SORT_ASC,$keywordsList);foreach($keywordsList as $v){echo "
".$v['poslike']."---".$v['id']."---".$v['title'];

};

获取相似度:

/** 计算出现的位置来判断相关性

* 计算出 $words依次在 $str出现的位置

* $words 关键词字符串 用 , 隔开

* $str 字符串*/

private function posLike($words,$str){$sum = 0;$wordsArr = explode(',',$words);foreach($wordsArr as $v){$sum += strpos($str,$v);

};return $sum;

}

生成查询数组:

/** 生成模糊查询的数组*/

private function createArr($words){$wordsArr = explode(',',$words);$whereArr = array();foreach($wordsArr as $k=>$v){$arr = array();if(!$v)unset($wordsArr[$k]);array_push($arr,'like');array_push($arr,'%'.$v.'%');array_push($whereArr,$arr);

}return $whereArr;

}//$where['title'] = array('like','%'.$words.'%');

// $where['title'] = array('like',array('%'.$words.'%','%'.$wordss.'%'));

// $where['title'] = array(array('like','%'.$words.'%'),array('like','%'.$wordss.'%'));

标题相似度算法_一个简单的计算文章相似度功能!相关推荐

  1. java 分布式任务_一个简单的基于 Redis 的分布式任务调度器 —— Java 语言实现...

    折腾了一周的 Java Quartz 集群任务调度,很遗憾没能搞定,网上的相关文章也少得可怜,在多节点(多进程)环境下 Quartz 似乎无法动态增减任务,恼火.无奈之下自己撸了一个简单的任务调度器, ...

  2. java计算课程学分绩点,一个简单的计算选修课程绩点的程序,欢迎大家指点下.

    一个简单的计算选修课程绩点的程序,欢迎大家指点下. package 选修课程; /** * * @author Administrator */ public class Student {    / ...

  3. 15拆分成3个不同的自然数_一个简单的算法 - 将一个正整数拆分成指定几个正整数的组合...

    假设我们这里有个正整数18,这里需要把18拆分成1 2 3 5 10的组合,那么输出的结果应该是: ==> 10+5+3 eg:->79 ----->7*10+5+3+1 大数优先 ...

  4. 波形包络提取与峰值提取_一个简单的波形包络提取算法

    与<一个简单的波形包络提取算法>相关的范文 2008年第03期,第41卷 通 信 技 术 Vol.41,No.03,2008 总第195期 Communications Technolog ...

  5. 标题相似度算法_智能客服问题相似度算法设计——第三届魔镜杯大赛第12名解决方案...

    目录: 一.比赛介绍 二.数据介绍 三.解决方案 (一)问题分析 (二)数据探索 (三)模型 (四)调参 (五)特征工程 (六)模型集成 (七)后处理 四.比赛总结 (一)比赛成绩 (二)代码分享 ( ...

  6. 标题相似度算法_相似度计算方法

    相似度就是比较两个事物的相似性.一般通过计算事物的特征之间的距离,如果距离小,那么相似度大:如果距离大,那么相似度小. 问题定义:有两个对象X,Y,都包含N维特征,X=(x1,x2,x3,...,xn ...

  7. 利用python爬取知乎评论_一个简单的python爬虫,爬取知乎

    一个简单的python爬虫,爬取知乎 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片 文字信息暂未收录,可自行实现,比图片更简单 具体代码里有详细注释,请自行阅读 项目源码: 1 # -*- c ...

  8. spring诸如方式_一个简单的步进器,具有诸如下一步,返回和结束之类的简单动作,可以执行简单的表格

    spring诸如方式 Vue步进器. (Stepper for Vue.) A simple stepper with simple actions such as next, back and fi ...

  9. diybox路由器设置教程_一个简单的无线路由器入门设置教程,非常实用

    原标题:一个简单的无线路由器入门设置教程,非常实用 分享给朋友们一个简单的无线路由器入门设置教程,教大家怎么使用无线路由器.如何设置使用,非常实用. 一.无线路由器基本使用方法 1.拿到手的无线路由器 ...

最新文章

  1. 暑期集训4:栈,树,优先队列 例 :  UVA - 514 ​​​​​​​​​​​​​​
  2. 人类大脑神经如何进化?寄生虫充当了隐形设计师
  3. 【第一季】CH07_FPGA_RunLED创建VIVADO工程实验
  4. Laravel 用户认证与登陆
  5. typescript 类型映射 (ReadOnly、Partial)
  6. 关于通信matlab 仿真,关于MATLAB在通信仿真系统中的运用
  7. mysql中怎么存住文件链接_数据库如何保存链接文件
  8. [转帖]VMware时间不准问题的解决方法
  9. WireShark下载:官网、源码
  10. java hashset retain_Java HashSet retainAll()用法及代码示例
  11. java求抽象类shape_java 抽象类 Shape
  12. Leo个人MSN简明使用手册
  13. 对接支付宝 生成付款码功能
  14. Java8 新特性并发篇(一) | 线程与执行器
  15. 2021年4月2日 星期五 农历二月 阴
  16. hdu 6078 Wavel Sequence
  17. 【Freeswitch从入门到精通】二、初识Freeswitch
  18. 【解决方案】Gitlab阿里企业邮箱配置
  19. C++类与对象之封装篇
  20. SAXReader解析器--xml字符串文件解析

热门文章

  1. C#--DataTable的各种操作
  2. 计数器(Verilog)
  3. MacOS深色模式下微信文章页面背景变为黑色问题的解决
  4. 本科毕业论文参考文献可以随便写吗?
  5. 系统开发视角下的诊断 ———— 动力系统(P)诊断故障6
  6. 1577 例题3 数字转换(LOJ10155) 约数计算 树上最长链(两次找最大深度)
  7. beyond compare下载安装及使用教程
  8. [CTSC2016]时空旅行 (线段树分治)
  9. 项目经理考PMP,薪资会提高吗?
  10. Python数据分析案例-利用多元线性回归与随机森林回归算法预测笔记本新品价格