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

表只有一个,记录词和新闻记录的对应关系
另外应该还有一个新闻表,就不列了。

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,新闻类型。最好能屏蔽数据库错误,
因为表有主键约束。


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

至于分词,可以在服务器空闲的时候做.
附件是二元分词的类。

你可能感兴趣的:(mysql)