《数字图书馆》第七讲分词(续2).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分词 有人把文本解析比喻成人体的消化过程,输入食物,分解出有用的氨基酸和葡萄糖等。这部分处理从整段的文本中解析出有意义的词语。 中文分词 因为中文文本中词和词之间不像英文一样存在边界,所以中文分词是一个专业处理中文信息的搜索引擎首先面对的问题。英语、法语和德语等西方语言通常采用空格或标点符号将词隔开,具有天然的分隔符,所以词的获取简单。但是中文、日文和韩文等东方语言,虽然句子之间有分隔符,但词与词之间没有分隔符,所以需要靠程序切分出词。另外,除了可以用于全文查找,中文分词的方法也被应用到英语手写体识别中。因为在识别手写体时,单词之间的空格就不很清楚了。 查找词典算法 (机械分词法) 在讨论查找词典方法之前,首先看看文本方式的词典格式: 滤波器 n 0 堵击 v 0 稿费 n 7 神机妙算 i 0 开设 vn 0 v 32 每行一个词,然后是这个词可能的词性和语料库中按这个词性出现的次数。存储基本词性相关信息的类如下: public class POSInf { public short pos=0; //词性 public int freq=0; //词频 public String seCode = null; //词的语义编码 } 在基于词典的中文分词方法中,词典匹配算法是基础。使用的词典规模往往在几十万词义上。为了保证切分速度,需要选择一个好的查找词典算法。本节介绍词典的Tire树组织结构及词典的最大长度查找方法等。(早期的结构是倒排索引) 在一个三叉搜索树(TernarySearchTrie)中,每一个节点包括一个字符,但和数字搜索树不同,三叉搜索树只有三个指针,一个指向左边的树,一个指向右边的树,还有一个向下,指向单词的下一个数据单元。三叉搜索树是二叉搜索树和数字搜索树的混合体。它有和数字搜索树差不多的速度但是和二叉搜索树一样只需要相对较少的内存空间。单词的读入顺序对于创建平衡的三叉搜索树很重要,但对于二叉搜索树就不是太重要。 通过选择一个排序后的数据单元集合的中间值,并把它作为开始节点,我们可以创建一个平衡的三叉树。我们再次以有序的数据单元 (as at be by he in is it of on or to) 为例。 首先我们把关键字“is”作为中间值并且构建一个包含字母“i”的根节点。它的直接后继结点包含字母“s”并且可以存储任何与“is”有关联的数据。对于“i”的左树,我们选择“be”作为中间值并且创建一个包含字母“b”的结点,字母“b”的直接后继结点包含“e”。该数据存储在“e”结点。对于“i”的右树,按照逻辑,选择“on”作为中间值,并且创建“o”结点以及它的直接后继结点“n”。最终的三叉树如图4-3所示: 图4-3 三叉树 垂直的虚线代表一个父节点的下面的直接的后继结点。只有父节点和它的直接后继节点才能形成一个数据单元的关键字;“i”和“s”形成关键字“is”,但是“i”和“b”不能形成关键字,因为它们之间仅用一条斜线相连,不具有直接后继关系。图4-3中带圈的节点为终止节点,如果查找一个词以终止节点结束,则说明三叉树包含这个词。 TernarySearchTrie本身存储关键字到值的对应关系,可以当作HashMap对象来使用。关键字按照字符拆分成了Node,以TSTNode的实例存在。值存储在TSTNode的data属性中。TSTNode的实现如下: public final class TSTNode { /** 节点的值 */ public Data data=null;// data属性可以存储词原文和词性、词频等相关的信息 protected TSTNode loNode; //左边节点 protected TSTNode eqNode; //中间节点 protected TSTNode hiNode; //右边节点 protected char splitchar; // 本节点表示的字符 /** * 构造方法 * *@param splitchar 该节点表示的字符 */ protected TSTNode(char splitchar) { this.splitchar = splitchar; } public String toString() { return splitchar:+ splitchar; } } 基本的查找词典过程是:输入一个词,返回这个词对应的TSTNode,如果该词不在词典中则返回空。查找词典的过程中,从树的根节点匹配Key。Key 按Char

文档评论(0)

autohhh + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档