在 第一节发布的样本中,修改类 StanfordPOSTagger 如下,增加训练模型文件方法:
# 词性标注
class StanfordPOSTagger(StanfordCoreNLP):
... 以上代码略,增加如下方法
# 生成训练配置文件命令
def __buildprop(self):
self.propline = 'java -mx1g -cp "' + self.jarpath + '" ' + self.classfier + ' -genprops'
def genpropfile(self,propath):
self.__buildprop()
propfile = os.popen(self.propline,'r').read()
self.savefile(propath,propfile)
print "保存词性标注训练配置文件在", propath
# 生成训练命令
def __buildtrain(self,propath):
self.trainline = 'java -mx4g -cp "' + self.jarpath + '" ' + self.classfier + ' -props "' + propath + '"'
def trainmodel(self,propath):
self.__buildtrain(propath)
os.system(self.trainline)
print "模型训练完成,保存在", propath ," model 配置"
训练脚本如下:
# -*- coding:utf-8 -*-
import sys,os
reload(sys)
sys.setdefaultencoding("utf-8")
curdir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(curdir)
from nltk import Tree
# stanford 中文词性标注
from stanford_postagger.stanford import StanfordPOSTagger
root = os.path.join(curdir,"stanford_corenlp/")
modelpath = os.path.join(root,"models","pos-tagger","chinese-distsim","chinese-distsim.tagger")
st = StanfordPOSTagger(root,modelpath)
# 训练词性标注,生成配置文件
propspath = "my.tagger.props"
st.genpropfile(propspath) # 生成配置文件,更改里面的配置
更改配置文件 my.tagger.props 如下:
训练文件 train.txt 内容如下
在_P 包含_VV 问题_NN 的_DEC 所有_DT 解_VV 的_DEC 解空间_NN 树_NN 中_LC ,_PU 按照_P 深度优先_NN 搜索_NN 的_DEC 策略_NN ,_PU
从_P 根节点_NN 出发_VV 深度_JJ 探索_NN 解空间_NN 树_NN 。_PU
然后执行训练代码,生成训练文件
st.trainmodel("my.tagger.props") # 根据配置文件的配置项生成训练模型
# 使用模型文件
st = StanfordPOSTagger(root,"my.model.tagger") # my.model.tagger 就是训练的模型文件