第二步 你会缺少crfpp.lib 需要自己vs编译生成比较麻烦 我已生成好了,可直接使用
第三步 你会缺少pthread.lib 也是直接提供文件下载就行
第四步 python setup.py build
python setup.py install
正常运行,但import CRFPP调用时提示缺少dll,此时复制windows包下的/CRF++-0.58的libcrfpp.dll到python\Lib\site-packages目录下即可
此时配置完成
文档上不是有说明吗?有SWIG interface的版本。在它的例子目录里有chunking.py, pos.py, ner.py, template.py等。你自己挑一个试试不就成了。
在swig/python目录里有一个readme,你参考着做一次编译就可以成生。
#!/usr/bin/env pythonimport crfsuite
import sys
# Inherit crfsuite.Trainer to implement message() function, which receives
# progress messages from a training process.
class Trainer(crfsuite.Trainer):
def message(self, s):
# Simply output the progress messages to STDOUT.
sys.stdout.write(s)
def instances(fi):
xseq = crfsuite.ItemSequence()
yseq = crfsuite.StringList()
for line in fi:
line = line.strip('\n')
if not line:
# An empty line presents an end of a sequence.
yield xseq, tuple(yseq)
xseq = crfsuite.ItemSequence()
yseq = crfsuite.StringList()
continue
# Split the line with TAB characters.
fields = line.split('\t')
# Append attributes to the item.
item = crfsuite.Item()
for field in fields[1:]:
p = field.rfind(':')
if p == -1:
# Unweighted (weight=1) attribute.
item.append(crfsuite.Attribute(field))
else:
# Weighted attribute
item.append(crfsuite.Attribute(field[:p], float(field[p+1:])))
# Append the item to the item sequence.
xseq.append(item)
# Append the label to the label sequence.
yseq.append(fields[0])
if __name__ == '__main__':
# This demonstrates how to obtain the version string of CRFsuite.
print crfsuite.version()
# Create a Trainer object.
trainer = Trainer()
# Read training instances from STDIN, and set them to trainer.
for xseq, yseq in instances(sys.stdin):
trainer.append(xseq, yseq, 0)
# Use L2-regularized SGD and 1st-order dyad features.
trainer.select('l2sgd', 'crf1d')
# This demonstrates how to list parameters and obtain their values.
for name in trainer.params():
print name, trainer.get(name), trainer.help(name)
# Set the coefficient for L2 regularization to 0.1
trainer.set('c2', '0.1')
# Start training the training process will invoke trainer.message()
# to report the progress.
trainer.train(sys.argv[1], -1)