无词典中文高频词快速抽取算法
江华, 苏晓光
海军工程大学装备经济管理系 武汉 430033
摘要

在PAT数组的基础上,引入LCP数组记录文本后缀串的相同前缀长度,通过扫描LCP数组快速抽取文本高频词。该算法不依赖于分词词典,通过探测重复出现串来提取高频词,并能够抽取任意重复字符串,对新词、组合词抽取特别有效。实验结果表明,该算法抽取的高频词可以达到较高的可接受率,在与ICTCLAS系统关键词抽取的比较中也有较高的相同率,且在发现组合词方面更具优势。

关键词: 中文信息处理; 高频词抽取; PAT数组; 中文分词分析
Chinese High-frequency Words Extraction Algorithm Without Thesaurus
Jiang Hua, Su Xiaoguang
Department of Equipment Economics and Management, Naval University of Engineering, Wuhan 430033, China
Abstract

Based on PAT array,introducing LCP array to count the length of the common prefixes of text suffixes, a new algorithm without thesaurus is presented for extracting high-frequency words of Chinese text by scanning LCP arrary.The algorithm does not depend on segmentation dictionary and can extract any repeated string,especially the new words and combined words.Experimental results show that high-frequency words extracted by the algorithm achieve a high acceptance rate and this algorithm is more effective in extracting combined words than ICTCLAS.

Keyword: Chinese information processing; High-frequency word extraction; PAT array; Chinese word segmentationdetection
1 引 言

在一篇文档中出现频率较高的词,称为高频词。根据自然语言的特点,高频词往往与文档主题密切相关,因此文档高频词在文档自动分类处理和信息检索中具有重要意义。空格是英文文本天然的词分隔符,而中文文本的词与词之间并不存在分割符。如何将一段文字正确地分隔成字词的组合,一直以来都是中文信息处理技术研究的热点和难点。

高频词的获取,可以通过先分词和再统计来解决。中文分词方法大致分为两类:基于词典的方法和基于字标注的方法[ 1]。基于词典的分词方法,往往需要借助于事先存在的分词词典,通过与词典进行匹配,再加上歧义消除处理来分词。基于词典的分词方法不足之处在于难以识别未在词典中登录的词,如人名、地名、机构名称和组合词等。基于字标注的分词方法根据字与字之间结合的紧密程度,对单个字的词位进行标注。最后,根据词位定义直接获得分词结果。此类方法主要包括互信息、隐马尔可夫模型(HMM)、条件随机场和最大熵模型(ME)等[ 2, 3, 4, 5]

高频词的抽取虽然可以通过分词来解决,但与分词有本质的区别。一篇文档的高频词一定是重复出现的词。因此以相同的字串形式重复出现,成为高频词的重要特征。反过来,这一特征可以帮助人们发现高频词。针对高

频词的抽取,金翔宇等[ 6]提出了通过自增长算法获取中文文档中的汉字结合模式,并引入支持度、置信度等概念来筛选词条的无词典方法。韩客松等[ 7]提出了使用Hash技术,依靠统计字的出现频率和字与字之间的结合程度等信息提取高频字串的方法。任禾等[ 8]利用所有子字符串的相关频次信息计算每一个子字符串的信息熵来抽取高频词。

本文基于高频词以相同字串形式重复出现的特征,提出了通过构造文本的PAT数组和LCP数组来快速发现在一篇文本中多次重复出现的高频字串,进而从这些高频字串中抽取出高频词的算法。该算法将文本看作字符串的叠加,而不是字的组合。抽取过程不需要分词词典支持,数据结构模型更加简单,抽取过程只需要一次读取文本和一次字符串排序操作,执行效率更高。实验表明,该方法对高频词的抽取是可行的,且对新词、组合词的识别比较有效。

2 PAT数组

PAT数组主要用于对文本进行全文索引。PAT数组将待处理文本看作一个无限长的字符串,由任意位置开始直至文本结尾所形成的子字符串,称为文本的一个后缀[ 9]。本文用记号sfx(i)来表示从位置i开始的文本后缀。如文本“传统经济与网络经济比较”,共有sfx(0)=“传统经济与网络经济比较”、sfx(1)=“统经济与网络经济比较”、…、sfx(9)=“比较”、sfx(10)=“较”等11个后缀,而PAT数组就是这11个后缀字典顺序的排列。

