2007-03-31

信息过滤 和 时间检测

最近主要的工作是信息过滤和新闻的时间检测。

新闻的时间检测比较容易,主要是考虑的情况要全面,别的就没有什么了。

信息过滤还是比较复杂。首先要过滤掉色情的词。然后对于政治的东西,需要检测出文章的感情色彩,是对当前政府持否定态度的还是肯定的。最后还要对那种纯粹骂人的文章过滤掉。过滤的目的一方面是符合法律的要求,另一方面是大家的时间都宝贵,没空听你胡说八道。

2007-03-26

WWW 2007 论文

Track: Browsers and User Interfaces

Track: Data Mining

Track: E* Applications

Track: Industrial Practice & Experience

Track: Performance and Scalability

Track: Pervasive Web and Mobility

Track: Search

Track: Security, Privacy, Reliability and Ethics

Track: Semantic Web

Track: Technology for Developing Regions

Track: Web Engineering

Track: Web Services

Track: XML and Web Data

2007-03-20

FreeType + CImg 汉字渲染引擎

在一幅图像上显示一个汉字,看似很简单,其实如果不用所谓的WinAPI,还不是很简单。
首先我们需要处理字库文件,FreeType是一个开源的字库软件,可以读取Microsoft的TrueType矢量字库。如果要处理汉字,一般使用Unicode编码。

有了字库处理包,我们还需要一个强大的图像开发库。OpenCV是一个不错的选择,但是这个库从安装到使用都不是很方便。为此我选用了CImg的库,这个库如此简单,以至于它只有一个头文件。其他什么都没有。而且CImg是完全基于C++的,使用了template技术。而且它支持几乎所有的文件格式,这是很多做图像的人所希望的。

下面这个字使用上面的两个库画出来的:

2007-03-19

汉字编码 C++

我用C++基于STL写了一个汉字编码的处理库。
可以实现 编码转换,自动编码检测。
重载了wstring的函数,使用很方便。

需要的可以和我联系:xlvector@gmail.com

目前只支持UTF-8和GBK编码。

UTF-8编码

UTF-8编码和Unicode编码其实没有区别,只是为了方便机器识别和移植,换了一种表现方式。也就是说Unicode和GBK之间的转换不需要用转换表,而是写一个程序就行了。

关于UTF-8和Unicode的介绍,可以看这儿

关于如何由Unicode编码为UTF-8的方法网上很多,下面转载一个:

UTF-8 有一下特性:

  • UCS 字符 U+0000 到 U+007F (ASCII) 被编码为字节 0x00 到 0x7F (ASCII 兼容). 这意味着只包含 7 位 ASCII 字符的文件在 ASCII 和 UTF-8 两种编码方式下是一样的.
  • 所有 >U+007F 的 UCS 字符被编码为一个多个字节的串, 每个字节都有标记位集. 因此, ASCII 字节 (0x00-0x7F) 不可能作为任何其他字符的一部分.
  • 表示非 ASCII 字符的多字节串的第一个字节总是在 0xC0 到 0xFD 的范围里, 并指出这个字符包含多少个字节. 多字节串的其余字节都在 0x80 到 0xBF 范围里. 这使得重新同步非常容易, 并使编码无国界, 且很少受丢失字节的影响.
  • 可以编入所有可能的 231个 UCS 代码
  • UTF-8 编码字符理论上可以最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长.
  • Bigendian UCS-4 字节串的排列顺序是预定的.
  • 字节 0xFE 和 0xFF 在 UTF-8 编码中从未用到.

下列字节串用来表示一个字符. 用到哪个串取决于该字符在 Unicode 中的序号.

U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

xxx 的位置由字符编码数的二进制表示的位填入. 越靠右的 x 具有越少的特殊意义. 只用最短的那个足够表达一个字符编码数的多字节串. 注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目.

例如: Unicode 字符 U+00A9 = 1010 1001 (版权符号) 在 UTF-8 里的编码为:

11000010 10101001 = 0xC2 0xA9

而字符 U+2260 = 0010 0010 0110 0000 (不等于) 编码为:

11100010 10001001 10100000 = 0xE2 0x89 0xA0

这种编码的官方名字拼写为 UTF-8, 其中 UTF 代表 UCS Transformation Format. 请勿在任何文档中用其他名字 (比如 utf8 或 UTF_8) 来表示 UTF-8, 当然除非你指的是一个变量名而不是这种编码本身.

2007-03-18

汉字编码

最近在写一个通用的类解决不同汉字编码的字符串的问题。这个问题困扰我们已久。这次终于下决心彻底解决这个问题。
sigh,为什么要有那么多种编码。全世界都统一起来多好,嘿嘿。

