繁体   English   中英

如何使用链接语法分析器作为语法检查器

[英]How to use the link grammar parser as a grammar checker

Abiword使用链接语法解析器作为简单的语法检查器。 我想用Python复制这个功能。

存在记录不佳的Python绑定,但我不知道如何使用它们来模仿Abiword中的语法检查程序。

(我对实际的解析结果不感兴趣。我只需要知道一个句子是否使用链接语法解析器解析好,如果不能解析哪些单词无法链接。)

实现这一目标的最佳方法是什么?

我无法帮助你模仿AbiWord使用Python绑定的语法检查能力,但我至少可以帮助你构建它并检查它的功能。

使用MS Visual Studio构建(32位体系结构)

我通常会说“实现这一目标的最佳方法”是按照自述文件中的大量说明在Linux机器上构建Link Grammar库和Python绑定。 但是,从上面评论判断,Linux可能不是一个选项,似乎你想坚持使用Visual Studio而不是使用例如Cygwin

依赖

正则表达式

正如自述文件中所述,Link Grammar库依赖于某种形式的POSIX兼容的regex库 - 在Linux上,这是一个很好的。 但是,在Windows中,您必须(或者更确切地说)选择要使用的库的实现。 幸运的是, GnuWin提供的端口版本2.7与Link Grammar 5.3.11(在%LINK_GRAMMAR%\\msvc14下找到)提供的Visual Studio解决方案/项目文件%LINK_GRAMMAR%\\msvc14

但是,您必须确保Visual Studio构建宏GNUREGEX_DIR指向您将正则表达式库解压缩到的目录(例如D:\\Program Files (x86)\\GnuWin32 )。 但是请注意,这些构建宏是一样的Windows环境变量:尽管视窗10称为下设置环境变量GNUREGEX_DIR ,Visual Studio中没有利用这个变量,直到我在链接语法改变了构建宏定义项目文件,即%LINK_GRAMMAR%\\msvc14\\Local.props行:

<GNUREGEX_DIR>$(HOMEDRIVE)$(HOMEPATH)\Libraries\gnuregex</GNUREGEX_DIR>

<GNUREGEX_DIR>$(GNUREGEX_DIR)</GNUREGEX_DIR>

痛饮

要创建Python绑定,您需要在系统上安装SWIG 但是,为了使Visual Studio项目Python2.vcxproj定义的构建能够找到SWIG可执行文件,您需要将相应的目录添加到Windows路径,例如D:\\Program Files (x86)\\swigwin-3.0.10

与正则表达式库一样,您需要配置VS项目以便能够找到您的Python目录,例如将<PYTHON2>C:\\Python27</PYTHON2> Local.props<PYTHON2>$(PYTHON2)</PYTHON2>如果您有相应的环境变量集。

建造

一旦Visual Studio找到了所有上述库,构建过程就非常Python2 :只需构建项目Python2 ,如果你打开VS解决方案文件( LinkGrammar.sln ),它应该自动构建项目LinkGrammarLinkGrammarExe ,这取决于。

解析共享库

构建可执行文件后,您仍然需要确保可以找到正则表达式共享库(DLL):为了执行此操作,包含所需库(在本例中为regex2.dll )的目录应位于您的路径上。 将目录添加到全局路径可能是最简单的,例如,在使用上面提到的GnuWin库GNUREGEX_DIR指向它的环境变量GNUREGEX_DIR的情况下, %GNUREGEX_DIR%\\bin"

用Python运行

既然您已经测试了Windows可执行文件的运行并且已经构建了Python绑定,那么您可以将它们导入到Python脚本中。 为了确保它们被正确导入并且SWIG正确定位了相应的DLL,Link Grammar自述文件提到运行可执行脚本make-check.py以使用Link Grammar加载和运行脚本:

make-check [PYTHON_FLAG] PYTHON_OUTDIR [script.py] [ARGUMENTS]

其中OUTDIR是编写Python绑定的目录,例如Win32\\Debug\\Python2 然而不幸的是,尽管在5.3.11版本的自述文件中提到了这个文件,但实际上它并没有存在于“稳定”版本5.3.11可分发版中 - 尽管它在GitHub master中有一个版本存储库 但是,您可以从Git存储库中获取该文件,然后在5.3.11 distributable的msvc14目录中使用它。 但是,如上所述,此脚本要求regex2.dll位于Windows路径上:如果尚未将其添加到全局路径,则必须在运行脚本时将其添加到Python可执行文件可访问的路径中。

C API与Python API

我自己没有使用过Link Grammar解析器,所以无法帮助你,但你仍然可以通过查看项目LinkGrammarExe的C代码来了解如何使用它们。 您可以从link-parser\\link-parser.c中的main函数开始:

sent = sentence_create(input_string, dict);

...

num_linkages = sentence_parse(sent, opts);

在由VS项目构建的简单CLI程序中,它只检查num_linkages ,如果其值为0 ,则显示No complete linkages found ,用户可以将其解释为意味着该句子是不合语法的。 当然可以调整此行为以接受评分较低的分析,找到不适合的单词等,因此您可以首先使用C API探索功能。 稍后,如果您真的想使用Python绑定,Python方法的命名方式与它们的C对应方式类似 - 请参阅文件clinkgrammar.py

def sentence_parse(sent, opts):
    return _clinkgrammar.sentence_parse(sent, opts)
    sentence_parse = _clinkgrammar.sentence_parse

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM