运用CRF技术进行简单分词

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值