2005年05月30日

关于 小叮咚中文分词  .net版本发布的变化

    现在几乎每天都有朋友给我写信,要求交流小叮咚中文分词的实现。我现在实现的有java和C#两个版本。同样的算法逻辑,用
java 和 C#写两边可不是有趣的事情 。于是自然而然想起了
关于lucene发展和多语言实现的方向 
中采用的方法,于是决定以后主要更新java版本的中文分词算法,而.net版本的中文分词则在java class基础上转化过来。

    很早的时候我的一篇blog介绍过:基于.NET的Java虚拟机IKVM介绍
。于是今天就尝试了一把,整个过程还算顺利。下面是我的转换过程:

   

    X:\ikvmbin-0.14.0.1\ikvm\bin>ikvmc -target:library

X:\XXXX\chinese_sentence_splitter.jar


    Note: output file is "chinese_sentence_splitter.dll"

    Note: automatically adding reference to "e:\programming\java&.net\ikvmbin-0.14.0.1\ikvm\bin\ikvm.gnu.classpath.dll"

    通过上面的命令可以把 java jar 文件转换成  同名的 .net dll。

    在java中测试的结果如下:

   

    但在.net中测试的结果却不正确:

   

 

    这很显然是IKVM.NET在转换过程中出现了问题。

    由于第一次使用IKVM.NET,因此这个问题还需要在以后有时间解决一下。也希望有相关经验的朋友多多指导.


    相关连接:

            多么乐

            小叮咚中文分词

