NLP中文信息处理---正向最大匹配法分词 弄了好几天正向最大匹配法分词,终于弄完了吧。Python写的。Python确实是一门好语言,写起来很简单、顺手。
一、关于正向最大匹配法分词
中文分词(Chinese Word Segmentation)指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。
正向最大匹配法: 例子: 将句子 ’ 今天来了许多新同事 ’ 分词。 设最大词长为5
今天来了许 今天来了 今天来 今天 ====》 得到一个词 – 今天 来了许多新 来了许多 来了许 来了 来 ====》 得到一个词 – 来 了许多新同 了许多新 了许多 了许 了 ====》 得到一个词 – 了 许多新同事 许多新同 许多新 许多 ====》得到一个词 – 许多 新同事 新同 新 ====》得到一个词 – 新 同事 ====》得到一个词 – 同事
最后正向最大匹配的结果是:/今天/来/了/许多/新/同事/ 二、正向最大匹配分词算法 三、语料库的处理与算法的输入 语料库的处理流程: 输入:人民日报语料库199801.txt
输出:dict.txt词表文件 分词算法:论文网
输入:将dict.txt处理后得到的list集,以及最大词长;待分词的句子
输出:分词后的句子 四、Python实现
1. 语料库的初步处理 ( MaxBuildDict.py ) [python] view plaincopyprint? 01.# -*- coding: cp936 -*- 02.#最大匹配法进行分词----创建词表文件. 03.#author 徐能 04.#date 2013/3/23 05.import string 06.import re 07. 08.#输入:语料库199801.txt文件; 输出:换行分割后的词表文件dict.txt(已经去重复, 去日期) 09.def create_dict(filename): 10. print("读取文件......") 11. src_data = open(filename,'r').read() 12. sp_data = src_data.split()#分割 13. 14. print("原始词数为:",len(sp_data)) 15. set_data = set(sp_data) #去重复 16. data = list(set_data) #set转换成list, 否则不能索引 17. print("去除重复后总词数为:",len(data)) 18. 19. print("正在建立词表文件......") 20. tmp = [] 21. for i in range(0,len(data)): 22. if re.compile(r'\d+\-\S+').match(data[i]): #去除类似这样的词'19980101-01-001-002/m' 23. continue 24. else: 25. p_ok_data = re.compile(r'\/\w+').sub('\n',data[i]) #将类似的词'埃特纳/ns'替换为'埃特纳' 26. if re.compile(r'(\[\S+)|(\]\S+)').match(p_ok_data): #找到以'['或']'开头的词 27. ok_data = re.compile(r'(\]\w+\[)|(\])|(\[)').sub('',p_ok_data) #去除']nt[澳门',']澳门','[澳门'三类词的头部无用部分(先匹配长的部分) 28. tmp.append(ok_data) 29. continue 30.&n [1] [2] [3] [4] [5] [6] 下一页
|