作为一个python初学者+自然语言处理初学者,我用python写了一个简单的中文分词器,整个程序 加上注释100行左右,算是一个小练习。
1、数据来源 [1]
数据来自 Bakeoff2005 官方网站:http://sighan.cs.uchicago.edu/bakeoff2005/ 下载其中的 icwb2-data.tar.bz2 解压后取出以下文件:
训练数据:icwb2-data/training/pku_ training.utf8
测试数据:icwb2-data/testing/pku_ test.utf8
正确分词结果:icwb2-data/gold/pku_ test_ gold.utf8
评分工具:icwb2-data/script/socre
2、算法描述
算法是最简单的正向最大匹配(FMM):
用训练数据生成一个字典
对测试数据从左到右扫描,遇到一个最长的词,就切分下来,直到句子结束
注:这是最初的算法,这样做代码可以控制在60行内,后来看测试结果发现没有很好地处理数字问题, 才又增加了对数字的处理。
3、源代码及注释
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Author: minix
# Date: 2013-03-20
# Email: minix007@foxmail.com
import codecs
import sys
# 由规则处理的一些特殊符号
numMath = [u'0', u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9']
numMath_suffix = [u'.', u'%', u'亿', u'万', u'千', u'百', u'十', u'个']
numCn = [