后缀树及其算法在文本挖掘中的应用研究

后缀树及其算法在文本挖掘中的应用研究
李海涛
 ( 中国科学技术信息研究所,   北京 100038)
 
【摘要】 本文首先引入了一种新颖的数据结构——后缀树的相关概念,在此基础上,对其特点和算法的构建进行了论述,并探讨了后缀树及其算法在中文分词、关联分析中的应用,然后以中文文档聚类为例,结合中文需要分词的特点,设计出了基于后缀树聚类算法的聚类系统结构。
【关键词】短语、短语串、后缀树、关联分析、聚类
The Study of Suffix Tree and its Arithmetic’s Application in Text Mining
Li haitao
(Institute of Scientific & Technical Information of China, Beijing 100038)
 
    【 Abstract】This paper introduces a novel data structure — suffix tree conception, and then discusses its particularity and its Arithmetic’s constructing process, discusses suffix tree and its Arithmetic’s Application in Chinese word segmentation and association analyses, at last takes the Chinese document clustering as an example ,considering the need of Chinese word segmentation, designs the clustering system’s structure based on suffix tree clustering Arithmetic.
    【 Keywords】phrase, phrase cluster, suffix tree,  association analyses, clustering
 
1. 引言
存储信息使用最多的是文本,事实上,最近研究表明公司信息有80%包含在文本文档中,所以文本挖掘被认为比数据挖掘具有更高的商业潜力。文本挖掘是抽取有效、新颖、有用、可理解的、散布在文本文件中的有价值知识,并利用这些知识更好地组织信息的过程。
<script type="text/javascript" src="http://ads.adbrite.com/mb/text_group.php?sid=170596&col=3&br=1"></script>

文本挖掘的主要研究内容包括关联分析、文本分类、文本聚类等。
关联分析是首先收集经常一起出现的关键字、词汇或短语,然后找出其关联和相互关系[1]。在这里笔者将其分为字、词和短语三种级别的关联分析。
文本分类是按照预先定义的主题类别,为文档集合中的每个文档确定一个类别。这样用户不但能够方便地浏览文档,而且可以限制搜索范围来使文档的搜索更容易、快捷。
文本聚类的目标和文本分类是一样的,只是实现的方法不同,文本聚类是无教师的机器学习,在文档归类之前没有定义好的类可供选择,在文本聚类时,将所有类型接近的文档归为一类,使类型相同的文档尽量归为一类,类型不相同的尽量隔离开来,聚类的标准可以是文本的属性,也可以是文本的内容。
 
2. 后缀树相关概念
2.1 短语
文中短语是一个具有一个或者更多的词的有序序列,一个短语可能是任意的长度,但该序列不会穿过短语边界。短语边界是文档解析器识别特殊语法记号时插入到短语间的,这些记号可以是标点符号标记 ( 句号‘。’逗号‘,’分号‘;’问号‘?’等 ) 或者 HTML 标签 ( 例如 <p>, <br>, <li>, <td> ) ,文档的开头和结尾也被认为是短语边界 [2]
2.2 短语串
一个短语串就是一个至少被两个文档共享的短语和包含该短语的所有文档。一个最大短语串必须满足在不减少文档的数量的情况下,该短语串的短语不能用任何该语言类型的词来扩充。
2.3 后缀树
一个后缀树是一种数据结构,它支持有效的字符串匹配和查询。
一个具有m个词的字符串S的后缀树T,就是一个包含一个根节点的有向树,该树恰好带有m个叶子,这些叶子被赋予从1到m的标号。每一个内部节点,除了根节点以外,都至少有两个子节点,而且每条边都用S的一个非空子串来标识。出自同一节点的任意两条边的标识不会以相同的词开始。后缀树的关键特征是:对于任何叶子i,从根节点到该叶子所经历的边的所有标识串联起来后恰好拼出S的从i位置开始的后缀,即S[i,…,m]。 树中节点的标识被定义为从根到该节点的所有边的标识的串联。
        1 示意了字符串 "I know you know I know " 的后缀树。 内部节点用圆来表示,叶子用矩形来表示 , 该例子中有六个叶子,被标号为 1 6 终止字符在图中被省略掉了。
