运用CRF技术进行简单分词

匿名 (未验证) 提交于 2019-12-02 23:42:01

1,下载icwb2-data语料库
2, 按4-tag对训练数据(pku_training.utf8)进行标注,make_crf_train_data
所谓的4-tag:S,单个词;B,词首;E,词尾;M,词中
代码如下:

    input_data = codecs.open(pku_training, 'r', 'utf-8')    output_data = codecs.open(pku_training_out, '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 + " S\n")         else:             output_data.write(word[0] + " B\n")             for w in word[1:len(word)-1]:                 output_data.write(w + " M\n")             output_data.write(word[len(word)-1] + " E\n")     output_data.write("\n")  input_data.close() output_data.close() 

3,下载CRF+±0.58安装包,需要使用的就是crf_learn.exe,crf_test.exe和libcrfpp.dll这三个文件,将这三个文件和项目拷贝到一个文件夹
4,打开命令提示符,切换到项目路径,输入crf_learncrf_learn -f 3 -c 1.5 template pku_training_out.utf8 pku_model -t,其中template可以去下载工具包得=的example/*中拷贝,可以自己编写,必须有这个模板,可生成特征模板,如下图


5,测试数据进行标注

input_data = codecs.open(input_file, ‘r’, ‘utf-8’)
output_data = codecs.open(output_file, ‘w’, ‘utf-8’)
for line in input_data.readlines():
for word in line.strip():
word = word.strip()
if word:
output_data.write(word + “\tB\n”)
output_data.write("\n")
input_data.close()
output_data.close()
标注之后如:
高 B
兴 B
ͨ B
过 B
中 B
6,进行测试crf_test -m pku_model pku_test_out.utf8 > pku_test_result.utf8,结果如下
共 B B
ͬ B E
创 B B
造 B E
美 B B
好 B E
的 B S
新 B S
7,得到预测标注的文件后,需要将词转化为分词:
input_data = codecs.open(input_file, ‘r’, ‘utf-8’)
output_data = codecs.open(output_file, ‘w’, ‘utf-8’)
i=0
for line in input_data.readlines():
if line == “\r\n”:
output_data.write("\n")
else:
char_tag_pair = line.strip().split(’\t’)
char = char_tag_pair[0]
tag = char_tag_pair[2]
i=i+1
print(i)
if tag == ‘B’:
output_data.write(’ ’ + char)
elif tag == ‘M’:
output_data.write(char)
elif tag == ‘E’:
output_data.write(char + ’ ‘)
else: # tag == ‘S’
output_data.write(’ ’ + char + ’ ')
input_data.close()
output_data.close()
效果如下:
共同 创造 美好 的 新 世纪 ―― 二○○ 一 年 新年 贺词
( 二○○○年 十二月 三十一日 ) ( 附 图片 1 张 )
女士 们 , 先生 们 , 同志 们 , 朋友 们 :

8, pku_test_gold.utf8 标准,pku_test_word.utf8分词后的结果,最后的评估如下:

参考文章:http://www.52nlp.cn/中文分词入门之字标注法4

文章来源: https://blog.csdn.net/qq_41802858/article/details/91875188
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!