PHP中TF-IDF与余弦相似性计算文章相似性
PHP计算相似度示例代码如下:
代码如下 | 复制代码 |
<?php |
例子出来了,估计大家还不知道算法,下面整理两篇文章供各位参考。
有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到?
让我们从一个实例开始讲起。假定现在有一篇长文《中国的蜜蜂养殖》,我们准备用计算机提取它的关键词。
TF-IDF算法的优点是简单快速,结果比较符合实际情况。缺点是,单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。(一种解决方法是,对全文的第一段和每一段的第一句话,给予较大的权重。)
为了简单起见,我们先从句子着手。
代码如下 | 复制代码 |
句子A:我喜欢看电视,不喜欢看电影。
句子B:我不喜欢看电视,也不喜欢看电影。
|
基本思路是:如果这两句话的用词越相似,它们的内容就应该越相似。因此,可以从词频入手,计算它们的相似程度。
第一步,分词。
代码如下 | 复制代码 |
句子A:我/喜欢/看/电视,不/喜欢/看/电影。
句子B:我/不/喜欢/看/电视,也/不/喜欢/看/电影。
|
代码如下 | 复制代码 |
我,喜欢,看,电视,电影,不,也。
|
代码如下 | 复制代码 |
句子A:我 1,喜欢 2,看 2,电视 1,电影 1,不 1,也 0。
句子B:我 1,喜欢 2,看 2,电视 1,电影 1,不 2,也 1。
|
代码如下 | 复制代码 |
句子A:[1, 2, 2, 1, 1, 1, 0]
句子B:[1, 2, 2, 1, 1, 2, 1]
|
代码如下 | 复制代码 |
(1)使用TF-IDF算法,找出两篇文章的关键词;
(2)每篇文章各取出若干个关键词(比如20个),合并成一个集合,计算每篇文章对于这个集合中的词的词频(为了避免文章长度的差异,可以使用相对词频);
(3)生成两篇文章各自的词频向量;
(4)计算两个向量的余弦相似度,值越大就表示越相似。
|
php模拟登陆的实现方法,这里分别列举两种方法实现模拟登陆人人网。具体实例代码如下:
1)使用snoopy模拟登陆
代码如下 | 复制代码 |
<?php |
(2)使用curl模拟登陆
代码如下 | 复制代码 |
<?php $ch=curl_init(); |
PHP这门程序设计语言简单得令人发指,那是因为PHP的作者们太神通。今天我来谈谈所有的phper都熟悉的session(会话)。
需要说明的是:
4./session/indexFile和/session/indexRedis模板中两个ajax请求,/session/setUserFile和/session/setUserRedis立即执行,/session/setLoginFile和/session/setLoginRedis延迟300ms,是为了模拟同一个用户,同时在两个页面(请求)修改会话数据
执行结果表象:
第一次访问:
第二次访问:
请求:/session/indexredis
第一次访问:
第二次访问:
手册中有这样的描述:
void session_write_close ( void )
Session data is usually stored after your script terminated without the need to call session_write_close(), but as session data is locked to prevent concurrent writes only one script may operate on a session at any time. When using framesets together with sessions you will experience the frames loading one by one due to this locking. You can reduce the time needed to load all the frames by ending the session as soon as all changes to session variables are done.
也就是说session是有锁的,为防止并发的写会话数据。php自带的的文件保存会话数据是加了一个互斥锁(session_start()的时候),从而解释了上面呈现的两个请求响应时间相同。但是以redis保存会话数据时,第二个ajax虽然没有阻塞,但是会话数据并没有写入到redis,那我们追溯一下源码就有答案了。
代码如下 | 复制代码 |
<?php final class SessionController extends YafController_Abstract { public function setUserFileAction() { session_start(); $_SESSION['user_name'] = 'xudianyang'; $_SESSION['user_id'] = '123'; sleep(3); echo json_encode($_SESSION); return false; } public function setLoginFileAction() { session_start(); $_SESSION['last_time'] = time(); echo json_encode($_SESSION); return false; } public function indexFileAction() { // Auto Rend View } public function getSessionFileAction() { session_start(); var_dump($_SESSION); return false; } public function setUserRedisAction() { $session = CoreFactory::session(); $session->set('user_name', 'xudianyang'); $session->set('user_id', '123'); sleep(3); echo json_encode($_SESSION); return false; } public function setLoginRedisAction() { $session = CoreFactory::session(); $session->set('last_time', time()); echo json_encode($_SESSION); return false; } public function indexRedisAction() { // Auto Rend View } public function getSessionRedisAction() { $session = CoreFactory::session(); var_dump($_SESSION); return false; } } indexfile.phtml
<!DOCTYPE html> <html> <head> <title>测试session并发锁问题</title> <meta charset="utf-8"> <script type="text/javascript" src="/assets/js/jquery-1.10.2.min.js"></script> <script type="text/javascript"> $.ajax({ url: "/session/setUserFile", type: "get", dataType: "json", success: function(response){ console.info(response.last_time); } }); setTimeout(function(){ $.ajax({ url: "/session/setLoginFile", type: "get", dataType: "json", success: function(response){ console.info(response.last_time); } }); }, 300); </script> </head> <body> 同时发起2两个ajax请求 </body> </html> indexredis.phtml
<!DOCTYPE html> <html> <head> <title>测试session并发锁问题</title> <meta charset="utf-8"> <script type="text/javascript" src="/assets/js/jquery-1.10.2.min.js"></script> <script type="text/javascript"> $.ajax({ url: "/session/setUserRedis", type: "get", dataType: "json", success: function(response){ console.info(response.last_time); } }); setTimeout(function(){ $.ajax({ url: "/session/setLoginRedis", type: "get", dataType: "json", success: function(response){ console.info(response.last_time); } }); }, 300); </script> </head> <body> 同时发起2两个ajax请求 </body> </html> |
PHP的curl能够实现许多非常强大的http操作,不过curl原生的写法有些蛋疼,于是自己封装了一个类。
本段代码部分代码来源网络,我自己添加了注释和一些小修改,目前实现的功能有:
构造post参数
读取/写入/读写cookie
伪造来源IP
设置代理
代码会不定时更新。
代码如下 | 复制代码 |
<?php
publicfunction__construct($url='',$forgeIP=false){ $this->ch=curl_init($url); publicfunctionclose(){ publicfunction__destruct(){ /** /** /** /** /** /** /** /** /** /** } |
友情提示:关于这人php curl类其实就是把函数功能整理在一起了,然后写成一个class没有其它什么技巧了。
本文章为各位简单介绍阿里云OSS 通过表单直接上传文件 Post Policy例子,这个例子非常的简单只需要简单的像php一样就可以了,具体如下。代码如下 | 复制代码 |
<?php $access_id = 'ACCESS_ID'; $access_key = 'OSS_ACCESS_KEY'; $url='http://ioutsider.oss-cn-shenzhen.aliyuncs.com';//更改成你自己的地址 $policy = '{"expiration": "2120-01-01T12:00:00.000Z","conditions":[{"bucket": "ioutsider" },["content-length-range", 0, 104857600]]}'; $policy = base64_encode($policy); $signature = base64_encode(hash_hmac('sha1', $policy, $access_key, true));//生成认证签名 ?> <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div>文件上传</div> <form action="<?php echo $url;?>" method="post" enctype="multipart/form-data"> <label for="file">选择文件:</label> <input type="hidden" name="OSSAccessKeyId" id="OSSAccessKeyId" value="<?php echo $access_id; ?>" /> <input type="hidden" name="policy" id="policy" value='<?php echo $policy; ?>' /> <input type="hidden" name="signature" id="signature" value="<?php echo $signature; ?>" /> <input type="hidden" name="key" id="key" value="${filename}" /> <input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="确定" /> </form> </body> </html> |
相关文章
- 这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
- PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
- 今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
- index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04- 这篇文章主要为大家详细介绍了JS实现购物车中商品总价的计算 ,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-07
- 这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
- 这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
- 这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31- 这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
- 今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
- 这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
- 这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
- 经常看到有人踩在了PHP路径的坑上面了,感觉有必要来说说PHP中相对路径的一些坑,以及PHP中绝对路径的使用,下面一起来看看。 ...2016-08-24
- 这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
- 这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
- 这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
- 这篇文章主要介绍了jQuery+PHP+MySQL实现无限级联效果的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-02-21
- 这篇文章主要介绍了C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法,涉及C#针对坐标的数学运算相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25