LCP(Longest Common Prefixes)数组对应于一个PAT数组,LCP数组记录了PAT数组中相邻两个后缀间的最长相同前缀长度[ 9]。函数flcp(S1,S2)表示字符串S1与S2的相同的前缀长度。如字符串S1=“网络经济”,S2=“网络经营者”,则flcp(S1,S2)=3;而字符串S3=“网络经济”, S4=“传统经济”由于无相同前缀,则flcp(S3,S4)=0。文本“传统经济与网络经济比较”对应的PAT数组和LCP数组如图1所示:

图1 文本“传统经济与网络经济比较”的PAT数组和LCP数组

PAT数组和LCP数组的创建过程的实质是字符串的排序过程。本文在实验程序中使用了文献[10]中所给出的Bentley-Sedgewick算法。算法思想源自于快速排序与基数排序,排序过程首先以所有字符串(文本后缀)的首字符为比较对象,对数组进行第一轮排序。排序后的数组分为三段,左边段字符串均小于中间段字符串,中间段内所有字符串的首字符相同,右边段所有字符串均大于中间段字符串。若各段的长度大于1,则对该段继续使用上述算法进行递归划分。每一次的划分可利用前一次划分的成果。如第一次划分后对中间相等段进行进一步划分时,比较可直接从第二个字符开始,无需再比较第一个字符。LCP数组的创建可与PAT数组的创建同时完成。以PAT数组的第i次三段划分为例,划分后的中间段内所有后缀的前i个字符相同,则与该段对应的LCP数组段内元素的值均更新为i。随着PAT数组排序过程的迭代进行,同时也完成了LCP数组元素值的计算[ 11]

3 高频词抽取

在一篇文本中的不同位置多次重复出现的字符串可能有:词、短语、特定符号、词的组合和习惯用语等,文本的高频词也一定在其中。LCP数组中隐含了任意两个文本后缀之间的前匹配长度。如果在LCP数组中,存在连续的k个元素值大于等于m,则可以推断出有一个长度为m的字符串,在文本中总共出现了k+1次。因此,通过扫描LCP数组可以发现文本的重复字符串及其出现次数。以图1所示的文本“传统经济与网络经济比较”为例,通过扫描LCP数组,可以发现取值大于0的元素有:LCP[3]=1,LCP[5]=2。LCP[3]=1表明字符串“济”重复出现两次;LCP[5]=2表明字符串“经济”重复出现两次。本文所设计算法的目标就是要发现这样的重复串,进而从这些串中发现有效的高频词。

3.1 抽取算法

设待抽取文本为T, L为要抽取字符串的最小长度(L>0),K为要抽取字符串的最小重复出现次数(K≥2),抽取过程如下:

输入:文本T,串最小长度L,最小的出现次数K

输出:长度≥L且出现次数≥K的按出现次数降序排列的字符串序列

提取步骤:

①设定c的初始值为0;

②从LCP位置c开始扫描直至索引i,有LCP[i]≥L;

③记录LCP[i]的值,继续向前扫描,直至位置j,有LCP[j]LCP[i],则令c=x,否则c=j;

④提取字符串S,其在T中的开始位置为PAT[i],长度为LCP[i],S出现的次数为j-k,记录串S和出现次数j-k;

⑤返回到步骤②,提取下一个字符串,直至扫描完LCP数组;

⑥对所记录的所有字符串,按照出现次数进行排列,输出所有出现次数≥K的字符串序列。

算法的步骤②用于探测重复出现的字符串;步骤③用于统计所探测到的重复串的最大出现次数,记录位置x是为了将所有大于等于L的串都提取出来;步骤④进行串提取和计算出现次数;步骤⑥对提取结果进行排序,输出大于等于K的高频串。通过以上步骤对LCP数组一次扫描,可提取出在文本中所有出现次数大于K的字符串及其出现的次数。当L值设定为1时,可统计所有重复的字符串(包括单个字符)在文本中的出现情况;当L值设定为2时,提取的字符串为两个文字以上字符串,符合中文词的一般长度。

