数据库分词查询的优缺点以及英文和中文各自的分词方法(二)

来源:互联网 发布:明底线知敬畏演讲稿 编辑:程序博客网 时间:2024/04/16 23:40

英文分词方法概要:(具体代码以后会加敬请关注)

英文分词:英文分词是比较容易的,这是因为,英语单词与单词之间所使用的是空格,中文的分词,却需要很多的语法,还涉及到歧义。对于英文分词,我最近的研究如下:

假如有一个Table1表,里面包含一个主键ID字段,一个abstract字段,代表为摘要,其建立了主键,数据有100万条,如下所示

Table1

ID

abstract

1

Hello,my name is zhaikaishun,I come from guilin,guanxi

2

Yes,this is patent system

3

hust located in wuhan china

………

 

 

如果查询abstract中的某几个单词或者某一句话,直接用like %XXX%去查询,速度会很慢,所以,我们要分词

对于abstract的分词,如果是英文,我们的步骤如下:

将abstract中的内容,按照空格进行分词,得到每一个单词

对每一个单词进行一定得处理,比如,全部变成小写的形式,去掉特殊符号,去掉一些经常用到的词语,比如is,are,you ,me,and等,将复数之类的改为单数等,其频率这里我也先补设置(因为查询的时候也会将查询的内容进行这样的变化,所以不需要担心)

如果该单词与数据库中的做index_keyword的表中没有,就将这个单词加入到该表中去

将该单词与ID与其所在的keyword_id的关系保存到search_keyworld_a或者search_keyworld_b……………..直到search_keyworld_z中去,具体存到哪个地方,还得看第一个字母是什么了(其实在现实开发中,我们都是根据单词的第一个字母的ASCII码去分的,分为search_keyworld0~search_keyworld9,或者用十六进制,分词16个,这样,表会少一些,管理起来也方便一些),其权重我就先不设置了,现在假设我只对ID为1的abstract 中的内容进行分词,将会得到如下的表

Index_keyword表,keyword_id为主键,自增,keyword创建索引

Keyword_id

keyword

frequence

1

hello

0(注:这我暂时用不上)

2

name

0

3

zhaikaishun

0

4

come

0

5

from

0

6

guilin

0

7

guangxi

0

……………………..

………………………

……………….

 

Search_keyword_h表, ID,keyword_id创建索引

ID

Keyword_id

weight

1

1

 

 

Search_keyword_n表 ID,keyword_id创建索引

ID

Keyword_id

weight

1

2

 

Search_keyword_z表

ID

Keyword_id

weight

1

3

 

 

Search_keyword_c表 ID,keyword_id创建索引

ID

Keyword_id

weight

1

4

 

 

Search_keyword_f表 ID,keyword_id创建索引

ID

Keyword_id

weight

1

5

 

 

Search_keyword_g表 ID,keyword_id创建索引

ID

Keyword_id

weight

1

6

 

1

7

 

 

 

这样,我们的英文分词就成功了,加入我们要查abstract中包含有name的单词的ID,这时候,我们先对name的一些简单处理,比如变成小写,去掉一些特殊符号,前后空格之类的,我们先去查Table1 abstract 中是否有等于name的,这里明显没有,这时候,我们就会去Index_keyword表中去找到name所对应的keyword_id,这里,我们找到所对应的keyword_id为2,name的第一个字母又为n,所以,我们去Search_keyword_n里面去找keyword_id=2所对应的ID,这里找到对应的ID为1,好,这时,我们再去table1中去寻找ID=1的这一条数据,这样,我们就找到了这一条数据 以上便是英文分词。英文的分词算法,我们可以自己写,难度不是很大,也可以使用网上的比较流行的分词算法,基于Lucene的英文分词,具体方法下回分解
0 0
原创粉丝点击