CN100401300C - 具有自动分类功能的搜索引擎 - Google Patents
具有自动分类功能的搜索引擎 Download PDFInfo
- Publication number
- CN100401300C CN100401300C CNB2006100262527A CN200610026252A CN100401300C CN 100401300 C CN100401300 C CN 100401300C CN B2006100262527 A CNB2006100262527 A CN B2006100262527A CN 200610026252 A CN200610026252 A CN 200610026252A CN 100401300 C CN100401300 C CN 100401300C
- Authority
- CN
- China
- Prior art keywords
- document
- module
- classification
- documents
- submodule
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种具有自动分类功能的搜索引擎,它包括:置于服务器端的用于自动从网络上搜集文档,进行预处理,并将文档转化为计算机可读方式和实时进行文档更新的自动搜集和预处理模块;用于对自动搜集和预处理模块处理后的格式化文档进行分词,并分别给分词后的词和文档赋予词标识和文档标识,再根据词标识和文档标识建立索引库的索引模块;用于对已处理后的格式化文档进行训练和自动分类以及对所检索到的文档进行动态聚类的自动分类聚类模块;以及置于用户端的用于根据用户输入的关键词从服务器端的文档库中搜索与关键词相匹配的文档的检索显示模块。能有效地智能化程度较高地进行中、英文的自动文档分类和检索。
Description
技术领域
本发明涉及一种搜索引擎,特别涉及一种具有自动分类功能的搜索引擎。
背景技术
目前,随着信息技术的不断发展,特别是互联网应用的飞速普及,电子信息爆炸似的丰富起来。海量、无序的信息需要有效的管理、发布、查询工具。关系型数据库能够对结构化数据提供简便的管理和查询手段,但无法有效处理大量的非结构化信息,如网络(Web)页面、新闻、专利、法律、项目文档、合同、技术文档、科技文献、图书目录等等文档(这类信息已占有整个信息量的80%以上),而先进的全文检索技术能够高效地实现对非结构化数据的管理和快速查询。当前运行的自动分类搜索引擎主要使用很简单的分析格式的结构,就连人们所熟悉的google也只是平面的搜索,并不做智能化处理。搜索引擎智能化程度比较低,文档的分类和检索能力比较差,效率比较低,这是当前存在的问题。这使得如何组织网络上形形色色的网络资源并正确且有效率的提供给使用者成为全世界信息服务界的共同课题,也使得有效的信息查询和自动分类工具成为必需。
发明内容
本发明的目的是通过对非结构化的文档进行数据挖掘的工作。采用智能和自动的方式根据语义对文档进行分类,能有效实现中、英文的自动文档分类和检索。解决现在搜索引擎智能化程度较低,文档的分类和检索能力较差以及效率较低的问题。同时对于作为搜索引擎难点技术的中文分词,数据存储空间的节省,查询结果的聚类问题,提出独有的解决方案。
本发明所采用的具体技术方案是:它包括:置于服务器端的:
自动搜集和预处理模块,用于自动从网络上搜集文档,进行预处理,并将文档转化为计算机可读方式和实时进行文档更新;
索引模块,用于对自动搜集和预处理模块处理后的格式化文档进行分词,并分别给分词后的词和文档赋予词标识和文档标识,再根据词标识和文档标识建立文档索引库;
自动分类聚类模块,用于对已处理后的格式化文档进行训练和自动分类以及对所检索到的文档进行动态聚类;
置于用户端的:
检索显示模块,用于根据用户输入的关键词从服务器端的文档库中搜索与关键词相匹配的文档。
本发明的具有自动分类功能的搜索引擎具有显著的效益:
●如上述的结构,因为本发明包括自动分类聚类模块,具有独特的基于关键词短语发现的层次聚类。在查询时,本发明的动态聚类相比预处理的静态聚类可以提供更高的准确性。因为动态聚类的数据集限定在更精确的范围。其他的搜索引擎返回的是平面结果,而本发明聚类的结果是层次化的,精确地缩小了搜索范围。
●因为本发明包括的自动搜集和预处理模块中包含多进程、多线程的递归抓取页面的爬虫程序模块。因此,实现多线程爬虫自动搜集文档,使用Dublin core格式表示文档。爬虫的效率为每100线程,每秒20篇文档,比google搜索引擎实现的每1000线程、每秒60篇文档效率高2倍(参见论文《The Anatomy of a Search Engine》S.Brin and L.Page.Theanatomy of a large-scale hypertextual web search engine.In Proceedings of theSeventh International World Wide Web Conference(WWW7),Apr.1998)。
●本发明的索引模块使用字节对齐的变长整数压缩算法对文档索引库进行压缩,使用文档标识(docID)的差值表示文档,实现了小储存空间高查询速度。在原始文档为html文件时,倒排索引库的大小为原始文档的30%左右。
●本发明使用距离向量、朴素贝叶斯(Naive Bayes)和支持向量机(SVM)的分类算法对中、英文新闻进行自动分类,分类准确率大于90%。
●本发明的文档库、索引库都可以动态更新,增加、删除、更新操作都可以针对单独的文档,不需要一次批量处理文档,这样的灵活性可以增加文档的更新速度。
●本发明通过对文本的高效,准确,自动,智能的分类整理,大大提高现有搜索引擎信息查找方式的效率和准确性,为用户节约了大量时间和费用。
●本发明的搜索引擎应用非常广泛。可以做为新闻媒体的内部分类系统,新闻网站的后台自动新闻系统的带结果分类功能的搜索引擎;也可以用于针对某一专业的资料搜集,如图书馆的电子化图书分类;还可以为企业提供高效的内部资料检索系统软件和个性化、专业化服务。因此,本项目具有良好的市场应用前景,可形成相当规模的产业链,其成功实施将产生显著的社会经济效益。
附图说明
图1为本发明搜索引擎的总体结构示意图;
图2为图1中自动搜集和预处理模块101的结构示意图;
图3为图1中索引模块102的结构示意图;
图4为图1中自动分类和聚类模块103的结构示意图;
图5为图4中分类聚类模块1035的结构示意图;
图6为图1中检索显示模块201的流程图;
图7是一个后缀树的结构式。
具体实施方式
下面结合附图进一步说明本发明搜索引擎的结构及其工作特征。
图1是本发明搜索引擎的总体结构示意图,如图1所示,本发明搜索引擎包括:置于服务器1端的自动搜集和预处理模块101,索引模块102,自动分类聚类模块103以及置于用户端2的显示检索模块201。
如上述图1的结构,服务器1端的自动搜集和预处理模块101在网络上自动搜集文档(新闻),然后进行预处理,将所搜集到的文档转化成计算机的可读方式,变成格式化文档,并实时(或定时)地进行文档的搜集更新;索引模块102对自动搜集和预处理模块101处理后的格式化文档使用基于词表的匹配算法进行分词,并给分词后的词付以词标识,给分词后的文档付以文档标识,根据词标识和文档标识建立文档索引,并存储于文档索引库中;自动分类聚类模块103,用于对索引模块102建立的文档索引库中的格式化文档进行分类训练(或称学习),训练后自动进行对文档的分类,并且对用户检索到的文档采用基于关键词短语发现的层次聚类方式进行动态聚类;置于用户端2的显示检索模块201,用于在需要查询时根据输入的关键词在索引模块102和自动分类聚类模块103的文档索引库和文档库中搜索与关键词匹配的文档,找到的文档通过自动分类聚类模块103进行聚类,将符合文档的开始100个字作为摘要按照聚类后的类别分栏目显示出来。
图2是自动搜集和预处理模块101的结构示意图。如图2所示,所述的自动搜集和预处理模块101包括:联接于网络上的网络站点模块1011,用于从网络站点模块1011上抓取(新闻)文档的程序模块1012,用于接收程序模块1012所抓取文档(新闻文档)的原始文档模块1013,用于将原始文档模块1013所接收到的文档进行编码转换的编码转换模块1014,用于将全部文档转换成所要求格式的格式化模块1015,用于接收经过格式化模块1015格式化后的格式化文档的格式化文档模块1016。
如上述图2的结构,程序模块1012从网络站点模块1011上抓取(新闻)文档。在本实施例中,该程序模块1012采用爬虫(crawler)程序来从网络站点模块1011上抓取文档,它抓取到的文档送到原始文档模块1013中,原始文档模块1013将接收到的原始文档送到编码转换模块1014中进行编码转换,经编码转换后的文档送到将全部文档转换成所要求格式化的格式化模块1015中,格式化模块1015对文档进行格式化,再将已格式化的格式化文档送到格式化文档模块1016中。
所述的程序模块1012所采用的爬虫(crawler)程序是多进程,多线程的递归抓取页面的爬虫程序模块。所述的多进程主要分为读取和更新两个独立的进程(process)。每个进程都是多线程(threads)的,故可以同时访问多个站点。
本实施例中,采用多线程抓取页面,但是有些操作是串行的(serial),另一些可以并行(parallel)。如表1中的主要模块和线程:更新进程需要和url server及爬虫crawler通信。更新进程启动时会检查是否有repositoryl(文档库)文件系统(即32条中描述的文件系统包含的所有文件和Berkeley DB(伯克利库));如果没有则创建一个新的FS(文件系统)系统。文件和BDB(伯克利库)库列表如表1:
表1:
名称 | 类型 | 说明 |
docs.dat | Binary file(二进制文件) | 文档数据块 |
occupi ed.bdbB | Berkeley DB B+tree(伯克利库B+树) | 占用块列表 |
free.bdbB | Berkeley DB B+tree(伯克利库B+树) | 空闲块列表和空闲docID(文档编号)列表 |
urls.bdbB | Berkeley DB B+tree(伯克利库B+树) | url→off,docid(偏移、文档编号)映射 |
更新进程一部分是接收爬虫程序送来的新抓取文档的线程组。该线程组接收到新的文档,申请空闲块(free blocks)(申请过程是互斥的),并把文档存入申请到的块中。该线程组有一个连接,建立线程负责接收新的连接,一旦有新连接,即把这个连接分配到处理线程。处理线程可以有多个(在配置文件中配置数量),每个可以处理多个连接(配置文件中配置最大数量)。更新进程的另外一部分是向统一资源定位服务器(url server)传送所获得的文档的统一资源定位(url)的线程组,也分为连接建立线程和处理线程。本实施例中的爬虫程序1012的每个线程可以分别定义刷新周期,根据网络站点、栏目的更新速度灵活确定刷新时间。但所有线程使用统一的调度程序,以防止重复抓取页面。
所述的自动搜集和预处理模块101,在本实施例中,使用固定文档格式,即根据每篇文档的格式解析相应的元素。因为在同一个网络站点内部,文档的各式基本都是相同的。所以每一个网络站点只需要一个解析程序。但,实际的解析程序并不完全固定文档格式,还是需要一些灵活性的。因为要处理一些变异格式的文档和格式错误的文档。
因为原始文档在解析之前,需要进行编码。所以在本实施例中,上述的程序模块1012所抓取的全部原始文档通过编码转换模块1014将所有编码都转换成Unicode格式,则所有的处理也都用Unicode格式。通过编码转换后的文档送到格式化模块1015中进行格式化;
从原始文档解析出的各个文档元素以后,文档采用Dublin Core的格式保存。DublinCore是根据国际组织“Dublin Core Metadata Initiative”制定的用于标识电子资源的一种简要目录模式。它使用15个数据(metadata)来描述一篇文档。在本实施例中使用下面几项:名称(title):使用文档的标题;创作者(creator):文档的编写者;时间(date);发布时间;类型(type):分类以后填入的内容;标识(identifier):URL(统一资源定位);来源(source):刊登该文档的网络站点,语言(language):文档使用的语言;相关资源(relation):与该文档相关的文档。通过上述的操作,就得到了格式化后的文档。
图3是索引模块102的结构示意图,如图3所示,索引模块102包括:与自动搜集和预处理模块中的格式化文档模块1016相联接的用于对从格式化文档模块1016中所接收到格式化的文档进行分词的分词模块1021,与分词模块1021联接的用于建立倒排索引数据的倒排索引模块1022,与倒排索引模块1022联接的用于将倒排索引数据进行压缩的压缩模块1023,用于存储经过压缩模块1023压缩后的倒排索引数据的文档数据库模块1024。
如图3所述的结构,从格式化文档模块1016送过来的文档由分词模块1021进行分词。对于英文(和其他西方语种)的分词因为英文是以空格作为词的间隔,故不需特殊处理,分词比较简单;中文的分词因为汉语是字的序列,词之间没有间隔标记,使得词的界定缺乏自然标准。所以在本实施例中,中文的分词采用简单实用和分词速度快的基于词表的最大匹配算法。使用了一个120000大小的词表作为分词词表,再加上21000个的单字,共140000左右的词项。
在本实施例中,每一个词和每一篇文档都使用一个32位数字作为它们的标识(ID),使用数字表示词和文档的好处是可以有效地压缩空间,提高检索速度。32位的数字可以表示40亿的词和文档,这在平时的应用中已经足够。
分完词后由倒排索引模块1022作倒排索引,即以词为索引项,建立每个词出现的文档、在文档中的位置、词的修饰信息的数据库。倒排索引是搜索技术的基础。倒排索引由词列表(term list)和记录列表(posting list)两部分组成。。词列表就是分词以后产生的每一个独立的词。在本实施例中,记录列表中记录的是这个词在哪些文档里出现,在文档中的位置,词的修饰特征(比如出现在标题中、出现在超连接中、特别字体、加大字号、加重等)。记录词在文档中出现的位置就可以做词组查询和按照词的接近性(proximity)排序。词的修饰特征用于对文档查询结果的排序。在本实施例中采用的倒排索引格式如表2所示。
表2;
Inverted index
上表2中相对应的中文为:
名称 | 字节长度 | 描述 |
字符编号 | 3,4,5 | 无 |
文档编号 | 4 | 无 |
偏移 | 4+4位或2位 | 索引文件偏移 |
数据大小 | 1+4位或2位 | 索引文件中的数据大小 |
文档编号差值 | 1,2,3,4 | 文档编号差值 |
词频 | 1,2,3 | 词频 |
位置偏移 | 2,3,4 | 词位置的偏移量 |
在本实施例中,索引的组织方式为B+树。倒排索引数据库使用Berkeley DB管理数据。Berkeley DB是一套管理数据的库函数,可以使用B+树、散列(hash)、顺序等索引模式存储key/data对,支持高速地添加、删除、修改、查询等操作。在本实施例中,对BerkeleyDB的代码进行了一些修改,使它能够有比较高的空间利用率和高效地支持长的data字段。
因为倒排索引的记录列表比较大,压缩存储可以显著提高效率。为了减小倒排索引数据库的大小,在本实施例中,由压缩模块1023将倒排索引数据进行压缩。压缩以后的倒排索引数据库大小只有原始数据库的30%-40%。虽然经压缩以后,查询时需要对数据做解压缩,但是因为数据库的减小,减少了大量磁盘I/O的操作,使得查询操作效率仍有显著地提高。
在本实施例中,压缩模块1023所使用的压缩算法是使用可变长的整数和使用文档ID的差值来记录文档ID,并且所有的整数是字节对齐的(相对应的压缩算法还有位对齐的)。
所述的词列表项(term)的格式:在本实施例中,词列表项使用wordID加docID1的形式。wordID就是分词以后赋予每个词的整数标识。docID1就是这个词出现的第一个文档的标识。在词列表中保存第一个文档的docID1,是为了在记录列表(posting list)中使用docID和docID1的差值来表示文档。因为在本实施例中,记录列表是按照docID的升序排序,使用docID的差值比直接使用docID小,有利于压缩。
表3:
1.docID加cnt是字节对齐的,其中cnt固定占1字节
2.每一项Offset加modifier是字节对齐的,其中modifier占1字节
倒排索引压缩存储方法
上表3中:
docID:文档编号,cnt:计数;offset:偏移:modifier:修饰符;variable bytes:变长字节;bits:位
记录列表(posting list)的格式:·压缩主要针对记录列表进行。记录列表中的每个记录有三个项:docID、offset(s)+modifier(s)(文档编号、偏移+修饰符)。为了在一个docID下记录多个offset+modifier(偏移+修饰符),增加一个cnt(计数)字段,是offset+modifier的计数。一个记录项的格式如表3所示。
整数值的表示采用可变长整数的形式。根据数值的大小确定需要多少个字节来存储。每个字节的低7位表示整数值,第8位表示下一个字节是否还是这个整数的一部分。所以1个字节可以表示整数的范围是0-127(20-27-1),2字节表示的整数范围是128-16,383(27-214-1)。其中docID使用差值。
在本实施例中,使用的字节对齐压缩算法比位对齐的压缩算法压缩率低一些,但是由于解压缩的算法比位对齐解压缩算法简单得多,查询速度比位压缩快。
对于所述的Berkeley DB的修改:
在本实施例中,使用Berkeley DB来存放索引等数据。但是使用btree数据库时,Berkeley DB能够存放在leaf page上的最大的item太小。它的计算大致是这样:maximum_size=page_size/(minimum_keys*2),例如pagesize为4096,minimum_keys为2(最小值就是2),key或data最大大约为1K。如果大于1K,就要把item放进overflowpage。如果要存放4K的data,则需要页面大小至少为16K。使用16K的页面似乎太大了。
Berkeley db之所以这么做是为了在一个leaf page上至少放两个key/data pairs。即四个item。按每个item都达到最大值计算,每个就只能是一个页面大小的1/4。这实际是一种满足通用需求的情况,即key和data都可以是任意大小。但是在本实施例中数据的情况下,key都很小,一般小于16字节,data可能很大,并且需要data尽可能大。所以可以定制一个适应本实施例的实际要求的Berkeley db,以达到优化的目的。
在做了上述的改造以后,bdb确实可以接受4000bytes的data。但在测试程序中往数据库中添加数据时,page fill factor不高,只有50%左右。通过插入调试信息,发现每插入一个数据都会导致一个leaf page的split。插入的数据是递增序的。分析Berkeley db代码后,发现原因如下:
在一个leaf page满了以后,新来的数据要插入到这个页面,页面需要分裂成left page和right page,left page里的数据都小于right page的数据。依据新来的数据要插入到left还是right,取决于分裂后那个页面小。如果新数据大于或者小于原页面中所有数据,分裂时的原则是新数据写入的那个页面里只保留一个原来的key/data pair,比如新数据大于原有数据,需要写入right page,原来页面里有10个key/data pairs,则分裂后left∶right是9∶1的关系。这样就可以解释50%左右的page fill factor。在data大小为4000时,一个页面只能放2个key/data pairs,使用递增序插入数据,插入2个数据后,第3个数据页面要分裂,分裂后left 1个数据,right 1一个数据,第3个数据插入到right,这样right又是2个数据了。第4个导致right又分裂,一直重复下去。所有的新数据都导致页面分裂。并且left page都只填了一半,page fill factor在50%左右。所以只有data大小为2700左右时,一个页面能放3个pairs,使用递增序添加数据,才会提升page fillfactor。大于2800以后,每个页面都只能放2个pairs。
以上的结果是建立在以递增序插入的情况下,实际索引建立的时候未必是递增序,所以page fill factor可能会上升的。
在上述的分词中,本发明使用完整子串的发现算法来发现新词,可以动态地向词表中添加新词。完整子串分为左完整和右完整两部分。定义分别为:
设文档T的一个子字符串S在k(k>=2)个不同位置p1,p2,……,pk出现,记为S(p1),S(p2),……,S(pk),若至少存在两次出现S(pi)和S(pj),(1<i<j<k),使得S(pi)和S(pj)各自前面(左),或者有两个不同的字符,或者一个有字符而另一个没有字符,或者都没有字符,则称S是左完整的。相应的如果不同出现在后面(右),则称S是右完整的。如果一个字符串即是左完整的也是右完整的,则称该字符串为完整子串。
完整子串实际上就是词组。使用完整子串可以发现未定义过的词组。本发明使用完整子串发现新词,并把新词加入词表。发现完整子串使用了后缀树算法。并不是所有的完整子串都是新词,在完整子串达到一定频率时,才能算为新词。所以新词的发现还遵循以下的重要性判别:
设文档T的一个子字符串S,其出现频率为f(S),长度为|S|,则其重要程度为se(S)=f(s)*g(|S|)。其中g(x)是字符串长度的影响因子,1<=x<=8时,g(x)=log(x),x>8时,g(x)=3。
上述g(x)实际上反映字符串长度对其重要性的价值,随着字符串长度增加,其重要程度(表达能力)增加,但是其增长速度在变慢。只有在一个字符串是完整子串,并且其重要程度se(S)达到一定阈值时,才是一个新词。
图4是自动分类聚类模块103的结构示意图,如图4所示,自动分类聚类模块103包括:用于筛选、去除已格式化文档中停用词的筛选模块1031,用于经过筛选模块1031筛选后的的文档进行向量化的向量化模块1032,用于对经过向量化模块1032向量化后的特征向量进行筛选的向量筛选模块1033,用于经过对向量筛选模块1033筛选后的向量化文档进行分类和对于用户查询结果进行聚类的分类聚类模块1034,用于接收经过分类聚类模块1034分类后的向量化格式化文档的分类格式化文档模块1035,用于存储分类格式化文档模块1035所接收到的分类的向量化的格式化文档的文档库模块1036。
如上述图4的结构,自动分类聚类模块103是本发明搜索引擎的关键,分类效果的好坏,直接导致自动新闻系统的效果。在本实施例中,采用了距离向量、朴素贝叶斯(Naive Bayes)和支持向量机(SVM)的分类算法,在小样本的训练下,三种分类算法都可以达到90%左右的查准率。在拿到大的训练样本以后,还可以有更高的查准率。可以满足自动新闻系统的要求。
自动分类聚类模块103首先由筛选模块1031对格式化文档模块1016中的格式化文档进行筛选,去除在分类中不起作用的词,即去除停用词,构建停用词词表;经过筛选模块1031筛选后的的文档送到向量化模块1032进行向量化,用向量空间模型来表示文档,选择词作为特征向量,以词作为文档的特征向量;特征向量的值使用TF-IDF函数,公式为:
其中,W(t,d)为词t在文本d中的特征向量的值,tf(t,d)为词t在文本d中的词频,N为训练文本的总数,nt为训练文档集中出现t的文档数量,分母为归一化因子;
然后,向量筛选模块1033对文档向量化以后,根据停用词词表对特征向量进行向量筛选,去除在分类中不起作用的词。因为在特征向量的抽取过程中,必需要做一些筛选。首先是去除停用词。停用词是在分类中不起作用的词汇。这些词汇在相应的语言中不能表达含义。比如一些副词、语气词、数量词等。如中文中的“这、呢、个”和英语中的“a、the、this”。由于不表达具体的含义,在文档分类中不起作用,保留这些词还会增加向量空间的维数和减小文档之间的差异性。中文去除停用词可以使用把这些词直接从词表中去除的办法。在本实施例中的中文停用词表包含7000多个停用词。
其次是数字、人名、时间等词,在汉语处理中,由于采用基于词表的分词算法,这些词一般不在词表中,所以自然就被剔除。英语中的这些词可以加入停用词表。英语词的处理还包括词根化(word stem),因为英文的单词有复数、时态、词性的变化,这些变化词性的单词在表达含义方面具有基本相同的效果,所以可以把这些变化的单词使用同一个词根来表示。
对特征向量的筛选需要进一步剔除表现力差的词汇。这样可以有效地减小向量的维数,增强类别之间的差异。在本实施例中,采用词计数法,即统计一个词在一个类别中的计数,在计数小于一个定义的数值时就剔除这个词。常用的其他算法还包括信息增益、互信息、词熵等。
经过特征向量筛选后的向量化文档由分类聚类模块1034进行分类和聚类;分类格式化文档模块1035接收到经过分类聚类模块1034分类后的向量化格式化文档后,将所接收到的分类的向量化的格式化文档存储于文档库模块1036中。
图5为图4中分类聚类模块1034的结构示意图。如图5所示,分类聚类模块1034包括:用于存储已分类的提供训练所用文档集的训练文档库子模块1034a,用于对训练文档库子模块1034a内的文档进行训练的训练运行子模块1034b,用于存储由训练运行子模块1034b训练后获得的具有特征向量值文档的特征向量模式库子模块1034c,用于接收新文档和用户查询信息的接收信息子模块1034e,用于对接收信息子模块1035e接收到的新文档进行分类计算和对接收到的用户查询信息进行聚类计算的分类聚类子模块1034d,用于接收经过分类聚类子模块1034d分类后文档的分类文档子模块1034f。
要使分类获得自动分类功能,首先要对算法进行训练。在本实施例中,采用距离向量、朴素贝叶斯(Naive Bayes)和支持向量机(SVM)的分类算法。在训练文档库子模块1034a中存储的是一批已分类好的文档集,训练运行子模块1034b对训练文档库子模块1035a内的文档进行训练;其训练过程就是根据训练文档库子模块1034a中文档计算每个类别下的特征向量的值,本发明使用归一化的词频作为特征向量的值。经过训练以后,将其获得的具有特征向量值的文档存入特征向量模式库子模块1034c中。接收信息子模块1034e接收到新的文档或用户查询信息以后,经过分类聚类子模块1034d进行分类计算和聚类计算,进行分词、提取特征向量的处理后,根据特征模式库子模块1034c中的文档计算特征向量属于各个类别的几率,比较新文档数据每个类的几率,将新文档分到几率最大的类别,再将分类后的文档送入分类文档子模块1034f中,这样就实现了自动分类和聚类。
所述的分类聚类子模块1035d中的分类算法首先要把文档转换成计算机可处理的格式。在本实施例中,采用向量空间模型(VSM)。向量空间模型是目前广泛采用的文档表示法,这个模型根据“贝叶斯假设”,假定组成文本的字或词在确定文本类别的作用上相互独立。这样,可以就使用文本中出现的字或词的集合来代替文本。虽然这是在这个假设的前提下,会丢失部分文档内容的信息,但可以使文档的表示和处理形式化,在文本分类中取得较好的效果。
向量空间模型使用词作为文档的特征向量,以词在文档中的词频作为向量的值。使用特征向量表示文档以后,就可以开始训练。因为向量距离、朴素贝叶斯和支持向量机分类都使用已分类好的样本(语料库)。进行训练以后才能进行正确的分类。所以需要一批已分类好的文档来完成对算法的训练。经过训练,产生每个类别的特征向量模式库,新的文档需要依赖这个模式库才能进行正确的分类(在本实施例中,已经使用一些英文的训练样本进行了训练和分类测试)。
算法的训练过程就是根据分类好的语料库计算每个类别下的特征向量的值。在本实施例中,使用归一化的词频作为特征向量的值。训练完以后产生类别模式数据库。该数据库采用散列方式存储,以便于快速查询。
对新的文档的分类使用训练产生的类别模式数据库和分类算法实现。在本实施例中,主要测试了向量距离分类算法、朴素贝叶斯分类算法和支持向量机分类算法。分类好的文档仍旧使用Dublin core格式化文档存储,添加类型(type)字段。
分类聚类子模块1035d还完成相似性计算功能。确定与本文档相关的文档。相似性计算采用简单向量距离算法(或称最近邻居算法)。计算出的相关文档填入格式化文档的相关资源(relation)字段。相似性计算结果如果发现两篇文档“非常近似”(定义一个阈值,该值需要根据实际计算结果确定),进入相同文档确认流程。该过程确定这两篇是否是同一篇文章的两个版本(两个版本的差异主要是有格式变化造成的)。在本实施例中,使用比较简单的标题比较的算法。也可以采用其他算法。
分类聚类子模块1034d对查询结果进行聚类。
在本实施例中,用向量空间模型来表示文档。选择词作为特征向量,在多数算法中特征向量的值使用TF-IDF函数。TF(Term Frequency)词频是词在文挡中出现的次数,IDF(InverseDocument Frequency)反向文档频率含义是所有文档中出现了该特征向量的文档的比例的倒数。TF-IDF刻画了词t区分文档内容属性的能力,一个词在文档集中出现的范围越广(DF),说明它区分文档属性的能力低;相反,词在一个特定文档存在多种常用的TF-IDF公式,所使用的公式如上述。在朴素贝叶斯算法中,特征向量的值只使用词频(TF)。
所述训练运行子模块1034b算法的训练是采用训练文档库子模块1034a内的已标注好类别的文档集。每一种算法的训练过程不同。下面是朴素贝叶斯分类的运算过程:
一、获取分类好的训练文档以后,对每个类别分别计算特征词属于该类别的几率。在贝叶斯模型中称为先验概率:P(Wm|Ck)。在这个计算中,在本实施例中,使用特征词的词频作为特征向量的数值。计算公式采用下面的公式:
C是一个类别的文档集合,|C|为该类别的全部训练文档数量。W为特征向量集合,∑i=1 |C|N(Wm,di)就是Wm这个向量在该类中的词频和,∑j=1 |W|∑i=1 |C|N(Wj,di)是该类所有特征向量的词频和。
经过训练以后,得到特征向量模式库子模块。这个子模块库是分类需要用到的。
二、新的文档到来以后,经过分词、提取特征向量的处理后,使用贝叶斯公式确定该文档属于各个类别的几率。这在贝叶斯模型中称为后验概率。在本实施例中,使用下面的公式来计算新文档属于每个类别的概率:
三、比较新文档数据每个类的几率,将新文档分到几率最大的类别。
分类聚类子模块1034d可对查询结果进行自动聚类。聚类是一种无监督的学习,本发明在查询时动态聚类相比预处理的静态聚类,可以提供更高的准确性,因为动态聚类的数据集限定在更精确的范围(包含用户查询词的文档)。
查询时聚类需要聚类算法的性能优异,最好能达到线性时间复杂度。在本实施例中,采用的聚类算法是基于关键词短语发现的层次聚类。将完整子串作为关键词短语,使用后缀树发现完整子串。后缀树是一种支持高效字符串查询和匹配的数据结构。一个具有m个词的字符串S的后缀树T,就是一个包含一个根节点的有向树,该树恰好带有m个叶子,这些叶子被赋予从1到m的标号。每一个内部节点,除了根节点以外,都至少有两个子节点,而且每条边都用S的一个非空子串来标识。出自同一节点的任意两条边的标识不会以相同的词开始。后缀树的关键特征是:对于任何叶子i,从根节点到该叶子所经历的边的所有标识串联起来后恰好拼出S的从i位置开始的后缀,即S[i,…,m]。树中节点的标识被定义为从根到该节点的所有边的标识的串联。图7是一个后缀树的结构式,即为”cat ate cheese”,”mouse ate cheese too”,”cat ate mouse too”三个字符串的后缀树。
在本实施例中,使用以单词为节点的后缀树表示。这与一般的以字符为节点的表示是不同的,可以有效地减小空间,加快树的构建和查找速度。
建立后缀树以后可以用后缀树发现完整子串。可以发现后缀树的非叶子节点就是完整子串(图7中a,b,c,d,e,f)。
抽取出完整子串以后,接下来对文档进行聚类。聚类分为两步。
第一步,确定基类。基类是一些具有共同完整子串文档的集合。一旦一个完整子串出现在两个以上的文档,就定义这些文档为一个记录。对于每一个基类,根据它包含的网页特征的数量以及组成短语的词的个数赋予一定的权值。但是,在停用词表中出现的词或者过于高频词或者低频词对基类的权值没有贡献。基类的权值计算公式为:
s(B)=|B|*g(|P|)
|B|是基类B包含的文档数量。|P|是该完整子串中非停用词的数量。对所有的语言,我们使用一个停用词表来过滤无含义的词。g(x)的定义与新词发现算法中的相同。
在本实施例中,使用基类权值对所有基类进行排序,只保留部分基类(在本实施例中,定义保留70%的基类)。
第二步,层次聚类。在本实施例中,采用自底向上的方法组织各个基类,构成层次关系。设有基类X和Y,|X∩Y|表示X和Y共同包含的文档数量,|X+Y|表示所有X和Y中文档数量之和(去除重复文档)。若X和Y的重合度|X∩Y|/|X+Y|高于某个阈值(目前定义为0.5),则X、Y合并成几个类。若X和Y的隶属度|X∩Y|/|X|高于某个阈值(目前定义为0.5),则X成为Y的一个子类。在本实施例中,,实现三个层次的聚类就有较好的效果。
用类程序语言描述为:if(|X∩Y|/|X+Y|>0.5){
X和Y合并成一个类;
}
else {
if(|X|>|Y|){
if(|X∩Y|/|Y|>0.5){
X为Y的子类;
}
else if(|X∩Y|/|X|>0.5){
Y为X的子类;
}
}
}
图6为检索显示模块201的流程图,检索显示模块201根据格式化文档数据库中的文档信息动态显示所要查询的文档。检索显示模块201的刷新周期可以根据爬虫程序的抓取周期确定。如图6所示,首先用户端2用户输入查询信息2011,服务器对用户输入进行分词2012,根据分词后的关键词或其组合按倒索引查询索引库2013,判断查询是否有结果2014,如果没有结果,返回出错信息2015,如果有结果,则得到结果文档集2016,通过自动分类聚类模块的聚类功能对结果文档聚类2017,最后返回显示结果文档集的摘要,摘要按照类别分栏目显示,显示的内容包括标题、编写者、来源、时间、超连接(URL)、相关新闻、摘要等。使用文档开始的100个字作为文档摘要。
如前所属的聚类功能,在本发明中在查询时实现了动态聚类。动态聚类可以提供更高的准确性,因为聚类的数据集限定在更精确的范围(包含用户查询词的文档)。本发明采用的聚类算法是基于关键词短语发现的层次聚类,把完整子串作为关键词短语,使用后缀树发现完整子串。通过后缀树算法提取完整子串以后,接下来对文档进行聚类,具体地聚类算法如上述。
Claims (6)
1.一种具有自动分类功能的搜索引擎,包括:置于服务器端的:
自动搜集和预处理模块,用于自动从网络上搜集文档,进行预处理,并将文档转化为计算机可读方式和实时进行文档更新;
索引模块,用于对自动搜集和预处理模块处理后的格式化文档进行分词,并分别给分词后的词和文档赋予词标识和文档标识,再根据词标识和文档标识建立文档索引库;
置于用户端的:
检索显示模块,用于根据用户输入的关键词从服务器端的文档索引库中搜索与关键词相匹配的文档;
其特征在于包括:
置于服务器端的自动分类聚类模块,用于对已经过自动搜集和预处理模块处理后的格式化文档进行分类训练,训练后自动进行对格式化文档分类,并根据用户输入的关键词从服务器端的文档索引库中搜索与关键词相匹配的文档进行动态聚类。
2.根据权利要求1所述的具有自动分类功能的搜索引擎,其特征在于所述的自动分类聚类模块包括:用于筛选、去除已格式化文档中停用词的筛选模块,用于对经过筛选模块筛选后的的文档进行向量化的向量化模块,用于对经过向量化模块向量化后的向量化文档进行筛选的向量筛选模块,用于对经过向量筛选模块筛选后的向量化文档进行分类和对用户的查询进行聚类的分类聚类模块,用于接收经过分类聚类模块分类后的向量化格式化文档的分类格式化文档模块,用于存储分类格式化文档模块所接收到的分类后的向量化格式化文档的文档库模块。
3.根据权利要求2所述的具有自动分类功能的搜索引擎,其特征在于所述的分类聚类模块包括:用于存储已分类的提供训练所用文档集的训练文档库子模块,用于对训练文档库子模块内的文档进行分类训练的训练运行子模块,用于存储由训练运行子模块分类训练后获得的具有特征向量值文档的特征向量模式库子模块,用于接收新文档和查询信息的接收信息子模块,用于对接收信息子模块接收到的新文档进行分类计算和对接收到的查询信息进行聚类计算的分类聚类子模块,用于接收经过分类聚类子模块分类后文档的分类文档子模块。
4.根据权利要求1所述的具有自动分类功能的搜索引擎,其特征在于所述的自动搜集和预处理模块包括:联接于网络上的网络站点模块,用于从网络站点模块上抓取文档的程序模块,用于接收程序模块所抓取文档的原始文档模块,用于将原始文档模块所接收到的文档进行编码全部转换成所要求格式的格式化模块,用于接收经过格式化模块格式化后的格式化文档的格式化文档模块。
5.根据权利要求4所述的具有自动分类功能的搜索引擎,其特征在于所述的程序模块是多进程,多线程的递归抓取页面的爬虫程序模块。
6.根据权利要求1所述的具有自动分类功能的搜索引擎,其特征在于所述的索引模块包括:与自动搜集和预处理模块中的格式化文档模块相联接的用于将格式化文档模块中接收到格式化的文档进行分词的分词模块,与分词模块联接的用于建立倒排索引数据的倒排索引模块,与倒排索引模块联接的用于将倒排索引数据进行压缩的压缩模块,用于存储经过压缩模块压缩后的倒排索引数据的数据库模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100262527A CN100401300C (zh) | 2006-04-29 | 2006-04-29 | 具有自动分类功能的搜索引擎 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100262527A CN100401300C (zh) | 2006-04-29 | 2006-04-29 | 具有自动分类功能的搜索引擎 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1873642A CN1873642A (zh) | 2006-12-06 |
CN100401300C true CN100401300C (zh) | 2008-07-09 |
Family
ID=37484120
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100262527A Active CN100401300C (zh) | 2006-04-29 | 2006-04-29 | 具有自动分类功能的搜索引擎 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100401300C (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101226523B (zh) * | 2007-01-17 | 2012-09-05 | 国际商业机器公司 | 数据概况分析方法和系统 |
CN101315624B (zh) * | 2007-05-29 | 2015-11-25 | 阿里巴巴集团控股有限公司 | 一种文本主题推荐的方法和装置 |
CN101082936A (zh) * | 2007-06-29 | 2007-12-05 | 中兴通讯股份有限公司 | 数据查询系统及方法 |
US8732621B2 (en) | 2008-01-23 | 2014-05-20 | Senovation, L.L.C. | Method and apparatus for information visualized expression, and visualized human computer interactive expression interface thereof |
US9047330B2 (en) * | 2008-10-27 | 2015-06-02 | Ianywhere Solutions, Inc. | Index compression in databases |
CN101650741B (zh) * | 2009-08-27 | 2011-02-09 | 中国电信股份有限公司 | 一种分布式全文检索的索引实时更新的方法和系统 |
CN102103604B (zh) * | 2009-12-18 | 2012-12-19 | 百度在线网络技术(北京)有限公司 | 检索词核心权重确定方法和装置 |
CN102163199A (zh) * | 2010-02-24 | 2011-08-24 | 富士通株式会社 | 构造索引库的方法和设备以及查询方法 |
CN102375835B (zh) * | 2010-08-17 | 2016-06-29 | 深圳市世纪光速信息技术有限公司 | 一种信息搜索系统和方法 |
CN102567405A (zh) * | 2010-12-31 | 2012-07-11 | 北京安码科技有限公司 | 一种基于改进的文本空间向量表示的热点发现方法 |
CN102033965A (zh) * | 2011-01-17 | 2011-04-27 | 安徽海汇金融投资集团有限公司 | 一种基于分类模型的数据分类方法及系统 |
CN102722499B (zh) * | 2011-03-31 | 2015-07-01 | 北京百度网讯科技有限公司 | 搜索引擎及其实现方法 |
CN104978408A (zh) * | 2015-08-05 | 2015-10-14 | 许昌学院 | 基于Berkeley DB数据库的主题爬虫系统 |
CN105404677B (zh) * | 2015-11-20 | 2018-12-18 | 四川神琥科技有限公司 | 一种基于树形结构的检索方法 |
CN105426490B (zh) * | 2015-11-20 | 2019-03-26 | 四川神琥科技有限公司 | 一种基于树形结构的索引方法 |
CN105488114B (zh) * | 2015-11-20 | 2019-02-19 | 四川神琥科技有限公司 | 一种基于树形结构的排序方法 |
CN107992633B (zh) * | 2018-01-09 | 2021-07-27 | 国网福建省电力有限公司 | 基于关键词特征的电子文档自动分类方法及系统 |
CN108897831A (zh) * | 2018-06-22 | 2018-11-27 | 济源职业技术学院 | 一种计算机人工智能信息筛选系统 |
CN110210546B (zh) * | 2019-05-24 | 2022-05-31 | 江西理工大学 | 一种基于图像处理的书籍自动归类方法 |
CN112732946B (zh) * | 2019-10-12 | 2023-04-18 | 四川医枢科技有限责任公司 | 一种医学文献的模块化数据分析和数据库建立方法 |
CN110750696A (zh) * | 2019-10-29 | 2020-02-04 | 贵州电网有限责任公司 | 一种文档聚类检索系统 |
CN111931502B (zh) * | 2020-10-10 | 2021-02-19 | 成都数联铭品科技有限公司 | 一种分词处理方法及系统、分词搜索方法 |
CN116955363B (zh) * | 2023-09-21 | 2023-12-26 | 北京四维纵横数据技术有限公司 | 无模式数据创建索引方法、装置、计算机设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1229218A (zh) * | 1998-03-17 | 1999-09-22 | 松下电器产业株式会社 | 信息检索装置和方法 |
CN1317114A (zh) * | 1998-07-10 | 2001-10-10 | 快速检索及传递公司 | 一种用于数据检索的搜索系统和方法及其在搜索引擎中的应用 |
US6578047B1 (en) * | 1999-03-25 | 2003-06-10 | Sony Corporation | System for searching a data base for information associated with broadcast segments based upon broadcast time |
-
2006
- 2006-04-29 CN CNB2006100262527A patent/CN100401300C/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1229218A (zh) * | 1998-03-17 | 1999-09-22 | 松下电器产业株式会社 | 信息检索装置和方法 |
CN1317114A (zh) * | 1998-07-10 | 2001-10-10 | 快速检索及传递公司 | 一种用于数据检索的搜索系统和方法及其在搜索引擎中的应用 |
US6578047B1 (en) * | 1999-03-25 | 2003-06-10 | Sony Corporation | System for searching a data base for information associated with broadcast segments based upon broadcast time |
Also Published As
Publication number | Publication date |
---|---|
CN1873642A (zh) | 2006-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100401300C (zh) | 具有自动分类功能的搜索引擎 | |
CN109492077B (zh) | 基于知识图谱的石化领域问答方法及系统 | |
CN109992645B (zh) | 一种基于文本数据的资料管理系统及方法 | |
CN101593200B (zh) | 基于关键词频度分析的中文网页分类方法 | |
CN101079025B (zh) | 一种文档相关度计算系统和方法 | |
CN102207948B (zh) | 一种事件陈述句素材库的生成方法 | |
CN109271477A (zh) | 一种借助互联网构建分类语料库的方法及系统 | |
CN101620608A (zh) | 信息采集方法及系统 | |
CN101079024A (zh) | 一种专业词表动态生成系统和方法 | |
US20110087669A1 (en) | Composite locality sensitive hash based processing of documents | |
CN103617174A (zh) | 一种基于云计算的分布式搜索方法 | |
CN103049435A (zh) | 文本细粒度情感分析方法及装置 | |
CN101127042A (zh) | 一种基于语言模型的情感分类方法 | |
CN105608232A (zh) | 一种基于图形数据库的bug知识建模方法 | |
CN102789464A (zh) | 基于语意识别的自然语言处理方法、装置和系统 | |
CN101201838A (zh) | 利用词组索引技术对基于关键词索引的搜索引擎进行改进的方法 | |
CN100498783C (zh) | 一种支持全文检索系统同时检索数值类型数据域的方法 | |
CN101706790A (zh) | 搜索引擎中包含web对象的聚类方法 | |
CN110990676A (zh) | 一种社交媒体热点主题提取方法与系统 | |
CN115563313A (zh) | 基于知识图谱的文献书籍语义检索系统 | |
CN111859070A (zh) | 一种海量互联网新闻清洗系统 | |
CN111651675B (zh) | 一种基于ucl的用户兴趣主题挖掘方法及装置 | |
CN115827862A (zh) | 一种多元费用凭证数据关联采集方法 | |
CN110245275B (zh) | 一种大规模相似新闻标题快速归一化方法 | |
CN111401056A (zh) | 一种从多类文本中提取关键词的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20061206 Assignee: Zhejiang Jiuzhou cloud Mdt InfoTech Ltd Assignor: Shiji Internet Information System Co., Ltd., Shanghai Contract record no.: 2015310000089 Denomination of invention: Searching engine with automating sorting function Granted publication date: 20080709 License type: Common License Record date: 20150825 |
|
LICC | Enforcement, change and cancellation of record of contracts on the licence for exploitation of a patent or utility model |