中文文本挖掘中的无词典分词的算法及其应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

 第23卷 第1期 吉 林 工 学 院 学 报 V ol.23 N o.1 2002年3月 JOURNA L OF J I LI N I NSTIT UTE OF TECH NO LOGY Mar.2002

文章编号:100622939(2002)0120016203

中文文本挖掘中的无词典分词的算法及其应用Ξ

胥桂仙, 苏筱蔚, 陈淑艳

(吉林工学院计算机科学与工程学院,吉林长春 130012)

摘 要:对中文文本挖掘中的词汇处理技术进行了较深入的探讨,提出了针对汉语语言特点的无词典分词算法。该算法基于“找最长字共现”的原则,可以准确地将文本中的词汇切分出来。

关键词:文本挖掘;中文分词;无词典分词

中图分类号:TP31111 文献标识码:A

随着信息技术的快速发展,人们已经从信息缺乏的时代过渡到了信息极大丰富的时代。文本信息是人们用于信息记载和信息传播的最重要的媒体之一[1],如何迅速、有效地从大量数据中找到所需的信息已经成为信息服务领域中的重要问题。 文本挖掘是抽取有效、新颖、有用、可理解的、散布在文本文件中的有价值知识[2],并且利用这些知识更好地组织信息的过程。中文文本挖掘技术成败的关键在于文本中词汇切分的成功与否。文中主要介绍如何在没有词典的情况下实现汉语文本的分词。这实际上是从文字信息中自动获取知识的一种方法。

1 中文文本挖掘中无词典分词算法研究

汉语语言文字的处理与西文相比,一个明显的不同是汉语没有词与词之间的显式分隔标记[3]。“什么是词?”“汉语究竟有多少个词?”等这样的许多问题,迄今还是语言学家争论不休的问题。

在中文文本挖掘的分词技术中,基于词库的算法目前使用较广,也较为成熟。这类算法分词的正确性很大程度上取决于所建的词库。一个词库应具有完备性和完全性两个方面。建立一个同时满足这两个要求的词库具有很大的难度[4]。所以对于中文文本挖掘来说,基于词库的分词技术可能会使某些具有重要意义的词汇被疏漏,从而导致挖掘的内容不是十分的准确。

作者设计了一种发现文本中所有最长频繁序列的算法,其根本假设是“组成一个词的汉字经常在文中以相同的顺序重复出现”。这个算法能准确地切分文本中的词汇。

111 概念介绍

11111 按字索引

设一个文档集D={D1,D2,…,D n},其中D i 为一个文本,i=1,2,…,n。设一个文本D i可描述为D i=s1s2…s n,s i为字符[1]。以四元组形式将文档集D存入数据库,四元组形式为(f i,p i,s i, flag),其中f i为文档D i对应的文件标号,p i为字符s i在文本中的位置,flag为产生长词标记,初值为0。

11112 字共现

设串…s i s i+1…s i+m s i+m+1…所产生的按字索引为{…(f i,p i,s i,0),(f i,p i+1,s i+1,0)…(f i,p i+m, s i+m,0)(f i,p i+m+1,s i+m+1,0)…}具有s i=s i+m, s i+1=s i+m+1,p i+1=p i+1,p i+m+1=p i+m+1,则称s i s i+1为2字符长度的2次共现[2]。

依此类推,可以定义2字符长度的n次共现。进一步可定义:k长度的n次共现。字符串长度为n(以下简称为n序列)。

11113 频繁域值

如果一个序列在一篇文档中至少出现σ次,则认为这个序列是频繁的。σ被称为频繁域值[5]。

11114 稀有词

这类词的特点是在文档中出现的频率很低,对文档的内容贡献也不大。因此,对于这类词应予以滤除[3]。

Ξ收稿日期:2001210229

作者简介:胥桂仙(1974-),女,吉林长春人,吉林工学院硕士研究生,主要从事数据挖掘与知识发现研究1

11115 特殊符号

标点符号等对词汇的产生起阻碍作用,应予以滤除。

112 算法描述

本系统首先将文本集以四元组形式存入到“text collection”数据表中。对于“text collection”数据表,将标点符号等特殊字符的flag标记修改为4,然后将所有的以相同顺序出现、位置连续并且超过频繁域值的长度为2的序列(2序列)筛选出来。对于超过频繁域值的2序列,将所有2序列的第一个字符在“text collection”数据表中的对应的四元组的flag值变成1。对于所有共现次数大于一次并且小于频繁域值的2序列的第一个字符对应的四元组的flag值变成2。将“text collection”数据表中的所有位置连续,flag为1的字符加上后面一个flag不为1的字符即为长词。 所做的准备工作如下:

(1)建立“text collection”表,包括file number, position,char,flag四个字段,对文档集按照四元组形式存入“text collection”表中,初始时flag为0。

(2)建立“特殊符号表”,用以存放标点符号等特殊符号,这些符号将会分割各频繁序列。

(3)建立“临时二字词”表,用以存放超过频繁域值的2序列及其频率。

(4)建立“临时长词表”,用于存放文档集中所产生的所有长序列。

(5)建立“频繁长序列集”,用于存放文档集中所产生的超过频繁域值的所有长序列及其频率,以便计算文本特征的权重。

(6)建立“标识表”,用于记录某篇文章是否完成了生成长序列操作。

发现最长频繁序列的算法如下:

//f1,p1,str1,flag1用于记录2序列中第一个字符的文件号,文件中的位置,字符内容,标记。 //f2,p2,str2,flag2用于记录2序列中第二个字符的文件号,文件中的位置,字符内容,标记。 //c为2序列,由str1和str2联结组成,Pmin 为频繁域值。

//data t c为由“text collection”表生成的数据集。

//data flag0为由“text collection”表中所有flag标记为0的记录生成的数据集。

//data tem p2为由“临时二字词”表生成的数据集,用于存储所有超过频繁域值的2序列。

//n w ord计数器,用于记录当前2序列的个数。 输入:文本集。

输出:所有频繁长序列。

BEGI N

将“text collection”表中所有在“特殊符号表”中出现的字符的flag标记值修改为4

if标识表中没有新文本then

结束

endif

调用Deal flag0()

清空“临时长词表”。

将“text collection”数据表中位置连续的1和该连续1后面的一个字符组成字符串,存入“临时长词表”。

统计“临时长词表”中超过频繁域值的长序列,将其及其频率存入“频繁长序列集”。

将“标识表”中字段“是否参与生成词”为false 的记录修改为true。

E ND

Deal flag0()

{筛选“text collection”表中所有flag标记为0的记录,存入data flag0

do while not data flag0.eof

pmark=data flag0.Bookmark

if当前记录的flag=0then

f1=当前记录的文件号

p1=当前记录的位置号

str1=当前字符

data flag0.m ovenext

if not data flag0.eof then

f2=当前记录的文件号

p2=当前记录的位置号

str2=当前字符

if p1<>p2or f1<>f2then

data flag0.Bookmark=pmark

将data flag0的当前记录的flag值修改为3

else

nw ord=0

c=str1+str2

Daopai(c,pmark)

end if

else

data flag0.Bookmark=pmark

71

第1期 胥桂仙等:中文文本挖掘中的无词典分词的算法及其应用

相关文档
最新文档