图1
同理 , 若干字符串组成的后缀树 , 称为一个扩展的后缀树: n 个字符串 Sn 其中字符串的长度为 mn , 由这些字符串组成一个扩展的后缀树 T ,它是一个包含一个根节点的有向树,该树有 S mn 个叶子,每个叶子都用一个两数字的坐标 tuple(k,l) 来标识,其中 k 的范围是从 1 n ,而 l 的范围是从 1 mk ,每一个内部节点,除了根节点外,都有两个子节点并且每条边都用一个非空的 S 中若干单词构成的一个子串来标识。并且出自同一节点的任意两条边的标识的第一个单词不能相同。对于任意的叶子 (i,j), 从根节点到该叶子所经历的所有边的标识的串联恰好拼出后缀 Si ,该后缀从位置 j 开始,就是说它们拼出了 Si [j..mi]
3. 后缀树及其算法的特点
后缀树把文档看作是一个由若干短语组成的字符串,而不是看作一组词集 [3] 。后缀树算法作为一种新颖的、增量式的线性时间运算方法,该算法生成的数据结构非常紧凑,节约了大量的存储空间。该算法非常适合于解决基本的字符串问题,例如发现最长重复子串 [4], 相似字符串匹配, 字符串比较,文本压缩和英文文档聚类等,处理速度很快。
4. 算法的构建
        构建长度为m的字符串S的后缀树, 首先将后缀 S[1.. m]作为一条单边加入到树中。然后将后缀 S[ i.. m]加入到成长的树中,其中i从2增长到m。这个算法的细节下所示:
1、让 Ni 表示中庸木,它把所有从1到i的 后缀进行编码。
2、树 N1 由一条从树的根到一个标有1的叶子间的单边组成。该边用字符串S来标识。
3、树 Ni+1 由树 Ni 来构造,过程如下:
3.1 从 Ni 的根节点开始,运算规则发现从根开始的最长路径,并且该路径的标识要匹配后缀 S[ i+1.. m]的前缀。这一路径通过成功地比较和匹配后缀 S[ i+1.. m]中和沿着从根开始的一条唯一路径上的词,直到不能再匹配为止来发现的。
    3.2 当没有更深一层的匹配时, 运算规则要么到了一个节点,称为w,要么到了一条边的中间。
如果运算规则到了边的中间,称为(u,v),那么它通过插入一个新的节点w把(u,v)分成两条边。
3.3 新节点w加在该边的最后一个匹配词的后面(该边的标识要匹配后缀 S[ i+1.. m]的一个前缀)。
3.4 在两种情况下(原来有和没有节点),运算规则都创建了一条新边 ( w, i+1),该边从w延伸至一个标识为i+1的新叶子,并且用后缀 S[ i+1.. m]中不匹配的部分来标识新边。
 
5. 应用探讨
 
5.1 中文分词
 

文档
生成
后缀树
提取
高频词
过滤掉停用词和词表已有词
新词收集和审校
词表
添加到
词表
图2. 分词过程
 

 
 
 
 
 
 
 

将后缀树算法应用于中文分词的主要目的是针对未登录词的处理。我们知道,词表中不能囊括所有的词。一方面是因为语言在不断的发展和变化,新词会不断的出现。另一方面是因为词的衍生现象非常普遍,没有必要把所有的衍生词都收入辞典中。特别是人名、地名等专有名词,在文本中有非常高的使用频度和比例 [5]。而且由于未登录词引入的分词错误往往比单纯的词表切分歧义还要严重,这就要求分词系统具有一定的未登录词识别能力,从而提高分词的正确性,为进一步的中文信息处理提供坚实的基础。该分词算法必须和基于词表的分词算法进行结合,该算法具有根据一定的词频阈值自动快速地识别未登录的新词的长处,分词的准则为词频和词长,笔者利用后缀树算法程序并结合已有的基于词表的分词程序对大量的文本进行过分词的试验,试验中词频要求大于3,词长大于1。
过程如图2所示:先发现所有高频词,然后去除停用词和词表中已经存在的词,剩下的往往是未登录过的新词,然后将这些新词审校后补充到现有的词表中,试验证明方案可行。
5.2 关联分析
       在关联分析过程中,应用后缀树算法同样可以很好地达到目的,以往的关联分析往往是基于字或词,而后缀树算法可以基于短语来进行关联分析,发现经常共同出现的短语,笔者利用后缀树算法程序对多文档生成的后缀树进行试验,通过多个文档中同时出现的几个短语来发现某一时期经常相提并论的话题,这也是聚类模块中的合并短语串的基础。
