资源预览内容
第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
第9页 / 共20页
第10页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
文本挖掘模型:本特征提取文本挖掘模型结构示意图1. 分词分词实例: 提高人民生活水平:提高、高人、人民、民生、生活、活水、水平分词基本方法: 最大匹配法、最大概率法分词、最短路径分词方法1.1 最大匹配法 中文分词在中文信息处理中是最最基础的,无论机器翻译亦或信息检索还是其他相关应用,如果涉及中文,都离不开中文分词,因此中文分词具有极高的地位。正向最大匹配法算法如下图:实例:S1=计算语言学课程是三个课时,设定最大词长MaxLen= 5,S2= (1)S2=“”;S1不为空,从S1左边取出候选子串W=计算语言学;(2)查词表,“计算语言学”在词表中,将W加入到S2中,S2=“计算语言学/ ”,并将W从S1中去掉,此时S1=课程是三个课时;(3)S1不为空,于是从S1左边取出候选子串W=课程是三个;(4)查词表,W不在词表中,将W最右边一个字去掉,得到W=课程是三;(5)查词表,W不在词表中,将W最右边一个字去掉,得到W=课程是;(6)查词表,W不在词表中,将W最右边一个字去掉,得到W=课程(7)查词表,W在词表中,将W加入到S2中,S2=“计算语言学/ 课程/ ”,并将W从S1中去掉,此时S1=是三个课时;(8)S1不为空,于是从S1左边取出候选子串W=是三个课时;(9)查词表,W不在词表中,将W最右边一个字去掉,得到W=是三个课;(10)查词表,W不在词表中,将W最右边一个字去掉,得到W=是三个;(11)查词表,W不在词表中,将W最右边一个字去掉,得到W=是三(12)查词表,W不在词表中,将W最右边一个字去掉,得到W=“是”,这时W是单字,将W加入到S2中,S2=“计算语言学/ 课程/ 是/ ”,并将W从S1中去掉,此时S1=三个课时;。(21)S2=“计算语言学/ 课程/ 是/ 三/ 个/ 课时/ ”,此时S1=。(22)S1为空,输出S2作为分词结果,分词过程结束。代码如下:cppview plaincopy1. #include2. #include3. #include4. #include5. #include6. usingnamespacestd;7. usingnamespacestdext;8. 9. classCDictionary10. 11. public:12. CDictionary();/将词典文件读入并构造为一个哈希词典13. CDictionary();14. intFindWord(stringw);/在哈希词典中查找词15. private:16. stringstrtmp;/读取词典的每一行17. stringword;/保存每个词18. hash_mapwordhash;/用于读取词典后的哈希19. hash_map:iteratorworditer;/20. typedefpairsipair;21. ;22. 23. /将词典文件读入并构造为一个哈希词典24. CDictionary:CDictionary()25. 26. ifstreaminfile(wordlexicon);/打开词典27. if(!infile.is_open()/打开词典失败则退出程序28. 29. cerrUnabletoopeninputfile:wordlexicon30. -bailingout!word;/读入每行第一个词37. wordhash.insert(sipair(word,1);/插入到哈希中38. 39. 40. 41. CDictionary:CDictionary()42. 43. 44. 45. /在哈希词典中查找词,若找到,则返回,否则返回46. intCDictionary:FindWord(stringw)47. 48. if(wordhash.find(w)!=wordhash.end()49. 50. return1;51. 52. else53. 54. return0;55. 56. 57. 58. #defineMaxWordLength10/最大词长为个字节(即个汉字)59. #defineSeparator/词界标记60. 61. CDictionaryWordDic;/初始化一个词典62. 63. /对字符串用最大匹配法(正向或逆向)处理64. stringSegmentSentence(strings1)65. 66. strings2=;/用s2存放分词结果67. while(!s1.empty()68. 69. intlen=(int)s1.length();/取输入串长度70. if(lenMaxWordLength)/如果输入串长度大于最大词长71. 72. len=MaxWordLength;/只在最大词长范围内进行处理73. 74. /stringw=s1.substr(0,len);/(正向用)将输入串左边等于最大词长长度串取出作为候选词75. stringw=s1.substr(s1.length()-len,len);/逆向用76. intn=WordDic.FindWord(w);/在词典中查找相应的词77. while(len2&n=0)/如果不是词78. 79. len-=2;/从候选词右边减掉一个汉字,将剩下的部分作为候选词80. /w=w.substr(0,len);/正向用81. w=s1.substr(s1.length()-len,len);/逆向用82. n=WordDic.FindWord(w);83. 84. /s2+=w+Separator;/(正向用)将匹配得到的词连同词界标记加到输出串末尾85. w=w+Separator;/(逆向用)86. s2=w+s2;/(逆向用)87. /s1=s1.substr(w.length(),s1.length();/(正向用)从s1-w处开始88. s1=s1.substr(0,s1.length()-len);/(逆向用)89. 90. returns2;91. 92. 93. /对句子进行最大匹配法处理,包含对特殊字符的处理94. stringSegmentSentenceMM(strings1)95. 96. strings2=;/用s2存放分词结果97. inti;98. intdd;99. while(!s1.empty()100. 101. unsignedcharch=(unsignedchar)s10;102. if(ch128)/处理西文字符103. 104. i=1;105. dd=(int)s1.length();106. while(idd&(unsignedchar)s1i128)&(s1i!=10)&(s1i!=13)/s1i不能是换行符或回车符107. 108. i+;109. 110. if(ch!=32)&(ch!=10)&(ch!=13)/如果不是西文空格或换行或回车符111. 112. s2+=s1.substr(0,i)+Separator;113. 114. else115. 116. /if(ch=10|ch=13)/如果是换行或回车符,将它拷贝给s2输出117. if(ch=10|ch=13|ch=32)/谢谢读者mces89的指正118. 119. s2+=s1.substr(0,i);120. 121. 122. s1=s1.substr(i,dd);123. continue;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号