三、Python接口

3.1 安装

  1. 进入源码下的python 目录,执行命令:

    1. python3.6 setup.py build
    2. python3.6 setup.py install
  2. 如果希望安装到指定目录,则执行命令:

    1. python3.6 setup.py install --prefix=PREFIX

3.2 使用

  1. CRF++ 并没有提供Python 的训练结构,只提供了Python 的测试接口。

  2. CRFPP.Tagger 对象:调用解码器来解码。

    1. CRFPP.Tagger("-m ../model -v 3 -n2")

    创建对象,其中字符串中的内容就是crf_test 程序执行的参数(不包含测试文件)。

    • .add('line'):添加一行待解码的字段。
    • .clear():清除解码器的状态。
    • .parse():解码。它会修改解码器的状态。
    • .xsize():字段数量。
    • .size():样本行的数量。
    • .ysize():标记数量。
  3. 使用示例:

    1. import CRFPP
    2. tagger = CRFPP.Tagger("-m ../model -v 3 -n2")
    3. tagger.clear()
    4. tagger.add("Confidence NN")
    5. tagger.add("in IN")
    6. tagger.add("the DT")
    7. tagger.add("pound NN")
    8. tagger.add("is VBZ")
    9. tagger.add("widely RB")
    10. print "column size: " , tagger.xsize()
    11. print "token size: " , tagger.size()
    12. print "tag size: " , tagger.ysize()
    13. print "tagset information:"
    14. ysize = tagger.ysize()
    15. for i in range(0, ysize-1):
    16. print "tag " , i , " " , tagger.yname(i)
    17. tagger.parse()
    18. print "conditional prob=" , tagger.prob(), " log(Z)=" , tagger.Z()
    19. size = tagger.size()
    20. xsize = tagger.xsize()
    21. for i in range(0, (size - 1)):
    22. for j in range(0, (xsize-1)):
    23. print tagger.x(i, j) , "\t",
    24. print tagger.y2(i) , "\t",
    25. print "Details",
    26. for j in range(0, (ysize-1)):
    27. print "\t" , tagger.yname(j) , "/prob=" , tagger.prob(i,j),"/alpha=" , tagger.alpha(i, j),"/beta=" , tagger.beta(i, j),
    28. print "\n",
    29. print "nbest outputs:"
    30. for n in range(0, 9):
    31. if (not tagger.next()):
    32. continue
    33. print "nbest n=" , n , "\tconditional prob=" , tagger.prob()
    34. # you can access any information using tagger.y()...