论坛首页 编程语言技术论坛

我对二元分词的构想与实践

浏览 3453 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2008-07-16   最后修改:2008-11-20
PHP
表只有一个,记录词和新闻记录的对应关系
另外应该还有一个新闻表,就不列了。

CREATE TABLE IF NOT EXISTS fenci (
  word      int not null default 0 comment '词的unicode码组合',
  news_id   int not null default 0 comment '新闻的id',
  news_type int not null default 0 comment '新闻的类型',
  primary key (word, news_id, news_type)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='分词表';
注意表的3联合主键可以避免重复的数据。


这里重要的是把一个词如“你好”转成一个数字,
我采用的方法:
"你"的十六进制4f60 十进制20320
"好"的十六进制597d 十进制22909
你好就编码成4f60597d十六进制对应的这个十进制数1331714429。

下面是把一句话分解成若干个词,可指定参数,限制长短,如30,
方法如下,
第一个字符和第二个字符组词,序号是0,
第二个字符和第三个字符组测,序号是1,
。。。直到序号29(包括在内),
总共30个词,包含了31个字符。

对于每个词,首先正则判断是否每个字都是汉字,网上的例子多的很,什么数字,字母,标点都不要,必须
两个字都是汉字。

这样筛了一遍后,

还可以再筛一遍,把包含如下字(应该有更多):“了”“吧”“吗”。“一”。。的词再筛掉。
然后去掉重复的词,

对于剩下的每个词,先转成数字,往表插数据,word,新闻id,新闻类型。最好能屏蔽数据库错误,
因为表有主键约束。


当用户提交查询数据时,获取其查询的前两个汉字,转成数字,到表中查

至于分词,可以在服务器空闲的时候做.
附件是二元分词的类。
  • fenci.zip (2.4 KB)
  • 描述: 二元分词类,需要自己指定数据库连接
  • 下载次数: 34
   发表时间:2008-07-17  
引用
当用户提交查询数据时,获取其查询的前两个汉字,转成数字,到表中查


如果用户查询的字符不止两个呢?如果包含英文呢?
0 请登录后投票
   发表时间:2008-07-17  
用户输入的查询超过两个字符,我就取前两个。
如果这前两个字符包含英文,我就不给他查
0 请登录后投票
   发表时间:2008-07-17  
xieye 写道
用户输入的查询超过两个字符,我就取前两个。
如果这前两个字符包含英文,我就不给他查


如果是这样,那么这种方案适用于什么场合呢?
0 请登录后投票
   发表时间:2008-07-18  
做一个简单的网站。
或者做一个复杂的网站。但是人手少。所以先快速实现原型,就象我现在这种情况。
程序是可以扩展的。
0 请登录后投票
   发表时间:2008-07-18  
为什么不用空格分词,然后做全文索引(mysql的)?
0 请登录后投票
   发表时间:2008-07-20  
因为我们都说汉语,不说英语的,感谢捧场。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics