crf++完成分词任务(人民日报)
安装好crf++后(其实这里用到的只是crflearn.exe和crftest.exe)和下载人民日报的数据之后,我们就可以准备CRF方法的训练过程了。
首先是对数据进行处理,生成训练所需的文件。我们去除一些不必要的符号、空格等,对词的位置进行标注(分为单字和多字处理),生成几个文件。其中训练数据和测试数据按照9:1的比例设置。
get_train_data.py
# coding = utf8
'''
处理人民日报文本数据,生成训练所需数据train.data等,可用来训练crf模型
'''
import codecsdef covertTag():src_file = codecs.open('./'+'guomengfei.txt','r') #读标注数据# 写train.data/test.data/test_real.data等文件test_real_file = codecs.open('./' + 'test_rel.data', 'w', 'utf-8')test_file = codecs.open('./' + 'test.data', 'w', 'utf-8')train_file = codecs.open('./' + 'train.data', 'w', 'utf-8')i = 0 #行数for line in src_file.readlines():line = line.strip('\r\n\t') #去掉首尾的格式字符if line == "": #处理空行:跳过continuei += 1terms = line.split(' ')test = Falseif i % 10 == 0: #按照9:1的比例设置训练集train.data和测试集test.datatest = Trueprint linefor term in terms:term = term.strip('\t ')i1 = term.find('[') #查找'[',去除'['if i1 >= 0 and len(term) >i1 + 1:term = term[i1 + 1:] #提取'['后的内容i2 = term.find(']') #同上if i2 >= 0 and len(term) >i2 + 1:term = term[:i2] #提取']'前的内容if len(term) <= 0: #啥都没了,处理什么continueword, pos = term.split('/') #词,词性if pos == 'm': #数字,跳过continueif test == True:#test.datafor w in word.decode('utf-8'):test_file.write(w + u'\tB\n')#real dataword = word.decode('utf-8')if len(word) == 1: #单字成词,置为Stest_real_file.write(word + '\tS\n')else: #多字处理:按照'头'/'中间部分'/'尾'处理,对应B/M/Etest_real_file.write(word[0] + '\tB\n')for w in word[1 : len(word) - 1]:test_real_file.write(word[0] + '\tM\n')test_real_file.write(word[0] + '\tE\n')else:#train.dataword = word.decode('utf-8')if len(word) == 1: #单字成词,置为Strain_file.write(word + '\tS\n')else: #多字处理:按照'头'/'中间部分'/'尾'处理,对应B/M/Etrain_file.write(word[0] + '\tB\n')for w in word[1 : len(word) - 1]:train_file.write(word[0] + '\tM\n')train_file.write(word[0] + '\tE\n')if test:test_file.write(u'\n')test_file.flush()test_real_file.write(u'\n')test_real_file.flush()else:train_file.write(u'\n')train_file.flush()print iif __name__ == '__main__':covertTag()
运行get_train_data.py,将会生成几个文件:
train.data 训练数据,包含label(正确答案)
test_data 测试数据,label全部是B,需要训练
test_real.data 测试数据的正确答案
之后cd到目录下,命令行下面执行(我的txt文件为199801_utf8,template是模板文件,可能需要从crfpp里面复制过来,可以找一下),分别是训练、测试命令。测试(分词结果)放在了result.txt中。
crf_learn template train.data modelcrf_test -m model 199801_utf8.txt > result.txt
crf++完成分词任务(人民日报)相关推荐
- 使用CRF++进行分词的原理和实现过程
使用CRF分词的原理和实现过程 目前业内分词效果最好的是CRF模型,而CRF++是CRF实现的比较成熟的工具,下面是用CRF++做分词的过程. 1.使用4-tags标记,对训练语料做预处理 分别用B代 ...
- bilstm+crf中文分词_基于LSTM的中文分词模型
中文分词任务是一个预测序列的经典问题,已知的方法有基于HMM[1]的分词方法.基于CRF[2]的方法和基于LSTM的分词方法. 本文介绍Xinchi Chen等人[3]提出的基于LSTM的分词方法.根 ...
- 条件随机场 (CRF) 分词序列谈之一(转)
http://langiner.blog.51cto.com/1989264/379166 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.ht ...
- NLP之CRF分词训练(六)
分三步 1.先分词 2.做BEMS标注,同时做词性标注 3.训练模型 1.对语料进行分词 拿到测试部的语料或者其他渠道的语料,先对语料进行分词,我刚刚开始是用NS分词的,等CRF模型训练好后,可以直接 ...
- NLP-基础任务-中文分词算法(3)-基于字:基于序列标注的分词算法【BiLSTM+CRF】
CRF:条件随机场,一种机器学习技术.给定一组输入随机变量条件下,另一组输出随机变量的条件概率分布模型. 以一组词性标注为例,给定输入X={我,喜欢,学习},那么输出为Y={名词,动词,名词}的概率应 ...
- CRF分词的纯Java实现
与基于隐马尔可夫模型的最短路径分词.N-最短路径分词相比,基于随机条件场(CRF)的分词对未登录词有更好的支持.本文(HanLP)使用纯Java实现CRF模型的读取与维特比后向解码,内部特征函数采用 ...
- 比较好的中文分词方案汇总推荐
https://www.toutiao.com/a6690352675990536718/ 2019-05-13 11:45:19 中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础 ...
- 常用的开源中文分词工具
转载自: http://www.scholat.com/vpost.html?pid=4477 常用的开源中文分词工具 由于中文文本词与词之间没有像英文那样有空格分隔,因此很多时候中文文本操作都涉及 ...
- 自然语言处理中的分词问题总结
自然语言处理中的分词问题总结 众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思.把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称 ...
最新文章
- Django博客系统注册(定义用户模型类)
- @async 默认线程池_.NET Web应用中为什么要使用async/await异步编程?
- Xcode 8 控制台输出大量不用的log的问题解决NSLog失效的解决
- OpenCV参考手册之Mat类详解1
- 《大话数据结构》第9章 排序 9.10 总结回顾
- Javascript跳转页面和打开新窗口等方法
- 122. 买卖股票的最佳时机 II008(贪心算法+思路)
- 基于JAVA+SpringMVC+MYSQL的图书管理系统
- android自定义view流程,Android 自定义View--从源码理解View的绘制流程
- 暴风影音- C++研发工程师(windows方向-在线视频)
- 【第16周复盘】学习的飞轮
- Android 侧滑抽屉菜单
- 【CVPR2021】OCR文本检测MOST解读
- android 语音助手开发,Kotlin开发AI语音助手App 先人一步抓紧移动端AI时代发展机会...
- 机器学习Machine Learning:特征选择Feature Selection 与 数据降维Dimension Reduction的区别?
- ESP8266-Arduino编程实例-LPS25H压阻式压力传感器驱动
- 程序员基础内功夯实——数据结构篇
- druid 配置理解及监控界面参数理解
- 基于arduino的智能家居系统
- 【海康威视研究院】杭州3面试记录