5.3 聚类系统设计
5.3.1 系统功能
l         无师可循的类别划分,预先文档能划分为多少类别以及类别的主题都是未知的。而系统能够根据所有被聚类文档的内容,动态地进行类别的划分,随着被聚类文档数量和内容的变化,可能会产生不同数量和主题的类别。
l         通过短语串和词表的互动联系,可以实现知识发现,即帮助浏览者发现预先不知道的联系和该主题所包括的方面,从而为该主题的决策提供新的思路。
5.3.2 总体结构设计
 
 

图2. 总体结构图
主题搜索器
预处理器
聚类器
知识管理器
浏览器

 
 
 
 
 
 
总体结构中,由下到上依次为主题搜索器 ——〉预处理器——〉知识管理器——〉聚类器——〉浏览器,下面分别予以解释:
l         主题搜索器
该搜索器主要是利用 Robot网络机器人来采集与主题相关的网页,可以利用万方数据公司的I-know主题搜索引擎[6]
l         预处理器
进行分词,包括两部分,基于主题词表的和不基于词表的未登录词的处理,前者可以采用达梦公司的分词程序;后者要利用后缀树聚类算法来实现,过程如前所述。
预处理除了分词外,还要去掉多余标点符号,停用词,各种 xml和html标记等。
l         聚类器
可以分为以下三个模块:后缀树生成模块 ——〉基本短语串提取模块 ——〉短语串合并模块。其中的后缀树生成模块主要是将预处理过的文档以后缀树的结构形式加载到内存,然后由基本短语串提取模块提取出所有的短语串,对短语串中的短语进行过滤,留下其中包含词表中的词的短语串,并提高其权重,因为前面已经进行了词表扩充工作,所以其余的可以视为无效短语串,或者交由管理员处理(当短语串是公式等非汉字信息,这样的信息仍可以加入到知识库)。接下来根据公式 1由短语串合并模块将短语串中文档相似率达到50%的短语串合并,形成最终的聚类结果。

           

Sim[cluter(i),cluster(j)]
= DocNum[phrase(i)]∩DocNum[phrase(j)]
     /(DocNum[phrase(i)]+ DocNum[phrase(j)])
( 算式 1)

    算 式1当中,Sim[cluter(i),cluster(j)]为文档相似率,cluster(i)为含有短语i的短语串,cluster(j)为含有短语j的短语串,DocNum[phrase(i)]为含有短语串i的文档数量,DocNum[phrase(j)] 为含有短语串j的文档数量,整个公式的含义就是同时含有短语i和短语j的文档数量占合并前两者之和的比例。
l         知识管理器
基于词表的知识管理器,在整个系统当中要和预处理器、聚类器和浏览器都要发生直接联系,负责分词时对新词的收集和审校,聚类时短语串有效性的判别,以及分词和聚类中的参数的设置,比如分词时的最短词长,词频范围、聚类时短语串中文档数量范围、短语的有效长度等等的设置。
l         浏览器
用于结果的浏览,其中包括分类树、摘要以及详细页面。
5.3.3 实验测试
实验语料来自于国家科技图书文献中心( http://www.nstl.gov.cn)的中文学位论文库,因为该库严格按照中图分类法进行构建,而且学位论文的题目精确概括了论文的主题,因此,实验中取学位论文的题目作为语料,聚类的结果证明运用STC聚类规则,对学位论文文档进行聚类所得到的结果,与按照中图法对学位论文进行人工分类的结果是非常一致的,如果按照文档覆盖率来计算,一致性达到86%,从而印证了STC运算规则的聚类的有效性和正确性。
 
6. 结论
   后缀树及其算法作为一种新颖的算法,已经可以高效率地处理有关字符串以及英文文档聚类的问题,同时鉴于它的许多优势,笔者将它应用于文本挖掘中的中文分词、关联分析和、中文文档聚类当中,结合具体的实际,取得了初步的成效,为今后中文文本挖掘领域的研究提供了一个新的思路。
 
参考文献:
1.     Jiawei Han, Micheline Kamber,数据挖掘概念与技术,机械工业出版社 2001
2.     Oren Eli Zamir, Clustering Web Documents: A Phrase-Based Method for Grouping Search Engine Results, 1999, University of Washington
3. D.Gusfield, Algorithms on strings, trees and sequences: Computer Science and Computational Biology, chapter 6, Cambridge University Press, 1997.
4. Mark Nelson, Fast String Searching With Suffix Trees, Dr. Dab’s Journal,August, 1996
5.史忠植, 知识发现, 清华大学出版社 2002
6. 王胜海,网络智能知识服务系统设计与实现,中国科学院文献情报中心 2001
 
 
 (作者E-mail: liht518@sohu.com)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值