关于重复词句提取的两种算法分析.docx
《关于重复词句提取的两种算法分析.docx》由会员分享,可在线阅读,更多相关《关于重复词句提取的两种算法分析.docx(7页珍藏版)》请在冰豆网上搜索。
![关于重复词句提取的两种算法分析.docx](https://file1.bdocx.com/fileroot1/2023-2/3/62d7c1cd-5fe3-4664-aafc-f132f12e4e12/62d7c1cd-5fe3-4664-aafc-f132f12e4e121.gif)
关于重复词句提取的两种算法分析
关于重复词句提取的两种算法分析
(桂林电子科技大学计算机学院,广西桂林541004)
摘要:
文章介绍了两种用来发现重复词句的算法——基于后缀树的方法和基于倒排索引的方法。
关键词:
重复词句;重复序列;后缀树;算法;比较
中图分类号:
TP391.1文献标识码:
A文章编号:
1007—6921(XX)01—0073—05
重复词句,有时指字段、短语、搭配等的重复或同现,有时是指重复序列、重复语句、同现的字句、或重复排列等,它是在一篇文本或文集中出现超过两次的字序列。
文本中所有的字都考虑或者通过stoplist忽略文中某些词,都是随着具体实现而定。
一般而言,我们可把某些词看作特定符号来标记。
这样,重复字句的符号标记就和原始文本中的样式一样。
重复及相似内容的识别在信息处理领域中,在利用计算机处理文本信息时,都是个比较重要的研究课题,它还广泛应用于防抄袭识别、新闻网页去重、自动分类、搜索引擎等系统中。
就一般意义而言,重复字段的抽取和实现是涉及和涵盖了计算语言学和文本挖掘的范围。
它们对聚类、分类、主题发现和其他机器学习和人工智能技术等都有着重要意义。
近年来更广泛的应用于字符串处理,DNA序列比对,文本聚类,XML结构索引等领域中。
1后缀树
后缀树是一个数据结构,把文档看作是一个由若干短语组成的字符串,而不是看作一组词集〔1〕。
一般算法中用来找出重复语句的传统ST结构都类似于Zamir〔4〕中阐述的结构。
在最简单的版本中,后缀树算法创建了一个树型结构,每个后缀树的节点,表示一个词并且根节点为空。
这样每个从根节点出发的路径表示了一个语句,这个语句中的字词是由路径遍历的相应的代表各个字词的结点来标识。
后缀树是一个有根树,也是一个有向树。
例如,用下列语句来生成一个后缀树结构。
“candrivetruckssafely.Mendrivecarssafely.Mencandrivetrucks.”
确定树的最大深度m=3。
下图1中所示的就是这种方法生成的后缀树结构。
740)this.width=740"border=undefined>
当生成了树形结构后,获得一个单一重复语句的最简单方法是用递归方法从根节点遍历到叶节点。
如果使用非递归执行来获得语句,那将是一个相对复杂的过程并且在相同复杂度的情况下它不能保证我们能得到更好的效率,因为它取决于目前的编译执行器的执行效率。
一般的,在后缀树最外层描述一个句子的最后一个词的节点中常给出一个句子出现的频率。
在一个代表特定语句的节点集合中,这个节点常常位于一个后缀树结构的底层,这里我们常把根节点作为一棵树的顶层。
1.1ST算法执行中的一个细节描述
ST算法执行的伪代码如下列图2所示。
我们同时指出了每一步的时间复杂度。
首先,一个输入文集被存储在分表中,以一种方式使得特定的词被连续存储,并且句子或由标点分开的连续句子在空间上也被划界。
接下来生成一个根节点。
这个根节点的特殊性在于它不能指向任何一个字词。
然后分表的第一个位置的词被读出,并被添加到有关键码值的哈希表中,使用哈希表是用来加快存储字句的存取。
CreatearootnodeofST-structure;O
(1)
While(inputisnotempty)
{
Clearparentlist;O(N)
While(getnextinputword!
=sentencedelimiter)
{
Addwordtohashtable;O(N)
Addwordtonodetorootnode;O(N)
Addreferencetoparentlist;O(N)
Foreachnodefromparentlist(exceptthelastoneadded)
{
Addwordnodetocurrentnode;O(N*m)
Addreferencetoparentlist;O(N*m)
Removecurrentlyprocessednodefromparentlist;O(N*m)
}
}
}
{
TraversecreatedST-structurerecursivelytoobtainST-phrasesO(N)
}
740)this.width=740"border=undefined>
每个后缀树节点表示输入文集的一个字词,并且它们平行生成一个对应哈希表的接口。
这样如果在一个后缀树中更深层的节点是重复的话,我们能减少总的存储空间。
节点同样包含了信息,比如这个语句在输入文集中出现的次数,并且它提供了一个关于子节点的列表。
如果一个字词,在分表中被读出并写入到哈希表中,根节点应检测:
当它是一个父节点时它是否包含一个节点表示当前的字词。
如果它是这样一个父节点的话,出现次数的计数应当累加。
否则,生成一个表示当前字词的新节点并且把它添加到根节点的孩子节点的列表中。
在两种情况下,表示当前字词的节点都被添加到了父节点列表的末尾。
现在,处理包含着先前步骤中所添加节点的父列表。
因为这些节点都是当前字词的父节点,就是说它们表示出现在输入文集中当前字词的前面,我们能简单地将它处理成根节点的情况。
父节点被从父表中移出。
相应地,如果一个表示当前字词的节点的层次和最大后缀树层次相等的话,那么这个表示当前字词的节点并不能添加到父表中。
接下来,下一个字词被读出并且这个过程如上述重复进行,直至分表读完。
图4描述了一个后缀树结构的四个步骤,输入句子是“candrivetruckssafely”,最大层次m=3。
1.2复杂度
如在图2中所提到的,其中N是所有输入文集中字词的数目,m是后缀树的最大层次,时间复杂度是O(N+N*m+N)。
空间复杂度是O(N),有关键码值的哈希表是O(K)。
其中K是在输入文集中关键词的个数,所有的后缀树节点O(N*m)的情况是最坏的情况,所有的ST语句得到O(N*m)。
这样,总的时间和空间复杂度是线性的。
740)this.width=740"border=undefined>
2重复序列
关于重复序列,早在Justeson,Katz〔5〕和Salem等的著作中都提出过这个概念。
在这些著作中,重复序列有特定的含义并且在定义上有着严格的限制。
他们要求每个重复序列必须包含一个名词,对于是否包含介词等也有相应的要求。
这种意义上的重复序列是指它由几个词组成并且有一个特定的含义。
为了发现名词和相应的动词,发现重复序列就需要增加额外的资源,如不同的过滤器等。
对于这种严格定义的重复序列来说,它本身基于语义有着严格的语法特性。
另一个问题是它不具有语言独立性。
后来发展出了另一种发现重复序列的工具LIKES。
它使用两个过滤器,一个切割过滤器有一串不能组成其他队列的单独的词组成,多为关联词和动词。
另一个语法过滤器有一串可以引导一个序列的代名词组成。
这些过滤器有着语言依赖性。
LIKES能创建一个关于整个文档各个段、句子、词的树。
它可以找到一个序列在文中的特定位置。
在接下来我们的实验中,重复序列都是指单纯的重复的词句,并不是指上面所提到的这些特定的限制。
另外,本文中的实验文本和算法都是基于英文文档而言的。
2.1算法
下图5是算法的伪代码。
同时在旁边标注了每个步骤的时间复杂度。
下面来进一步解释说明此类算法。
我们这里的算法并没有具体考虑每一种不同的过滤器,因为算法从文本中提取出的每个标记并不是严格的都是以字词作为基准的,只要是它们符合语法形态学的意义,作为每个标记的内容,可以是字词也可以是任何意义上的符号。
图6给出了算法的核心步骤。
我们将根据下面的每一步来说明算法。
将下列句子作为输入文本:
“Personalconstructpsychology.Personalconstructpsychology.Personalconstructtheory.Personalconstructtechnology.”
//读符号化文档并更新倒排索引
foreachwordintext
addtohashtable;O(N)
foreachkeyinhashtableO(K)
{
//createslistofwordsfollowingeachoccurrenceofkeyword
getfollowingwords;O(V)
//modifieslistsoasonlyonesequencesremainthatoccurtwiceatleast
reduceemptycolumns;O(V)
//countsnewlydiscoveredsegmentsandaddsthem
removeemptycolumns;O(V)
removeduplicates;O(V)
addinclusions;O(V+VlogV)
addsegments;O(V)
}
输入文本的预处理,如:
标记化、标准化等都是在算法外实现的,这样算法真正输入的是标记词的队列。
我们将每个词添加到哈希表中时,都同时创建了一个倒排索引。
并且哈希表有一个关于每个词出现次数的表。
这张伴随表的内容是这些词在文本中出现的相应位置〔6〕。
例如:
对‘personal’这个词来说,我们查寻了它在文本中的出现并创建了一个在文本的不同位置紧接着‘personal’的词表。
这个词表被分类并且只有那些在文中的不同地方出现了两次或多次的词才能被保留下来。
其他的词被移除。
接下来,相同的副本词被移除,原始词累加。
其余的所有句子的子句在第四部分中累加,第五部分中做的处理和第三部分相同。
最后,新提取出来的序列添加到重复序列表中,即图6中的第六部分。
整个的处理过程对倒排索引中的其他词进行同样的处理。
例如在处理‘construct’时,就能找到语句‘constructpsychology’。
理论上来讲,重复序列的最大长度可以是整个文集的长度的一半。
但是,更加具有可行性的是将重复序列的最大长度限定在一个合理的范围内,在本例中就将其设定为了3。
大于这个限制的序列在处理中将被忽略。
2.2复杂度
算法中的每一步时间复杂度已在伪代码中标注了出来。
如图5中所示,其中N是文本中的字数,K是文本中原始词的关键码值的字数,V是文本中的一个词出现的平均次数。
由这三个变量表示的整个算法的时间复杂度是:
O(N+K(VlogV+V))
(1)
又,V=N/K。
于是,代入得到:
O(N+K((N/K)log(N/K)+N/K))
(2)
O(N+N+Nlog(N+K))(3)
特别的,如果K=N,即文中每个词都不相同,公式简化为O。
但当K趋近于logN时,如图7所示,总的时间复杂度是上线性的,即
O(NlogN)[JY](4)
接下来再来考察空间复杂度,我们得到内存中的标记化文本的空间复杂度是O(N),词的出现次数的哈希表,例如,倒排索引的空间复杂度是O(N),一个词在文本中总的出现次数不可能大于N,并且序列表的空间复杂度是O(N)。
这样,总空间复杂度我们得到O(N)。
这样我们得到结论,对于抽取出现在上面的重复序列在时间上是上线性的,在空间上是线性的。
740)this.width=740"border=undefined>
3结果分析
在五个长度为大约1MB到30MB的不同文本上运行这两个算法,这些文本中字词的总数大致为几百万个。
统计了字句最大长度为3,4和5的句子,并且统计了每个算法的时间和空间复杂度。
在每个文本运行这两种算法得到的抽取重复词大致相同。
图7中的曲线证实了我们对于算法的复杂度的理论假定。
ST算法在时间和空间上都是线性的,而RS算法在时间和空间复杂度上则是上线性的〔8〕。
ST算法的空间消耗大致是RS算法空间消耗的两倍。
两个算法的运行环境都是C#,使用.NETFramework1.1编译实现AMDOpteron1.6GHz2GBRAM。
对具有30MB大小的英文文档进行了实验。
两种不同方法的时间和空间复杂度分别如下所示:
740)this.width=740"border=undefined>
4总结
文中对重复词抽取的两种算法进行了阐述,并将两者运行实现。
通过对实验结果的分析,比较了二者的性能以及时间和空间复杂度。
重复词的抽取技术在当今生物、地理信息、搜索引擎、信息检索领域都有越来越广泛的应用。
两种算法的实验结果看出这两种算法对于处理大型文本语言是一个基础性的工具。
在重复词抽取和去重问题上将会有更加广泛的应用。
对文本挖掘领域,网页去重问题,垃圾邮件过滤,文本聚类〔7〕中都将有更加广泛的意义。
根据本文实验结果,用户可以根据不同文档的时间和空间复杂度要求,来选择两种算法之一。
这两种算法对大型文档的重复词提取都有着广泛应用和重要的意义。
接下来的工作对重复抽取还可以从循环子序列入手,进一步研究重复序列简化模式的提取和检测过程。
[参考文献]
[1]GrolmusP.,HynekJ.,JezekK.:
UserProfileIdentificationBasedOnTextMining[C].Proc.Of6thInt.Conf.ISIM'03,MARQOstrava,pp.109-118,ISBN80-85988-84-4,XX.
[2]DebarH,eta1.Fixedvs.variable-lengthpatternsfordetectingsuspiciousprocess.InJ.J.Quisquater,Y.Deswarte,C.Meadows,D.Gollmann.eds[C].Proc.ofthe1998ESORICSConference,hum-ber1485inLNCS,sep.1998.1-16.
[3]HanJ.,KamberM.:
DataMining:
ConceptsandTechniques[M].MorganKaufmannPublishers,550pages.ISBN1-55860-489-8,AugustXX.
[4]ZamirO.,EtzioniO.:
Webdocumentclustering:
Afeasibilitydemonstration[C].InProceedingsofthe21stAnnualInternationalACMSIGIRConferenceonResearchandDevelopmentinInformationRetrieval,Australia,Aug.24-28.
[5]JustesonJ.,KatzM.:
"Technicalterminology:
somelinguisticpropertiesandanalgorithmforidentificationintext",NaturalLanguageEngineering[J].Vol.1,No.1.pp.9-27,1995.
[6]林春燕,朱东华,等.科学文献的模糊聚类算法[J].计算机应用.XX,24(11):
66~67.
[7]林建敏,谢康林,等.基于PAT-array和模糊聚类的文本聚类方法[J].计算机工程XX,30(12):
126~127.
[8]吕爱琴,田玉敏,朱明华.基于MATLAB的OFDM系统仿真及性能分析[J].计算机仿真,XX,(10).