2007-04-13

拼音输入法

最近在做一个拼音输入法,其实是个作业,不过我想把它做的完美一点,嘿嘿。
我做了一个联想的算法,主要用的是3元语法模型,效果还行,下面是一些结果,嘿嘿!

[input] : aersitongbenchangbisaidadebucuo
a er si tong ben chang bi sai da de bu cuo
阿 尔 斯 通 体 长 比 赛 大 的 不 错
[input] : aersitongbengchangbisaidadebucu
o
a er si tong beng chang bi sai da de bu cuo
阿 尔 斯 通 平 常 比 赛 大 的 不 错
[input] : wofaxianyigeguilv
wo fa xian yi ge gui lv
我 发 现 一 个 规 律
[input] : aiyinsitan
ai yin si tan
爱 因 斯 坦
[input] : niudunshiyingguozhumingdewulixuejia
niu dun shi ying guo zhu ming de wu li xue jia
牛 不 是 英 国 注 明 的 物 理 学 家
[input] : niudun
niu dun
牛 顿
[input] : haohaoxuexi
hao hao xue xi
好 好 学 习
[input] : tiantianxiangshang
tian tian xiang shang
天 天 向 上
[input] : maozhuxishiwomendelinxiu
mao zhu xi shi wo men de lin xiu
毛 主 席 是 我 们 的 林 秀
[input] : maozhuxishiwomendelingxiu
mao zhu xi shi wo men de ling xiu
毛 主 席 是 我 们 的 领 袖
[input] : gaigekaifangyilaiwomenqudelechangzudejinbu
gai ge kai fang yi lai wo men qu de le chang zu de jin bu
改 革 开 放 以 来 我 们 取 得 了 长 足 的 进 步
[input] : haolabiekule
hao la bie ku le
好 落 别 哭 了
[input] : guowuyuanzongliwenjiabaojintiandidaribenkaishiduiribendeyouhaofangwen
guo wu yuan zong li wen jia bao jin tian di da ri ben kai shi dui ri ben de you hao fang wen
国 务 院 总 理 温 家 宝 今 天 的 大 日 本 开 始 对 日 本 的 友 好 访 问
[input] : weishenbu
wei shen bu
为 什 不
[input] : weishengbu
wei sheng bu
卫 生 部
[input] : weishengbufayanrenjintianshuowomenguojiajiangtuijinquanmiandeyiliaogaige
wei sheng bu fa yan ren jin tian shuo wo men guo jia jiang tui jin quan mian de yi liao gai ge
卫 生 不 发 言 人 今 天 说 我 们 国 家 将 推 进 全 面 的 医 疗 改 革
[input] : jintiandekaoyanshitibijiaojiandan
jin tian de kao yan shi ti bi jiao jian dan
今 天 的 考 验 是 提 比 较 简 单

2007-04-10

图像检索

最近作了一个大作业,图像检索。主要是基于简单的颜色和纹理特征的。下面是一些效果图,做得和粗糙,嘿嘿。

2007-04-07

社会网络

我们通过一定的技术,获取了大量的实体之间的关系。给出几个种子词语,我们可以生成一张图,显示他们的关系。下面贴出一些图给大家看看:

种子 :诸葛亮 李世民 李白

种子:毛泽东 爱因斯坦

种子:毛泽东 胡志明 金日成 卡斯特罗

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. 模型的匹配,也就是模型的相似度计算,这涉及到分类器的设计。