<h2>使用<a href="http://www.link.cs.cmu.edu/link/">Link Grammar</a>进行语法检查</h2>
<h2>链接语法简介</h2>
<p>链接语法由Davy Temperley、Daniel Sleator和John Lafferty开发,是一种英语句法分析工具:“给定一个句子,系统给它分配一个句法结构,它由一组连接成对单词的标记链接组成。解析器还生成一个句子的“成分”表示(显示名词短语、动词短语等)。“您可以<a href="http://www.link.cs.cmu.edu/link/">read more about Link Grammar</a>和<a href="http://www.link.cs.cmu.edu/link/submit-sentence-4.html">interact with an online parser here</a>。在</p>
<p>几年前。他们解释说<strong>AbiWord使用链接语法来检查语法。</strong>我不知道AbiWord实际上是如何进行语法检查的,但我在一个关于语法检查的问答中了解了基本方法(我现在已经失去了链接)。与我接触过的其他解析器不同,当一个句子的语法结构不好时,链接语法会产生截然不同的结果:<strong>它找不到语法错误句子的完整链接</strong>。在</p>
<p>你可以用<a href="http://www.link.cs.cmu.edu/link/submit-sentence-4.html">online parser</a>:</strong>输入句子“This is the man which dog I bulled”生成1个链接,而“This are the man which dog I bulled”则不产生完整的链接。在</p>
<p>我问的错不算这个。然而,它确实实现了原版for<strong>的一种排除语法上不合理(即不恰当的共轭)可能性的方法。</strong></p>
<h2>Python绑定:它们存在!在</h2>
<p><strong>链接语法是用C编写的。</strong>这在我第一次研究时给我带来了一个问题,因为我只学了一年Python编码,我很难自己创建绑定。我还担心我的进程/服务计数,所以我不想在Python进程之上运行链接语法程序。但是在1月13日发布这个问题的一两天后,我遇到了jeffelmore(enzondio)对PyPi的贡献——这是发生在前一天。在</p>
<p>正如<strong><a href="http://pypi.python.org/pypi/pylinkgrammar">pylinkgrammar</a></strong>页面所述,您仍然需要先<strong>构建并安装linkgrammar。</strong>关于如何使用它的说明就在该页面上。但是一些关于安装pylinkgrammar的警告:</p>
<ol>
<li><strong>我无法让pylinkgrammar在Python2.7和Windows7上运行,</strong>我认为这是由于在Windows7上使用Python2.7时出现问题。在</li>
<li>因此,我把我的整个项目移到了Ubuntu(10.10)中,因为我非常需要它。但当我建立Ubuntu时,我尝试为python2.7安装所有东西(甚至删除了2.6)。<strong>我仍然无法让pylinkgrammar与python2.7一起工作。</strong>我认为这仍然是由于CMake和python2.7之间的问题造成的。在</li>
<li>我重新开始安装Ubuntu,因为事情变得一团糟,我用python2.6来设置一切。<strong>我现在已经让pylinkgrammar与python2.6一起工作了。</strong>(但是我必须输入<code>from pylinkgrammar.linkgrammar import Parser</code>,这与pypi页面的说明略有不同)。在</li>
</ol>
<h2><a href="http://nodebox.net/code/index.php/Linguistics">NodeBox Linguistics:</a>我解决方案的另一部分</h2>
<p>在我的问题中,我指出需要<strong>生成给定句子的所有屈折/变化,</strong>以便检查所有这些变化,并消除语法上不可信的项目。(我使用WordNet在输出之前更改用户输入的某些部分,而WordNet的结果是未反映的;它们需要进行变形以使输出(更)易懂)。在</p>
<p>一个非常丰富的<a href="http://w-shadow.com/blog/2008/03/13/free-tools-for-natural-language-processing/comment-page-1/#comment-197094">blogpost</a>让我找到了<strong><a href="http://nodebox.net/code/index.php/Linguistics">NodeBox Linguistics library</a>,</strong>一套工具,用它“你可以对英语内容进行语法变化和语义操作”。实际上,这个库可以用来<strong>共轭动词、单数化和名词复数,</strong>。这正是我所需要的。我的应用程序知道输入中的哪些单词被换成了新的、未经修改的语言;这些片段就是它生成varia的部分使用NodeBox语言学中的方法。在</p>
<p><strong>我将这些变体输入到pylinkgrammar中,并删除找不到完整链接的变体。</strong>有时这根本不会产生任何结果,但通常会产生有用的结果。请注意,对于大多数不完整的句子,<strong>链接语法找不到完整的链接。</strong>如果你想像我一样检查碎片句子中的变化,请在检查之前尝试用填充语扩展碎片句子,然后在输出前去掉填充词。</strong>我从数据中提取最后一个词,在棕色语料库中查找,然后将该句子的其余部分从语料库中追加,得到这个“填充词”。在</p>
<p>我没有任何测试来报告这种方法在统计学上的精确性,但它在大多数情况下对我(特殊的)目的有效。我仍然在充实这个实现的过程中,编写异常情况和清理输入数据的方法。希望这些信息也能帮助其他人!请不要犹豫要求澄清。在</p>