论文部分内容阅读
摘要 随着信息量的不断增长,搜索引擎在网站中所起到的作用顯得越来越重要,如何通过搜索引擎获得丰富的信息,成为用户关心的重要问题。通过设计实现基于字典的中文切词系统,并对不同格式的文件进行数据挖掘,改进北京市精品课程平台的搜索引擎。
关键词 Lucene;中文切词;搜索;数据挖掘;SEO
中图分类号:TP391 文献标识码:A 文章编号:1671-489X(2010)09-0003-03
Design and Implementation of Chinese Tokenize System in Beijing Quality Course Platform//Zhou Shuyi, Xu Xiaoliang
Abstract With the growing amount of information, Search engine is playing a more and more important role in a web Site. How to get rich information through the search engine has become a significant fact of the site users. This article discussed mining different format date and implements a search engine, including a Chinese tokenize system based on dict. It has improved the search engine of Beijing Quality Course Platform.
Key words Lucene; Chinese tokenize; search; date mining; SEO
Author’s address Modern Technological Center in Education of BJUT, Beijing, China 100022
一般的教学与课程网站内的搜索条目,都是基于关键字的搜索。例如,输入课程名,返回结果是网站所包含此课程的信息;输入学校名,返回的结果是网站所包含此学校的课程信息。无论是课程名还是学校名,等等,都是基于关键字的搜索。
正在建设中的北京市精品课程网站由于规模较大,网上资源也越来越丰富,大量的课件信息不断增加到网站中。如果用户想获取包含某一条关键字的课件,在现有的搜索条件下,需要通过输入关键字,找到相应的课程,然后在课程网页下获取课件。过程既费时,获取的信息又不全面。如何能够直接通过网站内容的搜索,就可以获取所有包括内容关键字的课件信息?笔者在分析搜索引擎架构的基础上,设计并实现一个基于内容的搜索引擎,包括对中文进行处理分析的切词系统和基于Lucene框架的索引系统。搜索引擎采用Java语言编写,实现对服务器上存储的Word、Excel、PPT、PDF、txt格式的数据挖掘。
1 理论基础
1.1 LuceneLucene是Apache软件基金会Jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文2种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
Lucene可以对任何数据做索引和搜索。不管数据源是什么格式,只要它能被转化为文字的形式,就可以被Lucene所分析利用。
1.2 API
1)Apache POI。Microsoft的Office格式非常复杂,往往包含各种文档属性信息、文档内的格式信息,有时候甚至包含复合文档。文档属性信息主要包括文档的标题、主题、摘要、类别、关键词等;文档内部的格式信息包括文档的字体、字号、表格、图表、其他OLE2的正文元素等。
POI就是通过OLE2模式访问Office文档,读取和修改Office的复杂文档格式。针对不同的Office文档类型,POI分别有针对性地提供访问接口,包括解析Word接口的HWPF、Excel的HSSF、PPT的HSLF,读取Office文档标准属性的HPSF。
2)PDFBox。PDFBox是一个可以操作PDF文档的Java PDF类库,它可以创建一个新PDF文档,操作现有PDF文档并提取文档中的内容。
2 基于内容的搜索引擎的实现
2.1 对文档建立索引实现文档的索引分2步:1)对文档的内容进行解析,得到相应的语义单元;2)将解析后的内容和文件的其他信息(如文件的名称、存放路径等)存储在索引文件中。
由于文档的格式不同,在对文档进行索引的时候,需要根据不同格式的文档分别讨论解析。
1)索引Office文档。对于Office文档的解析,采用Apache POI提供的HWPF与HSSF接口。HWPF接口提供WordExtractor类,可以将Word文档中的内容提取出来,并保存为字符串类型。HSSF接口提供3个类——HSSFRow、HSSFSheet、HSSFWorkbook,分别对Excel文档中的行、表格、工作簿进行操作。具体过程如图1所示。
3 技术难点
众所周知,英文以词为单位,词和词之间靠空格隔开;而中文以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子“I am a Chinese”,用中文则为“我是一个中国人”。计算机可以很简单地通过空格知道Chinese是一个单词,但是不能很容易明白“中”“国”2个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称之为切词。“我是一个中国人”,分词的结果是:我、是、一个、中国人。
目前最新版本的Lucene自身提供的StandardAnalyzer(标准切词系统)已经具备中文分词的功能,但是不一定能够满足大多数应用的需要。其思想只是简单地将每一个汉字切成一个单独的单词,并没有对中文单词进行判断。
笔者设计的分词系统够尽可能地将一个句子中有用的信息提取出来,去除无用的信息,以做到压缩索引库大小,提高索引效率。例如“北京是中国的首都”,切词后为“北京 中国 首都”。
4 切词系统
本案设计的切词系统在英文句子处理方面继承了Lucene提供的对英文的切词思想,在汉字处理以及切词过滤方面设计了基于字典并采用正反双向搜索方法的切词系统,主要包括以下几个部分。
1)本地地名词表,包括城市、乡村、街道的地名名称和简称,如平乐园村、潘家园桥、工大等。由于北京市精品课程平台主要应用在北京地区,为了提高索引的效率,所以本地地名字典只包括北京当地的地名、街道名。
2)停用词表,主要包括汉语及英语中的副词、虚词、指示代词、连接词,如and、at、你、我、他等。这些词汇在一个句子当中并没有具体的含义,只是起到连接前后词语,使句子通顺完整的作用。因此,系统在对英文句子以及汉语句子进行切词的时候会查找停用词表,不将这些词汇添加进入索引,降低索引库大小,提高索引效率。
3)后缀词表,主要包括当前常用的词语后缀词。后缀词在一个短语中用来修饰前面的词汇,没有具体的含义,有时需要知道后缀词前面的词汇所表达的信息。例如“北京市高校”,用户在搜索“北京”的时候也应当返回搜索信息。后缀词库主要包括省、市、镇等。
4)中文以及罗马数字词表,主要包括中文汉字十、百、千、万、零、一以及罗马数字等,用于对中文句子中的汉字和罗马数字的甄别。
5)符号连接词表,主要包括数学或者程序表达式中的符号链接,如“-”“——”“@”等,没有实际的意义。
6)量词词表,主要包括汉字当中的量词词汇,如公顷、平方厘米、年代等。
7)干扰词表,主要包括汉语句子當中出现的无意义词汇,而又可能在句子中与其相邻词汇构成单词的词汇,如而、这、并等。
8)字典词库,包括当前主要使用的汉语词汇,这是整个切词字典的最主要词库,此词库中的词汇若在句子中出现,切词系统则会认为这是一个有用的词汇,将其加入索引库。字典词库收录词汇的多少,很大程度上决定了索引的效率,也就是用户搜索的速度。
切词系统运行流程如图3、图4所示。
5 测试数据和性能分析
5.1 测试环境在测试时,选用一台主频为3.00 GHz、内存为16 G的Dell2950服务器,操作系统为Ubuntu 9.04(Linux内核版本2.6.28),对Lucene提供的StandardAnalyzer与本案设计的切词系统在切词效果与切词时间上进行对比。
5.2 测试用例与测试结果选取的测试用例与测试结果如表1所示。
5.3 测试分析由于篇幅的原因,只采用5个测试用例。从测试结果看,Lucene提供的StandardAnalyzer在中文切词方面只是单纯地将每一个汉字当做一个单词来处理;而笔者所设计的分词系统由于采用了基于字典的设计思想,因此在处理汉字词汇方面有了很好的切词效果,能够识别出句子当中的汉语单词,并且将在句子中没有实际意义的汉字剔除。时间方面,由于StandardAnalyzer没有采用词典,因此在切词速度上比本案设计的切词系统快,大概是1:3的关系。
由此可知,StandardAnalyzer的优点是切词速度快,缺点是不会对中文分词进行处理,会产生大量的索引数据,使索引的效率大大降低,并且用户在索引信息时会得到大量无用数据,降低命中率。本案设计的切词系统,优点是对中文分词有很好的处理效果,对中文句子进行优化的切词处理,提取有效的信息,降低索引库的大小,提高索引效率,并且比采用StandardAnalyzer索引信息的命中率高;缺点是由于采用基于字典的切词思想,因此时间上会有损失。
综上所述,随着网站内容的不断增加,若采用StandardAnalyzer对中文进行处理,随之产生的索引库会变得相当巨大,造成索引效率下降,直接的影响效果就是用户在搜索信息的时候会等待很长的时间。同时,由于没有对中文分词进行处理,用户也会得到很多无效的信息。若采用本案设计的切词系统,索引库的大小会得到很好的控制,提高索引的效率。同时,用户在得到搜索信息时,由于系统对中文分词进行了处理,所以会过滤掉对用户无用的信息。由于切词系统在搜索引擎建立索引库时运行在整个搜索引擎的后台,不影响搜索平台前台的使用,而在用户索引数据时,2种切词系统时间上的差别属于毫秒级别,用户基本上感觉不到。所以,虽然本案设计的切词系统在时间上逊于StandardAnalyzer,但空间和效率上比之有很大的提高。
6 总结
设计基于内容的搜索引擎,并且采用基于字典的切词系统,丰富北京市精品课程平台的搜索功能,为用户提供一个简单实用、获取丰富课件信息的通道。
参考文献
[1]王学松,等.Lucene Nutch搜索引擎开发[M].北京:人民邮电出版社,2008:348
[2]李刚,宋伟,邱哲.Ajax Lucene构建搜索引擎[M].北京:人民邮电出版社,2006:298-302
关键词 Lucene;中文切词;搜索;数据挖掘;SEO
中图分类号:TP391 文献标识码:A 文章编号:1671-489X(2010)09-0003-03
Design and Implementation of Chinese Tokenize System in Beijing Quality Course Platform//Zhou Shuyi, Xu Xiaoliang
Abstract With the growing amount of information, Search engine is playing a more and more important role in a web Site. How to get rich information through the search engine has become a significant fact of the site users. This article discussed mining different format date and implements a search engine, including a Chinese tokenize system based on dict. It has improved the search engine of Beijing Quality Course Platform.
Key words Lucene; Chinese tokenize; search; date mining; SEO
Author’s address Modern Technological Center in Education of BJUT, Beijing, China 100022
一般的教学与课程网站内的搜索条目,都是基于关键字的搜索。例如,输入课程名,返回结果是网站所包含此课程的信息;输入学校名,返回的结果是网站所包含此学校的课程信息。无论是课程名还是学校名,等等,都是基于关键字的搜索。
正在建设中的北京市精品课程网站由于规模较大,网上资源也越来越丰富,大量的课件信息不断增加到网站中。如果用户想获取包含某一条关键字的课件,在现有的搜索条件下,需要通过输入关键字,找到相应的课程,然后在课程网页下获取课件。过程既费时,获取的信息又不全面。如何能够直接通过网站内容的搜索,就可以获取所有包括内容关键字的课件信息?笔者在分析搜索引擎架构的基础上,设计并实现一个基于内容的搜索引擎,包括对中文进行处理分析的切词系统和基于Lucene框架的索引系统。搜索引擎采用Java语言编写,实现对服务器上存储的Word、Excel、PPT、PDF、txt格式的数据挖掘。
1 理论基础
1.1 LuceneLucene是Apache软件基金会Jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文2种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
Lucene可以对任何数据做索引和搜索。不管数据源是什么格式,只要它能被转化为文字的形式,就可以被Lucene所分析利用。
1.2 API
1)Apache POI。Microsoft的Office格式非常复杂,往往包含各种文档属性信息、文档内的格式信息,有时候甚至包含复合文档。文档属性信息主要包括文档的标题、主题、摘要、类别、关键词等;文档内部的格式信息包括文档的字体、字号、表格、图表、其他OLE2的正文元素等。
POI就是通过OLE2模式访问Office文档,读取和修改Office的复杂文档格式。针对不同的Office文档类型,POI分别有针对性地提供访问接口,包括解析Word接口的HWPF、Excel的HSSF、PPT的HSLF,读取Office文档标准属性的HPSF。
2)PDFBox。PDFBox是一个可以操作PDF文档的Java PDF类库,它可以创建一个新PDF文档,操作现有PDF文档并提取文档中的内容。
2 基于内容的搜索引擎的实现
2.1 对文档建立索引实现文档的索引分2步:1)对文档的内容进行解析,得到相应的语义单元;2)将解析后的内容和文件的其他信息(如文件的名称、存放路径等)存储在索引文件中。
由于文档的格式不同,在对文档进行索引的时候,需要根据不同格式的文档分别讨论解析。
1)索引Office文档。对于Office文档的解析,采用Apache POI提供的HWPF与HSSF接口。HWPF接口提供WordExtractor类,可以将Word文档中的内容提取出来,并保存为字符串类型。HSSF接口提供3个类——HSSFRow、HSSFSheet、HSSFWorkbook,分别对Excel文档中的行、表格、工作簿进行操作。具体过程如图1所示。

