[英]How to use the link grammar parser as a grammar checker
Abiword使用链接语法解析器作为简单的语法检查器。 我想用Python复制这个功能。
存在记录不佳的Python绑定,但我不知道如何使用它们来模仿Abiword中的语法检查程序。
(我对实际的解析结果不感兴趣。我只需要知道一个句子是否使用链接语法解析器解析好,如果不能解析哪些单词无法链接。)
实现这一目标的最佳方法是什么?
我无法帮助你模仿AbiWord使用Python绑定的语法检查能力,但我至少可以帮助你构建它并检查它的功能。
我通常会说“实现这一目标的最佳方法”是按照自述文件中的大量说明在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
),它应该自动构建项目LinkGrammar
和LinkGrammarExe
,这取决于。
构建可执行文件后,您仍然需要确保可以找到正则表达式共享库(DLL):为了执行此操作,包含所需库(在本例中为regex2.dll
)的目录应位于您的路径上。 将目录添加到全局路径可能是最简单的,例如,在使用上面提到的GnuWin库GNUREGEX_DIR
指向它的环境变量GNUREGEX_DIR
的情况下, %GNUREGEX_DIR%\\bin"
。
既然您已经测试了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可执行文件可访问的路径中。
我自己没有使用过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.