CRF++中文分词
2016-10-02 12:01
141 查看
本文实现python的CRF++中文分词
预备工作 当然是下载CRF++CRF++
Linux版本的安装方法是:
i. 解压到某目录下
ii. 打开控制台,将当前目录切换到解压目录
iii. 依次输入命令:
./configure
make
su
make install
注:需要root权限才能成功安装。
密码错误时可能是自己没有root账户
由于这里使用 python 工具包进行训练和测试,需要安装 python 工具包。进入 python 文件夹,运行以下命令安装:
python setup.py build
sudo python setup.py install
下面我讲一下我的思路:
由于Task2根目录下的_CRFPP.so没有引入
所以正常能运行的是文件夹Task2_B-I下的内容,此文件夹下对词语分类只有B I两种
首先我用msr_training.utf8 通过python程序 make_crf_train_data.py转化成训练语料需要的格式,即tag_train_data.utf8,
然后我开始训练模型,得到model 再利用CRF自带的python工具包,对输入文本分词,具体实现是通过python程序 crf_segment.py ,
最后就将msr_test.utf8 分词得到 crf_tag_result.utf8.
crf_segment.py
#!/usr/bin/python # -*- coding: utf-8 -*- # crf_segmenter.py # Usage:python crf_segmenter.py crf_model test_file result_file # 利用CRF自带的python工具包,对输入文本进行分词 import codecs import sys import CRFPP def crf_segmenter(input_file, output_file, tagger): input_data = codecs.open(input_file, 'r', 'utf-8') output_data = codecs.open(output_file, 'w', 'utf-8') for line in input_data.readlines(): tagger.clear() for word in line.strip(): word = word.strip() if word: tagger.add((word + "\to\tB").encode('utf-8')) tagger.parse() size = tagger.size() xsize = tagger.xsize() for i in range(0, size): for j in range(0, xsize): char = tagger.x(i, j).decode('utf-8') tag = tagger.y2(i) if tag == 'B': output_data.write(' ' + char) elif tag == 'I': output_data.write(char) output_data.write('\n') input_data.close() output_data.close() if __name__ == '__main__': if len(sys.argv) != 4: print("Usage: python crf_segmenter.py crf_model test_file result_file") sys.exit() crf_model = sys.argv[1] input_file = sys.argv[2] output_file = sys.argv[3] tagger = CRFPP.Tagger("-m " + crf_model) crf_segmenter(input_file, output_file, tagger)
make_crf_train_data.py
#!/usr/bin/python # -*- coding: utf-8 -*- # make_crf_train_data.py # 得到CRF++要求的格式的训练文件 # 用法:命令行--python dataprocess.py input_file output_file import sys import codecs # 2 tags for character tagging: B I def character_4tagging(input_file, output_file): input_data = codecs.open(input_file, 'r', 'utf-8') output_data = codecs.open(output_file, 'w', 'utf-8') for line in input_data.readlines(): word_list = line.strip().split() for word in word_list: if len(word) == 1: output_data.write(word + "\tB\n") else: output_data.write(word[0] + "\tB\n") for w in word[1:len(word) - 1]: output_data.write(w + "\tI\n") output_data.write(word[len(word) - 1] + "\tI\n") output_data.write("\n") input_data.close() output_data.close() if __name__ == '__main__': if len(sys.argv) != 3: print ("Usage: python dataprocess.py inputfile outputfile") sys.exit() input_file = sys.argv[1] output_file = sys.argv[2] character_4tagging(input_file, output_file)
如果还是不明白的,可以看我的GitHub,网址:https://github.com/angelamin/Python_study/tree/master/Task2/Task2_B-I
希望对跟我一样正在努力学习自然语言处理的童鞋们有帮助哦~
相关文章推荐
- 垃圾邮件过滤器 python简单实现
- 做网站要主要的百度分词技术
- Python smallseg分词用法实例分析
- python实现中文分词FMM算法实例
- IKAnalyzer分词技术
- xunsearch数字搜索的特殊处理
- 基于SNS的文本数据挖掘
- C#汉字转拼音,自动识别多音字,带声调,提供正向、逆向、双向分词算法的小程序
- C#分词算法:正向、逆向、双向最大匹配算法
- 学习记录 - 2
- 盘古分词词性
- PhpanAlysis分词技术
- PhpanAlysis分词技术
- 文件名搜索分词设计
- 字符串分词
- Windows下CRF++ 分词实践及Python分词效果评测
- Elasticsearch2.x 全文检索之——文档匹配度
- standford NLP课程笔记二 分词
- Python实现中文小说词频统计
- 以文件为单位的分句、分词python封装脚本