Friday, September 10, 2010
 

加入盛大在线

17号加入了盛大在线SDO,盛大在线SDO的同事都很nice,工作passion真的是没的说.

一直觉得3年的创业生涯可以让自己自信,

今天发现真的是很多东西需要学习的,

准备在这里扎根了,祝自己好运吧.

me

 

操作系统及平台的那点事

在微博上面,写了第一条,话越来越多,干脆贴过来 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中文分词,纯PHP版实现

排头兵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;
}
 

communication is very important

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.

communication

 

Levenshtein distance相似度算法

Levenshtein distance最先是由俄国科学家Vladimir Levenshtein在1965年发明,用他的名字命名。
主要用途:

Spell checking(拼写检查)
Speech recognition(语句识别)
DNA analysis(DNA分析)
Plagiarism detection(抄袭检测)
Spam email (垃圾邮件检测)
Duplicate content (重复内容)

计划用php写一个内容相似度引擎,这篇博客是其核心思想之一,主要这个DPS需要掌握,当然php有一个相似度函数similar_text可以参考,我为了体现算法思路,就用php实现了.

随便提一下,内容相似度引擎的思路:

内容DNA识别技术思路

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);
 
 
About This Website

Lamp development & SEO & Plan of Website & Project Managment

Learn more »
Follow Us (SNS)
Help & Support

more about Bruce.xu»

Get in touch

QQ: +252339382
Email: shjuto @ gmail.com

Online contact form »