一种MySQL多语言混合文本全文检索的实现方法

文档序号:6619577阅读:231来源:国知局
一种MySQL多语言混合文本全文检索的实现方法【专利摘要】本发明公开了一种MySQL多语言混合文本全文检索的实现方法,包括:准备工作;创建MySQL正译函数、反译函数;正译函数与反译函数的测试;添加MySQL多语言混合文本测试数据;MySQL多语言混合文本全文检索;自定义多语言混合文本停用词表;重建全文检索。本发明巧妙地避开分词算法以及各种插件、词库的安装,在不用改变原有应用系统的基础上,独立实现多语言混合全文检索,减少了应用系统风险,既可以解决因不同的中间件带来的平台不兼容、存储引擎不兼容、开发语言不兼容等技术难题,同时也提高了系统集成的灵活性和可扩展性,可以实现包括中文简体在内的多语言混合文本的全文检索;简单易行,还可以大幅提升多语言混合文本的查全率和查准率。【专利说明】—种MySQL多语言混合文本全文检索的实现方法【
技术领域
】[0001]本发明属于全文检索领域,尤其涉及一种MySQL多语言混合文本全文检索的实现方法。【
背景技术
】[0002]MySQL全文检索使用特定的分词技术、利用查询关键字和查询字段内容之间的相关度进行检索,通过全文索引提高关键字的查全率和查准率。西文(例如英文)以单词为单位,单词之间以空格(或者逗号、点等符号)分隔,西文文本的分词方法较为简单,MySQL的MyISAM存储引擎以及InnoDB存储引擎内核都提供了西文文本的分词技术,结合MySQL全文索引,MyISAM存储引擎以及InnoDB存储引擎都支持西文文本的全文检索。[0003]然而对于东亚文字(主要指中文简体、中文繁体、日文、韩文等)而言,词由一个或多个字组成,字与字之间没有词定界字符(例如空格、逗号、点等符号)进行分隔。以中文简体为例,目前MySQL并没有提供中文简体文本的分词算法,使得MySQL全文检索解析器无法对中文简体文本进行分词,继而无法创建中文简体字符的全文索引,直接导致MySQL并不支持中文简体文本的全文检索。也就是说=MySQL中文简体全文检索的查全率和查准率几乎为零。[0004]截至目前,实现MySQL中文简体全文检索的方法主要有以下两种:[0005]1.使用分词算法实现MySQL中文简体全文检索。[0006]2.汉字转拼音,借助存储引擎的内核机制实现MySQL中文简体全文检索。[0007]基于分词算法的全文检索的查全率与查准率与分词算法密切相关,分词算法的好坏直接导致MySQL全文检索的检索效果。由于中文、韩文、日文等分词算法各不相同,使用分词算法实现MySQL多语言混合文本的全文检索并不可行。[0008]汉字转拼音的检索方法没有考虑到多音字的情况,同时也没有考虑到同音不同词的情况,由此将直接导致MySQL中文简体全文检索的失败,使用该方法也不利于编程语言的扩展,例如需要根据具体编程语言提供PHP、Java、C或者.NET的汉字转拼音算法,使用该方法,更无法实现MySQL多语言混合文本(诸如“我爱中国!我愛中國!ILoveChina!私ii中国f愛?Pft!’’)的全文检索。【
发明内容】[0009]本发明的目的在于提供一种MySQL多语言混合文本全文检索的实现方法,旨在解决由于中文、韩文、日文等分词算法各不相同,使用分词算法实现MySQL多语言混合文本的全文检索不可行,汉字转拼音的检索方法没有考虑到多音字、同音不同词的情况,不利于编程语言的扩展,无法实现MySQL多语言混合文本的全文检索的问题。[0010]本发明是这样实现的,一种MySQL多语言混合文本全文检索的实现方法包括:[0011]步骤一、MySQL多语言混合文本全文检索的准备工作,具体任务包括:字符集的统一设置、创建测试用的数据库、创建测试用的数据库表、创建全文索引;[0012]步骤二、创建MySQL正译函数,该函数完成的功能是:将多语言混合文本统一正译成“英文句子”;[0013]步骤三、创建MySQL反译函数,该函数完成的功能是:将正译函数翻译出来的“英文句子”反译成多语言混合文本;[0014]步骤四、正译函数与反译函数的测试;[0015]步骤五、添加MySQL多语言混合文本测试数据,通过MySQL正译函数的翻译工作,将多语言混合文本测试数据正译成“英文句子”,由MySQL内置的分词技术建立全文索引;[0016]步骤六、MySQL多语言混合文本全文检索;[0017]步骤七、自定义多语言混合文本停用词表,节省索引所占用的储存空间,提高检索效率,同时提高多语言混合文本检索的查全率和查准率;[0018]步骤八、重建全文检索。[0019]进一步,所述的MySQL多语言混合文本全文检索的准备工作的具体内容为:[0020]统一设置MySQL字符集、设置MySQL客户机字符集为UTF8字符集,使用下列命令将MySQL所有字符集设置成UTF8字符集:[0021]showvariableslike,%character%’;[0022]setcharacter—set—client=utf8;[0023]setcharacter—set—connect1n=utf8;[0024]setcharacter—set—database=utf8;[0025]setcharacter_set—results=utf8;[0026]setcharacter—set—server=utf8;[0027]为了使MySQL客户机兼容中文简体、中文繁体、韩文、日文等多国语言,还需要将MySQL客户机的字符集设置为UTF8字符集;[0028]创建测试用的数据库、创建测试用的数据库表、创建全文索引,下面的SQL语句首先创建了一个test数据库;然后创建了一个存储引擎为MylSAM、默认字符集为utf8的书籍book表,该表包括ISBN号isbn字段、书名name字段、简介brief—introduct1n字段、价格price字段以及出版时间publish—time字段,其中isbn字段为主键;最后向课程book表的简介字段brief—introduct1n添加全文索引:[0029]dropdatabaseifexiststest;[0030]createdatabasetest;[0031]usetest;[0032]createtablebook([0033]isbnchar(20)primarykey,[0034]namechar(100)notnull,[0035]brief—introduct1ntextnotnull,[0036]pricedecimal(6,2),[0037]publish—timedatenotnull[0038])engine=MyISAMdefaultcharset=utf8;[0039]createfulltextindexbrief—fulltextonbook(brief—introduct1n);[0040]进一步,所述的创建MySQL正译函数的具体方法为:[0041]对于真正的英文单词,正译函数不进行任何处理,对于中文简体、中文繁体、日文、韩文等多字节字符,正译函数需要将这些字符统一转换为“英文单词”,为了区分真正的英文单词与伪装的“英文单词”,正译函数统一在伪装的“英文单词”前加上空格和反引号以示区分,其中空格用来表示单词之间的分词符号,反引号用来表示多字节字符的开始,最后MySQL正译函数负责将所有的英文单词连成“英文句子”,下面的SQL语句负责创建正译函数,函数名为to_english_fnO,该函数接收text类型的文本数据,返回正译后的text类型的文本数据:[0042]【权利要求】1.一种MySQL多语言混合文本全文检索的实现方法,其特征在于,所述的MySQL多语言混合文本全文检索的实现方法包括:步骤一、MySQL多语言混合文本全文检索的准备工作,具体任务包括:字符集的统一设置、创建测试用的数据库、创建测试用的数据库表、创建全文索引;步骤二、创建MySQL正译函数,该函数完成的功能是:将多语言混合文本统一正译成“英文句子”;步骤三、创建MySQL反译函数,该函数完成的功能是:将正译函数翻译出来的“英文句子”反译成多语言混合文本;步骤四、正译函数与反译函数的测试;步骤五、添加MySQL多语言混合文本测试数据,通过MySQL正译函数的翻译工作,将多语言混合文本测试数据正译成“英文句子”,由MySQL内置的分词技术建立全文索引;步骤六、MySQL多语言混合文本全文检索;步骤七、自定义多语言混合文本停用词表,节省索引所占用的储存空间,提高检索效率,同时提高多语言混合文本检索的查全率和查准率;步骤八、重建全文检索。2.如权利要求1所述的MySQL多语言混合文本全文检索的实现方法,其特征在于,所述的MySQL多语言混合文本全文检索的准备工作的具体内容为:统一设置MySQL字符集、设置MySQL客户机字符集为UTF8字符集,使用下列命令将MySQL所有字符集设置成UTF8字符集:showvariablesIikei%character%’;setcharacter—set—client=utf8;setcharacter—set—connect1n=utf8;setcharacter—set—database=utf8;setcharacter_set—results=utf8;setcharacter—set—server=utf8;为了使MySQL客户机兼容中文简体、中文繁体、韩文、日文等多国语言,还需要将MySQL客户机的字符集设置为UTF8字符集;创建测试用的数据库、创建测试用的数据库表、创建全文索弓I,下面的SQL语句首先创建了一个test数据库;然后创建了一个存储引擎为MylSAM、默认字符集为utf8的书籍book表,该表包括ISBN号isbn字段、书名name字段、简介brief—introduct1n字段、价格price字段以及出版时间publish—time字段,其中isbn字段为主键;最后向课程book表的简介字段brief—introduct1n添加全文索引:dropdatabaseifexiststest;createdatabasetest;usetest;createtablebook(isbnchar(20)primarykey,namechar(100)notnull,brief—introduct1ntextnotnull,pricedecimal(6,2),publish_timedatenotnull)engine=MyISAMdefaultcharset=utf8;createfulltextindexbrief_fulltextonbook(brief_introduct1n);。3.如权利要求1所述的MySQL多语言混合文本全文检索的实现方法,其特征在于,所述的创建MySQL正译函数的具体方法为:对于真正的英文单词,正译函数不进行任何处理,对于中文简体、中文繁体、日文、韩文等多字节字符,正译函数需要将这些字符统一转换为“英文单词”,为了区分真正的英文单词与伪装的“英文单词”,正译函数统一在伪装的“英文单词”前加上空格和反引号以示区分,其中空格用来表示单词之间的分词符号,反引号用来表示多字节字符的开始,最后MySQL正译函数负责将所有的英文单词连成“英文句子”,下面的SQL语句负责创建正译函数,函数名为to_english_fnO,该函数接收text类型的文本数据,返回正译后的text类型的文本数据:4.如权利要求1所述的MySQL多语言混合文本全文检索的实现方法,其特征在于,所述的创建MySQL反译函数的具体方法为:MySQL反译函数首先识别真正的英文单词以及伪装的“英文单词”,对于伪装的“英文单词”,MySQL反译函数首先剔除这些单词前面的反引号,对于真正的英文单词,反译函数将其翻译成对应的HEX值,接着MySQL反译函数负责将所有的HEX值连成一个长文本,最后将其翻译成对应的多语言混合文本,下面的SQL语句负责创建反译函数,函数名为to_multilanguage_fnO,该函数接收text类型的文本数据,返回反译后的text类型的文本数据:5.如权利要求1所述的MySQL多语言混合文本全文检索的实现方法,其特征在于,所述的正译函数与反译函数的测试的具体方法为:正译函数接收多语言混合文本数据,然后将其正译成英文句子;反译函数接收正译函数反译后的英文句子,然后将其反译成多语言混合文本;正译函数与反译函数互为反函数。6.如权利要求1所述的MySQL多语言混合文本全文检索的实现方法,其特征在于,所述的MySQL多语言混合文本全文检索包括英文单词以及中文简体的全文检索、中文繁体以及中文简体的全文检索、日文以及英文的全文检索、停用词的全文检索、英文单词的全文检索、多字节标点符号的全文检索,具体方法为:多语言混合文本作为关键字进行全文检索时,首先需要将关键字正译成英文句子,然后由MySQL对该英文句子进行全文检索,最后借助反译函数将检索的结果翻译成多语言混合文本,最终实现MySQL多语言混合文本的全文检索。7.如权利要求1所述的MySQL多语言混合文本全文检索的实现方法,其特征在于,自定义MyISAM多语言混合文本停用词表的具体方法为:将中文句号“。”与中文逗号“,”等标点符号设置为停用词,将下面列出的中文标点设置为停用词:,!;:Y)(ο、“,,)】【一将没有实际意义的字或者词组设置为停用词或者停用词组,例如下面的中文字或者词组:们、的、得、地、阿、啊、吧、吗、呢、嗯、巴、都、着、了、过、哇、哎呀、哎、哦、嗨、哼、哟、很、十分、虽然、而、却、即使、也、常常、往往、越发、更加、甚至、以至以致、固然、差点儿、只有、除非、尽管不管、无论、从而、进而、既然、既、因此、因为、所以、另外、此外、何必、几乎、简直、处处、到处、按照、依照、遵照、本来、原来、必定、必然、毕竟、到底。在MySQ配置文件[mysqld]选项组中加入“ft_stopword_file=’c:/stop.txt’”,然后创建stop,txt文件,继而可以在stop,txt文件中自定义多语言混合文本全文检索的停用词,每个单词使用单引号扩起来,单词之间使用英文逗号隔开,以记事本的方式打开停用词文件,输入下面的信息,分别对应中文标点符号以及中文停用词(或词组):重新启动MySQL服务器,执行“repairtablebookquick重建全文索引,自定义多语言混合文本停用词表立即生效。8.如权利要求1所述的MySQL多语言混合文本全文检索的实现方法,其特征在于,自定义InnoDB多语言混合文本停用词表的具体方法为:执行下面的MySQL命令修改book表的存储引擎为InnoDB存储引擎:altertablebookengine=innodb;接着执行下列命令,创建一个与INNODB_FT_DEFAULT_STOPWORD表结构相同的表my_stopword,正译INNODB_FT_DEFAULT_STOPWORD表的停用词,并将其中的所有数据添加到my_stopword表中;使用下列MySQL命令创建自定义多语言混合文本停用词表my_stopword,并向自定义多语言混合文本停用词表插入停用词,最后将my_stopword表设置为InnoDB自定义多语言混合文本停用词表:【文档编号】G06F17/30GK104133854SQ201410324275【公开日】2014年11月5日申请日期:2014年7月9日优先权日:2014年7月9日【发明者】孔祥盛,潘红,闪永强,张丽伟,高雪霞,张磊,茹蓓,常青,郜伟雪,魏红娟,张涛,苏明强申请人:新乡学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1