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分词后的结果,最后的评估如下: