CRF++安装及使用

  1. Linux版本
    1)下载
    下载CRF++的linux版本,http://taku910.github.io/crfpp/ 注意 下载tar.gz的才是linux的,自己下错了,折腾好久。
    2)解压
    命令格式:tar -zxvf 压缩文件名.tar.gz;解压缩后的文件只能放在当前的目录。
    3)安装gcc 还有g++
    yum install gcc 查看是否安装成功 gcc -v
    yum install gcc-c++
    4)安装CRF++ (编译)
    cd 到解压的路径下
    以下我全部用的sudo
    ./configure
    make
    sudo make install
    5) 运行模型
    crf_learn template train.data model
    如果crf_learn没有放在指定目录下,可以指定路径后././crf_learn 之后再运行(路径写的估计不对),我还是复制到运行的路径下吧,这样更好。
    6)Python接口
    线上有了新数据后,不可能每次都使用crf_test敲命令行进行预测,所以需要可以运行的脚本,故写个Python接口。(注意安装的要为2.7版本的python ,如果不是就在Linux上多装一个,记得把环境变量修改过来 Python -v 查看Python版本)
    进入子目录Python中 (CRF++中的文件)
    (1)python setup.py build
    (2)python setup.py install
    进入python解释器,import CRFPP测试是否安装成功
    若出现ImportError: libcrfpp.so.0: cannot open shared object file: No such file or directory 。
    解决方法:(未解决的话,见下方方法,亲测有效)
    ln -s /usr/local/lib/libcrfpp.so.0 /usr/lib/
    6.重新import试试看,是否成功。
    ImportError: libcrfpp.so.0: cannot open shared object file: No such file or directory
    可用下面的方法解决
    sudo vim /etc/ld.so.conf (其中是l不是i)
    添加
    include /usr/local/lib
    保存后加载一下
    sudo /sbin/ldconfig -v
    以上主要来自于 https://blog.csdn.net/u010004460/article/details/77198389

  2. Windows 版本
    1)下载
    下载CRF++的linux版本,http://taku910.github.io/crfpp/ 注意 下载.zip结尾的是Windows的,下载下来看一下,里面的内容,保证没有问题。
    2)训练
    基本的训练操作与Linux相同。
    3)Python接口
    pip install crfpp

  1. Python模型预测代码
    import CRFPP
    import codecs

模型加载

tagger=CRFPP.Tagger(r'-m C:\Users\secoo\Desktop\CRF++\model')

加载测试文件

input_data = codecs.open(r'C:\Users\secoo\Desktop\CRF++\shangde.txt', 'r', 'utf-8')
word_str=input_data.readlines()
word_str=''.join(word_str)

模型预测结果

print(tagger.parse(word_str))

'-----------------网上的使用方法----------------------'
def crf_segmenter(input_file, output_file, tagger):
input_data = codecs.open(input_file, 'r', 'utf-8')
output_data = codecs.open(output_file, 'w', 'utf-8')
for line in input_data.readlines():
tagger.clear() ##没计算完一个句子(一篇文章)就清掉,毕竟是依赖上下文做预测
for word in line.strip():
word = word.strip()
if word:
tagger.add((word + "\to\tB").encode('utf-8')) ##将要预测的文章中的字添加到tagger中
tagger.parse() ##进行预测
size = tagger.size() ##输入的一篇文章中字的个数
xsize = tagger.xsize() ##输入的文章的个数
for i in range(0, size):
for j in range(0, xsize):
char = tagger.x(i, j).decode('utf-8') ##获取指定位置的测试的文字
tag = tagger.y2(i) ##获取指定位置的文字的预测的Tag
if tag == 'B':
output_data.write(' ' + char)
elif tag == 'M':
output_data.write(char)
elif tag == 'E':
output_data.write(char + ' ')
else:
output_data.write(' ' + char + ' ')
output_data.write('\n')
input_data.close()
output_data.close()

https://blog.csdn.net/u010189459/article/details/38546115

你可能感兴趣的:(CRF++安装及使用)