2005年05月28日
小叮咚机器人,决策树,IAsk , 猜猜20问 (http://y.20q.net/anon)

小叮咚机器人,决策树,IAsk , 猜猜20问 (http://y.20q.net/anon

    早上我的一个朋友高诉我,说小叮咚机器人还是那么笨,不好玩。这是我才意识到小叮咚机器人有大概半年没有更新过了,不过小叮咚一直活着:-),我希望他能快快长大。

    大概在去年,网络上流行起了聊天机器人,做的好的有 小I
,小强等几种机器人,也包括QQ提供的机器人,但是他们的定位并不在于“聊天”,而是个人信息工具。比如查询电话号码所属区域,ip地址,邮编,天气情况
等个人服务。很显然由于用户和后台的沟通方式的单一(只能通过聊天的方式),所以这种服务的优势并不明显。这也就是我当时做小叮咚机器人的时候有了要把机器人做成一个类似专家系统的想法。

    把小叮咚机器人做成专家系统很困难。

    对小叮咚机器人来说,中文分词,对自动归类,在加上一个推理机,似乎就可以让小叮咚机器人的IQ提升一个档次了。需要的技术如下:

 

    首先:要让小叮咚机器人理解用户输入的对话;

    其次:要对对话进行归类,然后基于自己的知识库进行推理,进而做出反应。



    这也就是我开始研究中文分词的一个初衷。中文分词是很多中文计算机自动处理的基础,比如:搜索引擎,自动摘要,等。最近很多网友给我写信询问相关的问题,感觉到这部分真的是一个热点了。

    中文分词之后,要做的就是归类。这部分新浪的IASK是个典型的应用,我觉得这个实现并不困难;

   

    最近看到 猜猜20问 ,这个我认为就是一个决策树学习的很好的应用,或许我现在应该考虑也想实现一个类似的应用,为小叮咚机器人的IQ全面提升做准备。

    那就从构建决策树开始吧。

    相关联接:   

            多么乐

            中文分词

            新浪IASK

            猜猜20问

 

     

小叮咚机器人,决策树,IAsk , 猜猜20问 (http://y.20q.net/anon

    早上我的一个朋友高诉我,说小叮咚机器人还是那么笨,不好玩。这是我才意识到小叮咚机器人有大概半年没有更新过了,不过小叮咚一直活着:-),我希望他能快快长大。

    大概在去年,网络上流行起了聊天机器人,做的好的有 小I ,小强等几种机器人,也包括QQ提供的机器人,但是他们的定位并不在于“聊天”,而是个人信息工具。比如查询电话号码所属区域,ip地址,邮编,天气情况等个人服务。很显然由于用户和后台的沟通方式的单一(只能通过聊天的方式),所以这种服务的优势并不明显。这也就是我当时做小叮咚机器人的时候有了要把机器人做成一个类似专家系统的想法。

    把小叮咚机器人做成专家系统很困难。

   
对小叮咚机器人来说,中文分词,对自动归类,在加上一个推理机,似乎就可以让小叮咚机器人的IQ提升一个档次了。需要的技术如下:

 

    首先:要让小叮咚机器人理解用户输入的对话;

    其次:要对对话进行归类,然后基于自己的知识库进行推理,进而做出反应。


   
这也就是我开始研究中文分词的一个初衷。中文分词是很多中文计算机自动处理的基础,比如:搜索引擎,自动摘要,等。最近很多网友给我写信询问相关的问题,感觉到这部分真的是一个热点了。

    中文分词之后,要做的就是归类。这部分新浪的IASK是个典型的应用,我觉得这个实现并不困难;

   

    最近看到 猜猜20问
,这个我认为就是一个决策树学习的很好的应用,或许我现在应该考虑也想实现一个类似的应用,为小叮咚机器人的IQ全面提升做准备。

    那就从构建决策树开始吧。

    相关联接:   

           
多么乐

           
中文分词

           
新浪IASK

           
猜猜20问

 

     

2005年05月27日

中文分词和二元分词综合对比

 

           
    为了测试中文分词和二元分词的差异,现将初步的测试数据做了对比。关于二元分词可以参考车东先生的相关文章。
   

采用中文分词每1M产生1.55M的索引文件,膨胀率1.55;每1M用时大约10秒;采用二元分词每1M产生2.21M的索引文件,膨胀率2.21;每1M用时大约7秒;

从搜索结果来看,两者可以大致相同数量的搜索结果(显示结果根据相关度排列顺序不同)。    

对文本进行中文分词的目的是要提高文档检索的相关性,由于相关性的算法(如下图)涉及到很多因素,所以对二元切分和中文分词切分显示结果到底谁更相关(人理解的意义相关?),还无法得出结论。

相关度算法:

score(q,d) =

Σ

tf(t in d) * idf(t) * getBoost(t.field in d) * lengthNorm(t.field in d)

 * coord(q,d) * queryNorm(q)

t in q

 

 

       但有一点可以肯定,采用中文分词多花的解析中文时间可以带来丰厚的回报:索引文件和Term数量的大大减少。

可参考本文最后表格的图片对比。图中的数据是出现频率第100120Term情况,二元分词产生了大量的没有意义的Term

 

 

 

数据源大小(M

索引大小

膨胀率

Term个数

每兆Term个数

所用时间(秒)

/M

中文

14.20

22.50

1.584

76473.00

5385.42

105

7.394

二元

14.20

31.50

2.218

384488.00

27076.62

87

6.126

中文

4.73

7.54

1.594

84895.00

17948.20

50

10.570

二元

4.73

11.00

2.325

238064.00

50330.66

35

7.399

 

 

 

中文分词

二元分词

索引源大小

14.2M

14.2M

索引源内容

论坛某天全部发言

论坛某天全部发言

建立索引用时

105

87

索引文件大小

22.5M

31.5M

生成的Term

76473

384488   5.02倍)

文档数

6802

6802

搜索:XX

236 (搜索结果(条))

235(搜索结果(条))

XX

361

361

XX

769

768

XX

50

50

XX

41

41

XX

3

3

XX

0

0

最常出现的词:

Rank = 查询Text出现的次数

 

 

 

                                              作者:lhelper  我要去桂林

 

小叮咚 中文分词 发布 java 版本 , c# 版本 , c++ 版本

    最近关于中文分词的处理逐渐多了起来,我以前的文章也零星的介绍过许多这方面的技术。总有一些朋友来信索要中文分词的代码,而且要不同版本的,鉴于这个情况,我把我对分词的理解,按照java,C#语言各自实现了一份。C++的版本,还是用中科院的ICTCLAS
毕竟这个分词程序是很多分词的鼻祖。

    大家可以到:小叮咚中文分词主页查看详情。

   
程序还有很多不完善的地方,功能列表和开发文档现在都不完整,希望有这方面爱好的朋友一起参与进来,完善,提高。

    也欢迎大家来信讨论:  xiaodingdong@gmail.com

     田春峰

     相关联接:

                小叮咚分词主页

                计算所汉语词法分析系统ICTCLAS 字典格式解析

                 一种面向搜索引擎的中文切分词方法

                 公开小叮咚分词源代码

2005年05月19日

微软发布了一个用C#写的操作系统 叫: singularity


http://research.microsoft.com/os/singularity/

他的最大的特点是:  dependable

Singularity is a research project focused on the construction of
dependable systems through innovation in the areas of systems,
languages, and tools.


什么样的操作系统是:dependable的呢?

他不会崩溃,不会造成用户数据丢失,不会向病毒屈服!

没有病毒!这是个很大的 dependable!

A system can be called dependable if it obeys a specification of its behavior. Of special interest are things that a system should not do: crash, hang, corrupt data, succumb to viruses, etc.
A dependable system should be well-behaved and not act in a manner
unwanted or unanticipated by its designers, developers, administrators,
or users. As a step towards this end, the Singularity OS is designed to
facilitate the automatic checking of partial specifications of the
system’s behavior.


多么乐


2005年05月15日

google排名影响因素大全(beta1)

       最近在做多么乐索引量统计的时候感觉到google索引情况的一些变化,于是根据相关文章整理了影响google排名的多个因素。我们可以看到影响排名的因素越来越多,当网站设计者了解这些因素后,保守估计3-5年,SEO这个行业预计将会消失!   
       影响排名的因素如下:


域名因素:

    1、域名注册时间的长短,老域名的权重比新域名的高;

    2、监视域名过期的变化;

    3、监视域名服务器和whois数据的物理位置;

    4、监视域名服务器和whois数据的其他相关数据:注册人,关键字,非关键字域;

    5、监视被外部链接和用户(手工?)收集的域名和网址的信息;

    6、网站至少需要一个文档;

    7、监视域名关键字权重的变化的数据;

    8、当一个域名涉及的“主题”改变后,如果和改变前的“主题”不匹配,那么现存的链接权重会下降;


       

 

文档和页面信息:



    1、 web页面文档的更新频率,文档数量等的改变都将被记录;

    2、一片旧文档中被新出现的文档链接次数将被记录;

    3、给web文档增加一个不活跃指数(就是缺少改变的频率);

    4、文档内容的改变和文档中的相关链接的改变将会被记录:

    5、指向低PR的链接或者会员网站的相互链接将降低该文档的质量;

    6、不要在短时间内改变大部分文档的主题内容;

链接因素:

    1、网页链接的文字和发现该链接的信息(简称:网页链接及其发现信息)将会被记录;

    2、随着时间的推移用发现该链接的信息监视链接出现或消失的变化;

    3、监视网页链接和其发现信息的增长比率;

    4、在给定时间内监视链接和链接的描述文字,比如:链接:多么乐
链接是:http://www.domolo.com 链接描述:多么乐 。

    5、根据链接所在页面的权威性或者和可靠性来标示该链接是临时的还是长期的。

    6、链接在不同独立文档中的增长比率将会被记录;

    7、在页面文档中出现的新链接或者消失的链接将会被记录;

    8、一个新链接的出现频率将会被记录;

    9、用链接信息来发现文档是将要消失还是会长期保留的趋势;

    10、具有长时间生命力的链接比重比临时性链接的权重高;

    11、在旧文档中的链接比重比新链接中的权重小(boost性质的);

    12、新出现的网站预期不会出现大量链接,否则可能视为spam;

    13、网页链接的特性应该是保持稳定并慢慢减速;

    14、如果一个链接数量突然增高,可能会视为span;

    15、如果一个网页的内容长久没有更新,但是有新的链接指向他,那么然为这个文档是新的;


    16、如果一个网页的内容长久没有更新,没有新的链接出现,并且内部链接数量在减少,那么将会降低外部链接的权重;

    17、如果有一个或者多个权威网页指向一个链接,那么认为这个链接是有价值的,这个链接的突发访问增高是认为可以被接受的;

    18、指向一个链接的链接描述应该是多种多样的;

    19、各种各样的链接描述的增长比率因该是相对固定的;

搜索结果因素:

    1、评价一个网页PR值的信息及其改变将会被监视;

  

用户数据因素:

    1、网页的流量信息会被监视(可能会通过toolbar,历史搜索记录等方式);

    2、用户的收藏,浏览信息可能会被记录(可能会通过toolbar,历史搜索记录等方式);

   

其他因素:

    1、如果一片文档的PR值经常改变,那么会降低该文档的权重;

    2、文档中的关键字频率的改变应该和其域名PR的权重相符;

    3、如果文档中的关键字信息相关性不高那么其相关域名也会被认为相关性不高。
    相关链接:
       多么乐

       Google patent

    作者:田春峰

   

apache mod_rewrite 模块使用的几个例子

   
当我们在网上冲浪的时候,指引我们前进的路标就是URL。对网站开发者来讲一个合理设计的URL对用户、合作网站的友情连接,链接地址引用以及搜索引擎的抓取都非常重要。大家知道URL一般有2种类型:1、静态URL 
2、动态URL
。静态URL的设计取决于网站目录的设计,可以说是和URL对应的文件是影射关系,因此静态URL的设计比较简单。但现在动态URL占到了全部URL的90%以上(参见微软研究院的搜索报告),动态URL的参数少则2三个,多则10几个,这样非常不利于网站用户的“阅读”。如何把复杂难记动态URL整理成易于用户和搜索引擎的显示方式就显得非常重要了。

    本文介绍 apache mod_rewrite 实现 url rewrite 的几种方式:

    假设:有如下需要 url rewrite的 url:   

http://www.domolo.com/tianchunfeng
http://blog.csdn.net/accesine960
http://360.yahoo.com/tcf960

http://www.donews.net/accesine

你想把上面这些页面通过一个统一的的方式来访问:

比如是:

http://www.domolo.com/tianchunfeng  
——> 
http://www.domolo.com/tianchunfeng

http://blog.csdn.net/accesine960    
——> 
http://www.domolo.com/accesine960

http://360.yahoo.com/tcf960         
——> 
http://www.domolo.com/tcf960

http://www.donews.net/accesine      

——> 

http://www.domolo.com/accesine

那么可以用如下方式实现:

1、建立一个 影射文件:domolo.map 并把它放在:/APACHE_HOME/apache/conf目录下:

    tianchunfeng 

http://www.domolo.com/tianchunfeng

    accesine960 

http://www.domolo.com/accesine960

    tcf960 

http://www.domolo.com/tcf960

    accesine 
http://www.domolo.com/accesine

2、RewriteMap fishmap txt:/APACHE_HOME/apache/conf/domolo.map

3、RewriteEngine On

RewriteRule ^/myhomepage/(.*) ${domolo:$1} [R]

 

这样当用户访问: http://domolo/myhomepage/tianchunfeng, 的时候实际转向到

http://www.domolo.com/tianchunfeng

这个规则挺方便的吧。

在我们访问Web页面的时候偶尔会碰到404错误,就是页面无法访问,这个也可以通过 url Rewrite来实现:

RewriteRule ^/myhomepage/(.*) ${domolo:$1|http://www.domolo.com/} [R] 
上面的例子是1对1的影射url rewrite,更复杂的可以用以下的方式来实现,比如:
#!/usr/bin/perl
$| = 1; # Turn off buffering
while (<STDIN>) {
s/-/_/g; # Replace - with _ globally
print $_;
}
上面的例子是把url中所有的符号“-”换成:“_”

我们把上面的perl保存成:dash3score.pl ,并做如下配置:
RewriteMap dash2score prg:/APACHE_HOME/conf/dash2score.pl
RewriteEngine On
RewriteRule (.*-.*) ${dash2score:$1} [PT]
一个更复杂的例子是把影射关系存储在数据库中,不妨看看下面的例子(配置省略):
    #!/usr/bin/perl
use DBI;
$|=1;
my $dbh = DBI->connect('DBI:mysql:wordpress:dbserver', 'username', 'password');
my $sth = $dbh->prepare("SELECT ID FROM wp_posts WHERE post_name = ?");
my $ID;

# Rewrite permalink style links to article IDs
while (my $post_name = <STDIN>) {
chomp $post_name;
$sth->execute($post_name);
$sth->bind_columns(\$ID);
$sth->fetch;

print "/domolo/index.php?p=$ID\n";
}
相关链接:
多么乐
ApacheCookbook
田春峰
20050515