3.2 算法优化

为使上述算法抽取出的高频串更接近于有意义的词或短语,算法进一步做了以下4方面的优化:

(1)所有以标点符号、换行符、空格等特殊字符开始的文本后缀不作为索引点,以提高被抽取串的可读性。

(2)限定被抽取串的长度范围,本文实验均将长度范围限定为2-8个字符,避免提取单字符和过长的串。

(3)当字符串S被抽取(设S的长度为L,L>2,S出现次数为N),且S的后缀sfx(i)(0<i<L)在文本中出现的次数也等于N时(S的后缀出现次数可能大于N,但不会小于N),S的后缀sfx(i)将不再被抽取。

(4)设定阈值t, t值根据文本大小可调整。设字符串S1是S2的前缀,S1出现的次数为C1,S2出现的次数为C2。当(C1-C2)/C2小于t时,S1不作为高频串被抽取。

优化(1)可在初始PAT数组元素值时完成,特殊符号将不再作为索引点选取。为此,需要一个特殊符号表作为筛选依据。优化(2)的实现在PAT数组的创建过程中完成,提取串的最大长度即为文本后缀的比较深度。优化(1)和优化(2)同时能减少PAT数组的大小和数组创建的时间开销。

优化(3)体现了长串优先的原则,即一个串S总是被另一个更长的串S’包含时,仅选择更长的串S’。一般来说,长串在语义上是更准确的表达。如在图1中,串“济”总是被更长的串“经济”所包含。因此通过优化(3),本文将选择“经济”,而将“济”这个更短的串忽略。优化(3)可通过增设PAT数组的反转数组快速实现,所谓反转数组指将PAT数组值作为辅助数组的索引,而索引作为辅助数组的值,从而达到快速在LCP数组中定位的目的。

优化(4)在优化(3)的基础上进行了扩展,即当一个串S在大多数情况都作为一个更长串S’的前缀出现时,仅选择更长的串S’。阈值t的作用是控制筛选的比例,实验结果表明t的范围设定在0.1-0.3之间比较合理。当文本越大时,应适当降低阈值t;当文本越小时,应适当提高阈值t。

4 实验结果

本文从人大报刊复印资料数据库中选取了50篇文本作为测试文本集,对上述算法所抽取出的前10位的高频词进行了人工的识别,人工识别可接受的词与抽取出的词的总数比为抽取的可接受率。实验还与中国科学院计算技术研究所汉语词法分析系统ICTCLAS[ 12]的关键词分析结果作了对比。实验程序用C#语言编写,开发环境为Visual Studio 2005。算法使用了本文列出的4项优化策略,优化(4)的阈值t设定为0.25,抽取词的长度限定为最短2个字,最长不超过8个字。

实验抽取词汇的可接受率,及与ICTCLAS关键词分析对比的结果,如表1所示:

表1 可接受率及与ICTCLAS对比实验结果

本文算法与ICTCLAS关键词分析对比的部分实验结果,如表2所示:

表2 部分与ICTCLAS关键词分析对比数据

在实验的50篇文本中,算法在所抽取出的高频词人工判断的可接受率平均值达到了92%。所出现的无效词汇主要集中在“××的”、“可以”、“一个”等习惯用语上。对习惯用语这一类无效词汇,可以通过习惯用语词典的方法加以改进。在与ICTCLAS的前10位关键词对比中,平均的相同率达到了75%。实验结果发现算法在发现组合词上比ICTCLAS更具优势,能够发现在特殊语境下的组合词,如表2中的“基因专利”、“供应链风险”、“风险传导”、“传导模式”等,而这些组合词在其所对应文本中恰好能更加准确地表达文章的主题。

5 结 语

本文基于高频词以相同字串形式重复出现的特征,在PAT数组的基础上,利用文本后缀排序时所生成的最长相同前缀LCP数组,提出了中文高频词抽取算法。该算法的最大特点在于抽取过程不依赖于传统的分词词典,通过探测重复出现串,而不是统计字与字之间的结合程度来提取高频词,且算法能够发现在文本中重复出现的任意字的组合用法。实验结果表明算法对中文文本的高频词抽取,特别是对于新词和组合词的抽取是有效的,具有一定的实用价值。实验发现,干扰高频词抽取准确率的词主要是一些中文习惯用语,未来的工作是收集并研究习惯用语规律,进一步提高高频词抽取的可接受率。

