在微博上面,写了第一条,话越来越多,干脆贴过来 follow@ http://t.qq.com/paitoubing
有人一直意淫windows会不会没落,我的理解是,windows作为PC来讲,有太多人不希望他没落,基于windows的那些软件使得windows不太能没落,微软为什么坚持做自己的语言,其实是为了增加移植的难度,保护自己的壁垒,iphone和android之争也不过如此
iphone 从头至尾都是封闭的,Object-c;Android一个后起之秀要和大哥抢天下,选择了java作为app开发语言,j2me一直是N多手机游戏的开发首选,这样构造一个基于java的平台环境,当然会有很多拥护者,利用开源技术及优秀的设计,Android增长拭目以待
或许基于flash这个玩物,Adobe可以在任何一个平台游刃有余,可惜iphone这个变态就是不让flash有机会搞自己的平台,android当然会支持flash了,天下大乱才有机会嘛
盛大推出电子书bambook是必然的,盛大希望构造自己的app store,不仅仅是为了那些文字,还有SDO的游戏平台,未来终端设备重点是设备上的software,自己推出bambook就不用担心iphone这样的封闭变态,及推出自己的平台app store
bambook不知道主打的电子书还是app store,电子书真没有什么可做的,当作一个终端设备,完美的结合盛大游戏与盛大音乐、盛大视频可能会很有意思.
排头兵PHP中文分词类,主要作用是分析语料库,找出核心主题词,是网页相似度引擎的子模块
相比成熟的分词类库,如Lucene,中科院之流 没有任何优势,本类库是实验性项目,效率及算法[trie]并无特殊
暂时支持utf8编码
线上测试版即将出来 http://www.paitoubing.cn/pdb/paiswc.php
ps:我的博客托管服务器,暂时不能访问外网,没法安装apc扩展……..
先贴上切词函数,目前只能识别数据字典的词条分词,其他方面的可以扩展.
Trie数据字典保存在apc共享缓存中,根据词条首字母$key 序列化$value 了trie子树,序列化的效率真他妈低,影响了整体分词的效率
$result =''; function pai_scw($text="") { global $result; $textlen = mb_strlen($text); $trienode = false; $find = array(); $wordrootposition = 0;//词根位置 $prenode = false; $word = ''; for ($i = 0; $i < $textlen;$i++) { $character = mb_substr($text,$i,1); $success = false; if(empty($word)) { $trienode = unserialize(apc_fetch($character,$success)); //unserialize 效率低 //当$character 没有一个可以匹配的字符时,直接跳过,不做倒退匹配 if(!$success) { continue; $result = $result.$character; } } //匹配词首 if($success) { $word = $word .$character; continue; } if(isset($trienode['c'][$character])) { $word = $word .$character; // echo "isset".$word."\n"; $trienode = $trienode['c'][$character]; if($prenode == 0) { $wordrootposition = $i; } $prenode = true; if($trienode['w']) { $find[] = array('position'=>$wordrootposition,'word' =>$word); $result = $result."-".$word."-"; } } else { /*@example 词条:北京奥委会 *@example 判断分词:北京 奥运 *@example 应该回溯到位置 奥的位置 */ $i = $i - mb_strlen($word); $prenode = false; $word = ''; //添加分词结果 $result = $result.$character; } } return $find; }
In more than 4 years of working with people in web development,website plan,search engine marketing and php training, I have come in contact with many individuals who have gave me a wealth of advice,
And I haved found communication is so important that I began to change my role as communicator,Not noly as technical staff.
Levenshtein distance最先是由俄国科学家Vladimir Levenshtein在1965年发明,用他的名字命名。
主要用途:
Spell checking(拼写检查)
Speech recognition(语句识别)
DNA analysis(DNA分析)
Plagiarism detection(抄袭检测)
Spam email (垃圾邮件检测)
Duplicate content (重复内容)
计划用php写一个内容相似度引擎,这篇博客是其核心思想之一,主要这个DPS需要掌握,当然php有一个相似度函数similar_text可以参考,我为了体现算法思路,就用php实现了.
随便提一下,内容相似度引擎的思路:
1、对一篇文章进行分词,根据分词的结果排序,得出初级DNA
内容相似度引擎不只是简单的通过算法来判断内容是否相似,分词的目的是为了体现 语义,任何一篇文章都会有主题语句,可以通过算法大概的分析一篇文章的关键词出来,然后按照既定的规律进行排序,结合第2,3点可以判断一篇文章是否抄袭
2、对一篇文章进行整句切分, 算出句子的DNA,
在符合第1点的同时,如果一篇文章语句很多类似,那么也是可以判定一本文章是否有抄袭的嫌疑,当然,某些人会去改一些词,使得机器不好判断,结合第3点可以在一定程度防止通过篡改某些词来蒙混过关
3、对一篇文章进行分词,统计每个词的数量,并根据分词结果排序,获得高级DNA
对第3点的分词结果做一个简单描述
比如一篇文章介绍 中国人民解放军的,假如,中国这个词出现了67词,人民出现了12词,解放军出现了10词,后面陆续。。。。。。。。
根据 汉字首字符 chr,获得ascii编码,进行一个常规数组排序,比如从大到小。。。。。。。。。可以获得一个词的有序列表,记住包括出现次数。
截取有序列表的80%词汇量,次数*词/总数=80%,如果另外一篇文章符合前面2点,也符合第3点,那么这篇文章可以判断是篡改抄袭的.
思路就这些,准备明后天写写代码,计划用PHP来实现,C语言不是很熟悉,为了体现思路,效率估计不会很高。
Levenshtein distance or 相似度 or 最短距离 算法 代码
< ?php @author shjuto@gmail.com @blog http://www.paitoubing.cn @date 2010-------2012 地球 class similarity { function ld($str1,$str2) { $str1len = strlen($str1); $str2len = strlen($str2); if($str1len == 0) { return $str2len; } if($str2len == 0) { return $str1len; } $distance = array(); for($i = 0; $i <= $str1len;$i++) { $distance[$i][0] = $i; } for($j = 0; $j <= $str2len;$j++) { $distance[0][$j] = $j; } for($i = 1; $i <= $str1len;$i++) { $char1 = $str1[$i-1]; for($j = 1;$j <= $str2len;$j++) { $char2 = $str2[$j-1]; if($char1 == $char2) { $temp = 0; } else { $temp = 1; } $distance[$i][$j] = min($distance[$i-1][$j]+1,$distance[$i][$j-1]+1,$distance[$i-1][$j-1]+$temp); } } //print_r($distance); // 可以注释掉,下面table的内容,为了测试思路,直观显示数组内容,添加上去的 echo '<table border=1>'; foreach ($distance as $key=>$value) { echo '<tr>'; foreach ($value as $h) { echo '<td>'.$h.'</td>'; } echo '</tr>'; } echo ''; return $distance[$str1len][$str2len]; } function sim($str1,$str2) { $ld = $this->ld($str1,$str2); return 1 - ($ld / max(strlen($str1),strlen($str2))); } } $similarity = new similarity(); $str1 = 'kitten'; $str2 = 'sitting'; print_r($similarity->ld($str1,$str2)); echo $similarity->sim($str1,$str2);