2007-02-28

HTML DOM

DOM 是 Document Object Model 的简称。DOM将文档组织成树状模型。从而将不同的文档表示成统一格式,便于文档的解析。DOM在XML解析中应用很多,其实HTML也是可以转变为DOM的。如下图所示:



把HTML直接去除标记,转化为ASCII文档,丢失了这种层次结构,损失了部分信息。而DOM是一个无损的HTML文档表示方法。可以方便的解决HTML在内存中的表示问题。

2007-02-07

设计模式 -- 单件 Singleton

目前C++中的一个主要问题就是数据的传递。传统的 C++有3种数据传递的方式:传值,传引用,传指针。对于小的对象,不如int,double,传值是很快的。但是对于大的对象,比如字符串,含有数据的类等等,传值时要拷贝对象,但是拷贝大的对象是很慢的。

对于这个问题,可以传指针,但这是C中的方法,而且指针容易造成内存泄露。C++中的解决方案是引用。但是引用也有问题,会造成类的设计比较复杂,函数的参数过多。

于是就有单件的设计模式。单件可以实现传值的语义。他其实封装了传指针,最简单的单件实现很简单( 可见 Modern C++ Design ),他只创建一个对象,如果对象没有创建,则创建,否则就返回创建好的对象( 这就是单的意思吧,在内存中只保留一个对象 )

在设计时,凡是含有大量数据的类,都可以设计成一个单件。这样可以最大的减少拷贝的代价。

Modern C++ Design是C++设计模式中比较著名的一本书,Loki是C++设计模式的一个库。

2007-02-05

Grpah and PageRank

自从PageRank算法产生以来,它已经被用到越来越多的地方。一般来说,有Graph的地方就有PageRank。

PageRank是一个基于图的排名算法,这一算法很像选举政治,一切实体的地位由投票决定。

有了图的rank算法,现在的主要问题就是如何把我们需要rank的东西转化为Graph,现在这个是很多人研究的领域。
  1. WebPage通过url形成page之间的关系,从而构成图,最早的pagerank就是基于WebPage的排名提出的
  2. 实体Entity之间通过在一张网页或者一篇文章中co-occurence产生联系,这方面比较著名的研究是 polyphonet an advanced social network extraction system from the web 一文。
  3. 文本的图表示,我前面也说过,可以建立句子的图,或者词的图
  4. 还有语义网络...
总之,Graph-based表示比以前的向量表示前进了一步,他更多的保留了物体的信息。和向量模型一样,Graph模型也需要解决以下问题。
  1. 模型的建立,特征提取。
  2. 模型的匹配,也就是模型的相似度计算,这涉及到分类器的设计。

2007-01-29

互联网创业什么要注意什么?

转载自 http://www.douban.com/group/topic/1410869

2006年是youtube被收购,结果中国出来200多个tube。现在一些还在做吧,出来了一个flickr,结果中国也出来一堆xlickr。相信其中一些能够做好,但不是每一家公司。
  
互联网创业的诱惑在于:是个人就可以开始做,危险在于:竞争太强,因为谁都可以做,残酷在于:市场上只有第一,也许有第二,基本上没有第三第四。所以,在互联网上创业,需要注意几点:
  1. 注意大个子,如果微软或Google想做这件事情,那你要认真考虑还做不做;
  2. 注意自己的局部优势,要是在自己的一亩三分地还没有优势,那就要考虑自己对准的市场是不是太大?
  3. 注意自己的市场,是不是没有成长潜力,要是是一个萎缩中的市场,你当然要考虑了;
  4. 注意自己产品的可用性和价值,没有这个,什么都不用说了;
  5. 注意自己的竞争策略,为什么自己能够在竞争中存在下去?什么?没有竞争?那再想想看自己的妙主意真得有市场吗?为什么全世界都没有想到,答案很可能是:那根本不是好主意。

2007-01-28

文档的图表示

在信息检索和搜索中,对文本的处理是至关重要的.在文本处理中,文本的表示是第一步.传统的文本表示方法是将文本表示成关键词集合,也就是一个一维向量.这一表示有很多的优点.但是他在文本处理中,过多的损失的文本的信息,所以目前有一种文本的图表示方法.

这一表示方法不仅考虑图中的关键词,而且考虑关键词之间的关系.也就是将文本表示成一个关键词的图(Graph),在图表示中,主要的就是图的顶点和边。

顶点 :关键词
边 :2个顶点之间有一条边,那么这两个顶点的关键词,在文本中的距离小于N。

也就是说两个关键词之间的联系取决于两个词在图中的距离。这个距离定义为词在分词序列中的距离。

转换到新版了

嘿嘿嘿,终于转换到Blogger的新版了。