论坛首页 Java企业应用论坛

引入局部统计识别高频词汇的Lucene中文分词程序

浏览 6141 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-02  

基于词典的最大匹配的Lucene中文分词程序基础上引入了局部统计识别新词的功能,目前实现的方法有两种:

1
、基于后缀数组的局部统计识别高频词汇               BasedSuffixArrayStringFetcher
2
、基于单字共现频率的局部统计高频词汇       HighFrequenceStringFetcher

问题1:什么是后缀数组
解答:

后缀数组是由作为一种文本索引结构提出的, 这种结构记录了一字符串中各后缀的字典序索引.通过对字符串的编码, 可以用后缀数组进行字符串集序列的处理. 近年来, 在基因匹配、文本处理等领域中, 后缀数组倍受关注. Manber Myers]给出了一个利用O( N) 的额外空间, O ( N lg N) 时间内同时构造出后缀数组及最长公共前缀信息数组LCP 的算法

S [1. . n ]为一有序字符集Σ上的字符串, | S| = n , | S| 表示S 的长度. S [ i ]表示S 中位置i 上的字符. S [ i . . n ]S 的第i 个后缀, 简记为Si . 对应字符串S 的后缀数组SA 为一整型数组, 其中按照S 的各个后缀的字典序存放其下标索引. : S = xabxac , 则其各后缀按字典序列排列为: S2 , S5 ,S3 , S6 , S1 , S4 . 其中S2 = abxac ; S5 = ac ; S3 = bxac ; S6 = c ; S1 = xabxac ; S4 = xac. 对应的后缀数组SA {2 ,5 ,3 ,6 ,4 ,1} , SA[ i ]为后缀数组SA 中第i 个索引所对应的S 的后缀, 简记为SAi , SA1 = S2 .S [1. . i ]S 的第i 个前缀. 两个字符串v w 存在最长公共前缀, LCP( v , w) 为字符串v w 最长前缀的长度. 则数组LCP [ 1. . n ] 存放后缀数组相邻两后缀的最长前缀长度, LCP [ i ] =LCP( SAi - 1 , SAi) .

问题2:单字共现频率的局部统计的原理
解答:

高频字串统计的理论基础是N - 元模型。
W1 W2 WN 是长度为N 的字串,则字串W 的似然度为
p ( W) = p ( w i | w1 w2
w i - 1) (1)
上面公式的意义反映连续个N 字之间的结合程度,如果若干种不同的历史组合W1 W2 WN的最后N - 1 个字相同,就把它们都看作一类。在这一假设下,每一个字出现的概率不再与前面的历史有关,只与最近的N - 1 个字相关,字串的先验概率为
p ( W) = p ( w i - ( n - 1) w i - ( n - 2)
w i - 1) (2)
p ( W) 超过一定的阈值时,说明这N 个字的结合能力较强,我们就可以认为该字串能被看成一个

正是根据以上所说原理,预先对待分词文本每个单字进行出现次数统计并记录它们在文中出现的位置(存储方式如附件图例所示),预处理后我们遍历单字频次统计 列表出现次数大于2的所有单字在文中出现的位置i,判断位置i+1的单字出现次数是否也大于2,若是则判断位置i+2的单字出现次数是否也大于2,如此类 推直至位置i+n+1的单字出现次数小于2,获得候选词组 w(i,i+1...i+n)并放入候选词汇集合,最后对候选词汇集合进行前缀后缀处理获得合适的高频词汇集合result

  • src.rar (31.7 KB)
  • 描述: 源代码
  • 下载次数: 329
  • 描述: 单字频次位置保存格式
  • 大小: 14.5 KB
   发表时间:2007-04-03  
  人名识别都写埋出来啦,心急啊....
0 请登录后投票
   发表时间:2007-04-03  
simpleuu 写道
  人名识别都写埋出来啦,心急啊....
暂时还没有,只是识别文中出现频率高的词汇:例如小说里面的主人公、门派、动作行为等
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics