Windows上的NLTK MEGAM Max Ent算法

ToO*_*sIK 5 classification nltk

我一直在玩Python上的NLTK,但由于缺少任何版本的MEGAM库等于或高于0.3的Windows 64位可执行文件而无法使用MEGAM Max Ent算法(需要包含NLTK的-nobias选项)工作,在第0.3节中介绍.

http://www.cs.utah.edu/~hal/megam/

作者建议编译自己的可执行文件,尽管让O'Caml在Win64上运行只是另一个噩梦.

有没有人有MEGAM可执行文件的Windows编译版本是0.4或更高版本?我将永远感激不尽!

Pro*_*ggi 4

在Windows 7上做了一些工作后,我能够让Python NLTK MegaM库工作,解决方案相当简单(事后看来).我的方法在下面详细描述,并包含链接.我希望你发现它们很有用.

高水平:

  1. 安装OCaml编译器(特殊版本:OCamlPro)
  2. 下载MagaM的源代码
  3. 下载并安装GNU32Make实用程序
  4. 在2个位置编辑MegaM MakeFile
  5. 运行Gnu32Make以生成magam.exe文件
  6. 以编程方式指示megam.exe文件到Python NLTK的位置
  7. 运行nltk.MaxentClassifier.train命令

链接:

  1. MEGAM网站:
  2. Windows OCamlPro下载
  3. GNU32 Make for Windows

血腥细节

由于缺乏文档,这个过程有一些特点很容易向南 - 我想提请注意我发现的一些......

Windows OCamPro

获得适用于Windows的OCaml Pro版本非常重要,因为它是一个独立的实体,不依赖于其他任何东西.我列出的版本就是这样,它将安装到您选择的单个目录中.将bin目录的路径添加到windows系统路径非常重要.

MEGAM

Windows对这个库来说是一个挑战,因为它与开发人员有一些SNAFU,所以你被迫下载源代码并自己编译它.这并不像它第一次出现那么困难.作为一般过程,将.Targz文件解压缩到dir并将其解压缩为2X以获取源目录是相当简单的.要实现的最重要的两个目标是(a)正确编辑Makefile和(b)包含生成的megam.exe文件的目录的路径添加到Windows系统路径.

GNU32Win

这是一个简单的过程,只需确保在安装后将Gnu32Make exe文件的路径添加到Windows系统路径.

MEGAM MakeFile

在您取消归档MagaM文件的目录中,将存在一个MakeFile,其中有2行,您必须在其中获得编辑权限以确保正确构建.

首先 :(将注释掉的行中的粗体标记替换为未注释行中的粗体标记)

  • WITHSTR = str.cma -cclib -lstr
  • WITHSTR = str.cma -cclib -lcamlstr

第二:( 使用系统上的等效路径换出第一行的路径)

注意:该路径必须指向系统上OcamlPro安装的"\ lib\caml"目录.

  • WITHCLIBS = -I /usr/lib/ocaml/3.09.2/caml
  • WITHCLIBS = -I E:\ OCamlPro\OCPWin64\lib\caml

在megam目录中运行make

在这个阶段,您应该只需打开一个Windows CMD shell,cd到您修改makefile的目录,然后运行make来编译并生成可执行文件megam.exe.

您应该看到类似于的输出:

make ocamldep*.mli*.ml> .depend ocamlc -g -custom -o megam str.cma -cclib -lcamlstr bigarray.cma -cclib -lbigarray unix.cma -cclib -lunix -IE:\ OCamlPro\OCPWin64\lib\caml fastdot_c.c fastdot.cmo intHashtbl.cmo arry.cmo util.cmo data.cmo bitvec.cmo cg.cmo wsemlm.cmo bfgs.cmo pa.cmo perceptron.cmo radapt.cmo kernelmap.cmo abffs.cmo main.cmo

以编程方式指示Megam.exe文件的位置到Pythons NLTK

我遇到的最后一个问题是如何向Pythonn NLTK准确指出我的magam.exe文件的位置.在调用代码中,我将声明指示在我调用MaxentClassifier本身的行之前,并且工作得很好,见下文.

注意:我的开发工作站花了很长时间,所以请耐心等待.

 nltk.config_megam('E:\megam\megam.exe')
 self.classifier = nltk.MaxentClassifier.train(train_set, algorithm='megam', trace=0)
Run Code Online (Sandbox Code Playgroud)