标题相似度算法_一个简单的计算文章相似度功能!
在做文章系统的时候,很多时候需要为这篇文章推荐最相近的文章。
解决思路是:给文章设定关键词然后模糊查询进行匹配。找到包含这个关键词的标题,然后给显示出来,作为最接近的文章。
但是有问题:这样的文章,排列顺序并不是我们想要的。
例如:两篇文章:第一篇:“用灵芝泡茶的功效”,第二篇:“泡茶的功效与作用”。我们发布一篇文章设定的关键词是:“茶”“功效”。
通过这样进行匹配,查询出来的结果是包含“茶”和“功效”的所有文章。
在显示上,第一篇排在第二篇的上面。
但是:很明显第二篇文章比第一篇的相似度更高。对“茶”和“功效”的相似度更高。
那么,如何做到最匹配的文章呢?
我想到一个简单的方法:计算关键词在标题上出现的位置的大小进行排序;
$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.'%'));
标题相似度算法_一个简单的计算文章相似度功能!相关推荐
- java 分布式任务_一个简单的基于 Redis 的分布式任务调度器 —— Java 语言实现...
折腾了一周的 Java Quartz 集群任务调度,很遗憾没能搞定,网上的相关文章也少得可怜,在多节点(多进程)环境下 Quartz 似乎无法动态增减任务,恼火.无奈之下自己撸了一个简单的任务调度器, ...
- java计算课程学分绩点,一个简单的计算选修课程绩点的程序,欢迎大家指点下.
一个简单的计算选修课程绩点的程序,欢迎大家指点下. package 选修课程; /** * * @author Administrator */ public class Student { / ...
- 15拆分成3个不同的自然数_一个简单的算法 - 将一个正整数拆分成指定几个正整数的组合...
假设我们这里有个正整数18,这里需要把18拆分成1 2 3 5 10的组合,那么输出的结果应该是: ==> 10+5+3 eg:->79 ----->7*10+5+3+1 大数优先 ...
- 波形包络提取与峰值提取_一个简单的波形包络提取算法
与<一个简单的波形包络提取算法>相关的范文 2008年第03期,第41卷 通 信 技 术 Vol.41,No.03,2008 总第195期 Communications Technolog ...
- 标题相似度算法_智能客服问题相似度算法设计——第三届魔镜杯大赛第12名解决方案...
目录: 一.比赛介绍 二.数据介绍 三.解决方案 (一)问题分析 (二)数据探索 (三)模型 (四)调参 (五)特征工程 (六)模型集成 (七)后处理 四.比赛总结 (一)比赛成绩 (二)代码分享 ( ...
- 标题相似度算法_相似度计算方法
相似度就是比较两个事物的相似性.一般通过计算事物的特征之间的距离,如果距离小,那么相似度大:如果距离大,那么相似度小. 问题定义:有两个对象X,Y,都包含N维特征,X=(x1,x2,x3,...,xn ...
- 利用python爬取知乎评论_一个简单的python爬虫,爬取知乎
一个简单的python爬虫,爬取知乎 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片 文字信息暂未收录,可自行实现,比图片更简单 具体代码里有详细注释,请自行阅读 项目源码: 1 # -*- c ...
- spring诸如方式_一个简单的步进器,具有诸如下一步,返回和结束之类的简单动作,可以执行简单的表格
spring诸如方式 Vue步进器. (Stepper for Vue.) A simple stepper with simple actions such as next, back and fi ...
- diybox路由器设置教程_一个简单的无线路由器入门设置教程,非常实用
原标题:一个简单的无线路由器入门设置教程,非常实用 分享给朋友们一个简单的无线路由器入门设置教程,教大家怎么使用无线路由器.如何设置使用,非常实用. 一.无线路由器基本使用方法 1.拿到手的无线路由器 ...
最新文章
- 暑期集训4:栈,树,优先队列 例 : UVA - 514 ​​​​​​​​​​​​​​
- 人类大脑神经如何进化?寄生虫充当了隐形设计师
- 【第一季】CH07_FPGA_RunLED创建VIVADO工程实验
- Laravel 用户认证与登陆
- typescript 类型映射 (ReadOnly、Partial)
- 关于通信matlab 仿真,关于MATLAB在通信仿真系统中的运用
- mysql中怎么存住文件链接_数据库如何保存链接文件
- [转帖]VMware时间不准问题的解决方法
- WireShark下载:官网、源码
- java hashset retain_Java HashSet retainAll()用法及代码示例
- java求抽象类shape_java 抽象类 Shape
- Leo个人MSN简明使用手册
- 对接支付宝 生成付款码功能
- Java8 新特性并发篇(一) | 线程与执行器
- 2021年4月2日 星期五 农历二月 阴
- hdu 6078 Wavel Sequence
- 【Freeswitch从入门到精通】二、初识Freeswitch
- 【解决方案】Gitlab阿里企业邮箱配置
- C++类与对象之封装篇
- SAXReader解析器--xml字符串文件解析
热门文章
- C#--DataTable的各种操作
- 计数器(Verilog)
- MacOS深色模式下微信文章页面背景变为黑色问题的解决
- 本科毕业论文参考文献可以随便写吗?
- 系统开发视角下的诊断 ———— 动力系统(P)诊断故障6
- 1577 例题3 数字转换(LOJ10155) 约数计算 树上最长链(两次找最大深度)
- beyond compare下载安装及使用教程
- [CTSC2016]时空旅行 (线段树分治)
- 项目经理考PMP,薪资会提高吗?
- Python数据分析案例-利用多元线性回归与随机森林回归算法预测笔记本新品价格