参考文献
[1] 黄昌宁, 赵海. 中文分词十年回顾[J]. 中文信息学报, 2007, 21(3): 8-18.
(Huang Changning, Zhao Hai. Chinese Word Segmentation: A Decade Review[J]. Journal of Chinese Information Processing, 2007, 21(3): 8-18. ) [本文引用:1] [CJCR: 1.13]
[3] Zhou G D, Su J, Tey T G. Hybrid Text Chunking[C]. In: Proceedings of CoNLL- 2000 and LLL-2000, Lisbon, Portugal. Stroudsburg, PA, USA: Association for Computational Linguistics, 2000: 163-165. [本文引用:1]
[4] Zhou G D, Su J. Named Entity Recognition Using an HMM-based Chunk Tagger[C]. In: Proceedings of the 40th Annual Meeting of the Association for Computational Linguistics(ACL). Philadelphia, USA. Stroudsburg, PA, USA: Association for Computational Linguistics, 2002: 473-480. [本文引用:1]
[5] 沈勤中, 周国栋, 朱巧明, . 基于字位置概率特征的条件随机场中文分词方法[J]. 苏州大学学报: 自然科学版, 2008, 24(3): 49-53.
(Shen Qinzhong, Zhou Guodong, Zhu Qiaoming, et al. CRFs-based Chinese Word Segmentation Method with Character Position Probability Feature[J]. Journal of Suzhou University: Natural Science Edition, 2008, 24(3): 49-53. ) [本文引用:1]
[6] 金翔宇, 孙正兴, 张福炎. 一种中文文档的非受限无词典抽词方法[J]. 中文信息学报, 2001, 15(6): 33-39.
(Jin Xiangyu, Sun Zhengxing, Zhang Fuyan. A Domain-independent Dictionary- free Lexical Acquisition Model for Chinese Document[J]. Journal of Chinese Information Processing, 2001, 15(6): 33-39. ) [本文引用:1] [CJCR: 1.13]
[7] 韩客松, 王永成, 陈桂林. 无词典高频字串快速提取和统计算法研究[J]. 中文信息学报, 2001, 15(2): 23-30.
(Han Kesong, Wang Yongcheng, Chen Guilin. Research on Fast High-frequency Strings Extracting and Statistics Algorithm with No Thesaurus[J]. Journal of Chinese Information Processing, 2001, 15(2): 23-30. ) [本文引用:1] [CJCR: 1.13]
[8] 任禾, 曾隽芳. 一种基于信息熵的中文高频词抽取算法[J]. 中文信息学报, 2006, 20(5): 40-43.
(Ren He, Zeng Junfang. A Chinese Word Extraction Algorithm Based on Information Entropy[J]. Journal of Chinese Information Processing, 2006, 20(5): 40-43. ) [本文引用:1] [CJCR: 1.13]
[9] Manber U, Myers G. Suffix Arrays: A New Method for On-line String Searches[J]. SIAM Journal on Computing, 1993, 22(5): 935-948. [本文引用:1] [JCR: 0.803]
[10] Bentley J L, Sedgewick R. Fast Algorithms for Sorting and Searching Strings[C]. In: Proceedings of the 8th Annual ACM-SIAM Symposium on Discrete Algorithms, New Orleans, USA. Philadelphia, PA, USA: Society for Industrial and Applied Mathematics, 1997: 319-327. [本文引用:2]
[11] 江华, 赵建新, 王海岚. PAT数组全文检索技术的研究与改进[J]. 现代图书情报技术, 2005(8): 37-41.
(Jiang Hua, Zhao Jianxin, Wang Hailan. Research on a Full-text Indexing Structure of PAT Array[J]. New Technology of Library and Information Service, 2005(8): 37-41. ) [本文引用:1] [CJCR: 1.073]
[12] ICTCLAS[EB/OL]. [2012-03-05]. http://ictclas.org/. [本文引用:1]