机器在学习
分词是自然语言处理的一个基本工作,中文分词和英文不同,字词之间没有空格,可以将中文分词方法简单归纳为:
其中,基于词表的分词方法最为简单,根据起始匹配位置不同可以分为:
三种方法思想都很简单,今天我们用python实现前向最大匹配算法。
前向最大匹配算法,顾名思义,就是从待分词句子的左边向右边搜索,寻找词的最大匹配。我们需要规定一个词的最大长度,每次扫描的时候寻找当前开始的这个长度的词来和字典中的词匹配,如果没有找到,就缩短长度继续寻找,直到找到字典中的词或者成为单字。
下面是我的代码。
word_dict = ['中国', '政府', '基本', '大量', '赌博', '和谐', '菲律宾', '人民', '游客', '菲律宾', '机械', '大量', '活动', '从事', '然后', '他们', '追捕', '进入']test_str = '''在中国政府的支持下菲律宾宣布对大量中国人进行追捕,他们基本上以游客身份进入菲律宾,然后从事中国禁止的网络赌博活动。'''# 获取分词def getSeg(text): # 句子为空 if not text: return '' # 句子成为一个词 if len(text) == 1: return text # 此处写了一个递归方法 if text in word_dict: return text else: small = len(text) - 1 text = text[0:small] return getSeg(text)def main(): global test_str, word_dict test_str = test_str.strip() # 正向最大匹配分词测试 最大长度5 max_len = max(len(word) for word in word_dict) result_str = [] # 保存分词结果 result_len = 0 print('input :', test_str) while test_str: tmp_str = test_str[0:max_len] seg_str = getSeg(tmp_str) seg_len = len(seg_str) result_len = result_len + seg_len if seg_str.strip(): result_str.append(seg_str) test_str = test_str[seg_len:] print('output :', result_str)if __name__ == '__main__': main()
看一下分词的结果吧!
The End
已发布
分类
标签:
给思原同学点赞!
您的电子邮箱地址不会被公开。 必填项已用*标注
评论 *
显示名称
电子邮箱地址
网站地址
Δ
发表回复