3 技术难点
众所周知,英文以词为单位,词和词之间靠空格隔开;而中文以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子“I am a Chinese”,用中文则为“我是一个中国人”。计算机可以很简单地通过空格知道Chinese是一个单词,但是不能很容易明白“中”“国”2个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称之为切词。“我是一个中国人”,分词的结果是:我、是、一个、中国人。
目前最新版本的Lucene自身提供的StandardAnalyzer(标准切词系统)已经具备中文分词的功能,但是不一定能够满足大多数应用的需要。其思想只是简单地将每一个汉字切成一个单独的单词,并没有对中文单词进行判断。
笔者设计的分词系统够尽可能地将一个句子中有用的信息提取出来,去除无用的信息,以做到压缩索引库大小,提高索引效率。例如“北京是中国的首都”,切词后为“北京 中国 首都”。
4 切词系统
本案设计的切词系统在英文句子处理方面继承了Lucene提供的对英文的切词思想,在汉字处理以及切词过滤方面设计了基于字典并采用正反双向搜索方法的切词系统,主要包括以下几个部分。
1)本地地名词表,包括城市、乡村、街道的地名名称和简称,如平乐园村、潘家园桥、工大等。由于北京市精品课程平台主要应用在北京地区,为了提高索引的效率,所以本地地名字典只包括北京当地的地名、街道名。
2)停用词表,主要包括汉语及英语中的副词、虚词、指示代词、连接词,如and、at、你、我、他等。这些词汇在一个句子当中并没有具体的含义,只是起到连接前后词语,使句子通顺完整的作用。因此,系统在对英文句子以及汉语句子进行切词的时候会查找停用词表,不将这些词汇添加进入索引,降低索引库大小,提高索引效率。
3)后缀词表,主要包括当前常用的词语后缀词。后缀词在一个短语中用来修饰前面的词汇,没有具体的含义,有时需要知道后缀词前面的词汇所表达的信息。例如“北京市高校”,用户在搜索“北京”的时候也应当返回搜索信息。后缀词库主要包括省、市、镇等。
4)中文以及罗马数字词表,主要包括中文汉字十、百、千、万、零、一以及罗马数字等,用于对中文句子中的汉字和罗马数字的甄别。
5)符号连接词表,主要包括数学或者程序表达式中的符号链接,如“-”“——”“@”等,没有实际的意义。
6)量词词表,主要包括汉字当中的量词词汇,如公顷、平方厘米、年代等。
7)干扰词表,主要包括汉语句子當中出现的无意义词汇,而又可能在句子中与其相邻词汇构成单词的词汇,如而、这、并等。
8)字典词库,包括当前主要使用的汉语词汇,这是整个切词字典的最主要词库,此词库中的词汇若在句子中出现,切词系统则会认为这是一个有用的词汇,将其加入索引库。字典词库收录词汇的多少,很大程度上决定了索引的效率,也就是用户搜索的速度。
切词系统运行流程如图3、图4所示。
5 测试数据和性能分析
5.1 测试环境在测试时,选用一台主频为3.00 GHz、内存为16 G的Dell2950服务器,操作系统为Ubuntu 9.04(Linux内核版本2.6.28),对Lucene提供的StandardAnalyzer与本案设计的切词系统在切词效果与切词时间上进行对比。
5.2 测试用例与测试结果选取的测试用例与测试结果如表1所示。
5.3 测试分析由于篇幅的原因,只采用5个测试用例。从测试结果看,Lucene提供的StandardAnalyzer在中文切词方面只是单纯地将每一个汉字当做一个单词来处理;而笔者所设计的分词系统由于采用了基于字典的设计思想,因此在处理汉字词汇方面有了很好的切词效果,能够识别出句子当中的汉语单词,并且将在句子中没有实际意义的汉字剔除。时间方面,由于StandardAnalyzer没有采用词典,因此在切词速度上比本案设计的切词系统快,大概是1:3的关系。
由此可知,StandardAnalyzer的优点是切词速度快,缺点是不会对中文分词进行处理,会产生大量的索引数据,使索引的效率大大降低,并且用户在索引信息时会得到大量无用数据,降低命中率。本案设计的切词系统,优点是对中文分词有很好的处理效果,对中文句子进行优化的切词处理,提取有效的信息,降低索引库的大小,提高索引效率,并且比采用StandardAnalyzer索引信息的命中率高;缺点是由于采用基于字典的切词思想,因此时间上会有损失。

