5

我一直在 Python 上使用 NLTK,但由于缺少等于或高于 0.3 的任何版本的 MEGAM 库的 Windows 64 位可执行文件,因此无法使用 MEGAM Max Ent 算法(需要包括 NLTK 的 -nobias 选项工作,这是在 v. 0.3 中引入的)。

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

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

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

4

2 回答 2

4

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

高水平:

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

链接:

  1. 超级网站:
  2. Windows OCamlPro 下载
  3. GNU32 为 Windows 制作

血腥细节

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

Windows OCamPro

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

兆丰

Windows 对这个库来说是一个挑战,因为它与开发人员有一些 SNAFU,所以你不得不下载源代码并自己编译它。这并不像最初看起来那么困难。作为一般过程,将 .Targz 文件解压缩到一个目录并解压缩 2X 以到达源目录是相当简单的。要实现的最重要的 2 个目标是 (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。

您应该看到类似于以下内容的输出:

制作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

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

我遇到的最后一个问题是如何准确地向 Pythonn NLTK 指示我的 magam.exe 文件的位置。在调用代码中,我在调用 MaxentClassifier 本身的行之前放置了指示这样的语句,并且效果很好,见下文。

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

 nltk.config_megam('E:\megam\megam.exe')
 self.classifier = nltk.MaxentClassifier.train(train_set, algorithm='megam', trace=0)
于 2015-06-21T18:12:11.787 回答
0

也可以使用 cygwin 编译:

  1. 下载 cygwin 安装程序:https ://cygwin.com/install.html
  2. 安装时,检查 gnu make 和 ocaml(编译器和运行时)
  3. 更改生成文件
    • WITHSTR =str.cma -cclib -lstr -> WITHSTR =str.cma -cclib -lcamlstr
    • WITHCLIBS = cygwin ocaml 目录的路径
  4. 使用make编译。编译调试和选择构建可能存在差异。我可以使用带有 opt 但不调试的 cygwin 构建,以及带有调试但不带 opt 的原生。
  5. 将 cygwin bin 添加到 PATH
  6. 使用 nltk.config_megam 运行 megam(你的 megam 路径)
于 2015-11-17T21:22:12.640 回答