安装好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++完成分词任务(人民日报)相关推荐

  1. 使用CRF++进行分词的原理和实现过程

    使用CRF分词的原理和实现过程 目前业内分词效果最好的是CRF模型,而CRF++是CRF实现的比较成熟的工具,下面是用CRF++做分词的过程. 1.使用4-tags标记,对训练语料做预处理 分别用B代 ...

  2. bilstm+crf中文分词_基于LSTM的中文分词模型

    中文分词任务是一个预测序列的经典问题,已知的方法有基于HMM[1]的分词方法.基于CRF[2]的方法和基于LSTM的分词方法. 本文介绍Xinchi Chen等人[3]提出的基于LSTM的分词方法.根 ...

  3. 条件随机场 (CRF) 分词序列谈之一(转)

    http://langiner.blog.51cto.com/1989264/379166 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.ht ...

  4. NLP之CRF分词训练(六)

    分三步 1.先分词 2.做BEMS标注,同时做词性标注 3.训练模型 1.对语料进行分词 拿到测试部的语料或者其他渠道的语料,先对语料进行分词,我刚刚开始是用NS分词的,等CRF模型训练好后,可以直接 ...

  5. NLP-基础任务-中文分词算法(3)-基于字:基于序列标注的分词算法【BiLSTM+CRF】

    CRF:条件随机场,一种机器学习技术.给定一组输入随机变量条件下,另一组输出随机变量的条件概率分布模型. 以一组词性标注为例,给定输入X={我,喜欢,学习},那么输出为Y={名词,动词,名词}的概率应 ...

  6. CRF分词的纯Java实现

    与基于隐马尔可夫模型的最短路径分词.N-最短路径分词相比,基于随机条件场(CRF)的分词对未登录词有更好的支持.本文(HanLP)使用纯Java实现CRF模型的读取与维特比后向解码,内部特征函数采用  ...

  7. 比较好的中文分词方案汇总推荐

    https://www.toutiao.com/a6690352675990536718/ 2019-05-13 11:45:19 中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础 ...

  8. 常用的开源中文分词工具

    转载自:  http://www.scholat.com/vpost.html?pid=4477 常用的开源中文分词工具 由于中文文本词与词之间没有像英文那样有空格分隔,因此很多时候中文文本操作都涉及 ...

  9. 自然语言处理中的分词问题总结

    自然语言处理中的分词问题总结 众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思.把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称 ...

最新文章

  1. Django博客系统注册(定义用户模型类)
  2. @async 默认线程池_.NET Web应用中为什么要使用async/await异步编程?
  3. Xcode 8 控制台输出大量不用的log的问题解决NSLog失效的解决
  4. OpenCV参考手册之Mat类详解1
  5. 《大话数据结构》第9章 排序 9.10 总结回顾
  6. Javascript跳转页面和打开新窗口等方法
  7. 122. 买卖股票的最佳时机 II008(贪心算法+思路)
  8. 基于JAVA+SpringMVC+MYSQL的图书管理系统
  9. android自定义view流程,Android 自定义View--从源码理解View的绘制流程
  10. 暴风影音- C++研发工程师(windows方向-在线视频)
  11. 【第16周复盘】学习的飞轮
  12. Android 侧滑抽屉菜单
  13. 【CVPR2021】OCR文本检测MOST解读
  14. android 语音助手开发,Kotlin开发AI语音助手App 先人一步抓紧移动端AI时代发展机会...
  15. 机器学习Machine Learning:特征选择Feature Selection 与 数据降维Dimension Reduction的区别?
  16. ESP8266-Arduino编程实例-LPS25H压阻式压力传感器驱动
  17. 程序员基础内功夯实——数据结构篇
  18. druid 配置理解及监控界面参数理解
  19. 基于arduino的智能家居系统
  20. 【海康威视研究院】杭州3面试记录

热门文章

  1. drawable和mipmap目录
  2. 微信公众号文章排版需要注意的两个小细节
  3. java超类 子类_Java超类引用子类对象的规律
  4. 电源电路中电感为什么会啸叫?
  5. 【JAVASE】抽象类
  6. 搜索引擎是如何工作的
  7. CSDN高校巡讲石大站—青岛易软天创CEO王春生与我们分享“学习 工作 创业”
  8. 前后端分离:停车管理系统(Java后端,vue前端)
  9. 查询列表姓名及一维数字
  10. 可扩展性技术组织的角色——RASCI工具