综上所述,随着网站内容的不断增加,若采用StandardAnalyzer对中文进行处理,随之产生的索引库会变得相当巨大,造成索引效率下降,直接的影响效果就是用户在搜索信息的时候会等待很长的时间。同时,由于没有对中文分词进行处理,用户也会得到很多无效的信息。若采用本案设计的切词系统,索引库的大小会得到很好的控制,提高索引的效率。同时,用户在得到搜索信息时,由于系统对中文分词进行了处理,所以会过滤掉对用户无用的信息。由于切词系统在搜索引擎建立索引库时运行在整个搜索引擎的后台,不影响搜索平台前台的使用,而在用户索引数据时,2种切词系统时间上的差别属于毫秒级别,用户基本上感觉不到。所以,虽然本案设计的切词系统在时间上逊于StandardAnalyzer,但空间和效率上比之有很大的提高。
6 总结
设计基于内容的搜索引擎,并且采用基于字典的切词系统,丰富北京市精品课程平台的搜索功能,为用户提供一个简单实用、获取丰富课件信息的通道。
参考文献
[1]王学松,等.Lucene Nutch搜索引擎开发[M].北京:人民邮电出版社,2008:348
[2]李刚,宋伟,邱哲.Ajax Lucene构建搜索引擎[M].北京:人民邮电出版社,2006:298-302