编译Charniak的解析器

时间:2011-09-02 17:25:17

标签: c++ parsing compilation charniak-parser

几天前,我从网上下载了Charniak's parser。此解析器用于解析自然语言。

我一直在尝试编译它,但它无法正常工作。当我在解析器目录中并输入make时,会提示:

/usr/bin/g++  -c -O Bchart.C
/usr/bin/g++  -c -O BchartSm.C
/usr/bin/g++  -c -O Bst.C
/usr/bin/g++  -c -O FBinaryArray.C
/usr/bin/g++  -c -O CntxArray.C
/usr/bin/g++  -c -O ChartBase.C
/usr/bin/g++  -c -O ClassRule.C
/usr/bin/g++  -c -O ECArgs.C
/usr/bin/g++  -c -O Edge.C
/usr/bin/g++  -c -O EdgeHeap.C
/usr/bin/g++  -c -O Feat.C
/usr/bin/g++  -c -O Feature.C
/usr/bin/g++  -c -O FeatureTree.C
/usr/bin/g++  -c -O Field.C
/usr/bin/g++  -c -O FullHist.C
/usr/bin/g++  -c -O GotIter.C
/usr/bin/g++  -c -O InputTree.C
/usr/bin/g++  -c -O Item.C
/usr/bin/g++  -c -O Link.C
/usr/bin/g++  -c -O Params.C
/usr/bin/g++  -c -O ParseStats.C
/usr/bin/g++  -c -O SentRep.C
/usr/bin/g++  -c -O Term.C
/usr/bin/g++  -c -O TimeIt.C
/usr/bin/g++  -c -O UnitRules.C
/usr/bin/g++  -c -O ValHeap.C
/usr/bin/g++  -c -O edgeSubFns.C
/usr/bin/g++  -c -O ewDciTokStrm.C
/usr/bin/g++  -c -O extraMain.C
/usr/bin/g++  -c -O fhSubFns.C
/usr/bin/g++  -c -O headFinder.C
/usr/bin/g++  -c -O headFinderCh.C
cc    -c -o utils.o utils.c
In file included from utils.c:23:
utils.h:28:19: fstream: No such file or directory
utils.h:29:16: list: No such file or directory
In file included from utils.h:30,
                 from utils.c:23:
ECString.h:8: error: syntax error before "namespace"
ECString.h:8: warning: data definition has no type or storage class
In file included from utils.h:30,
                 from utils.c:23:
ECString.h:9:18: string: No such file or directory
In file included from utils.c:23:
utils.h:31:18: vector: No such file or directory
In file included from utils.c:23:
utils.h:37: error: syntax error before "intToString"
utils.h:37: warning: data definition has no type or storage class
utils.h:38: error: syntax error before '<' token
utils.h:39: error: syntax error before ':' token
utils.h:40: error: syntax error before "st"
utils.h:40: warning: data definition has no type or storage class
utils.h:43: error: syntax error before '&' token
utils.h:44: error: syntax error before "lastCharacter"
utils.h:44: error: syntax error before '&' token
utils.h:44: warning: data definition has no type or storage class
utils.h:45: error: syntax error before "firstCharacter"
utils.h:45: error: syntax error before '&' token
utils.h:45: warning: data definition has no type or storage class
utils.c:24:20: iostream: No such file or directory
utils.c: In function `error':
utils.c:34: error: `cerr' undeclared (first use in this function)
utils.c:34: error: (Each undeclared identifier is reported only once
utils.c:34: error: for each function it appears in.)
utils.c:34: error: `endl' undeclared (first use in this function)
utils.c: In function `warn':
utils.c:43: error: `cerr' undeclared (first use in this function)
utils.c:43: error: `endl' undeclared (first use in this function)
utils.c: At top level:
utils.c:47: error: syntax error before '&' token
utils.c: In function `ignoreComment':
utils.c:49: error: `string' undeclared (first use in this function)
utils.c:49: error: syntax error before "nxt"
utils.c:51: error: `inpt' undeclared (first use in this function)
utils.c:59: error: `nxt' undeclared (first use in this function)
utils.c: In function `toLower':
utils.c:82: error: 'for' loop initial declaration used outside C99 mode
utils.c: At top level:
utils.c:97: error: syntax error before "intToString"
utils.c: In function `intToString':
utils.c:101: error: `string' undeclared (first use in this function)
utils.c:101: error: syntax error before "ans"
utils.c:102: error: `ans' undeclared (first use in this function)
utils.c: At top level:
utils.c:106: error: syntax error before "vECfind"
utils.c:106: error: syntax error before "s"
utils.c: In function `vECfind':
utils.c:108: error: `ECStringsIter' undeclared (first use in this function)
utils.c:108: error: syntax error before "eci"
utils.c:109: error: `eci' undeclared (first use in this function)
utils.c:109: error: `sts' undeclared (first use in this function)
utils.c:109: error: `s' undeclared (first use in this function)
utils.c:109: error: `true' undeclared (first use in this function)
utils.c:110: error: `false' undeclared (first use in this function)
utils.c: At top level:
utils.c:113: error: syntax error before "lastCharacter"
utils.c:113: error: syntax error before '&' token
utils.c: In function `lastCharacter':
utils.c:115: error: `string' undeclared (first use in this function)
utils.c:115: error: syntax error before "f"
utils.c:116: error: `s' undeclared (first use in this function)
utils.c:121: error: `f' undeclared (first use in this function)
make: *** [utils.o] Error 1

其他一些人在编译这个东西时遇到了问题,比如this forum中的那个。但我不认为我的gcc版本是问题所在。

注意:我正在尝试构建一个用于自然语言解析的数值优化算法。我想从charniak的解析器中得到一些例子。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

这是布朗语言信息处理实验室的更新和改进版本: https://github.com/BLLIP/bllip-parser

我在Ubuntu 12.10上编译它很简单。您需要安装Flex。

答案 1 :(得分:1)

大写字母.C的文件(有点令人困惑!)assumed to be C++

但是,utils.c有一个小写扩展名,这意味着cc编译器(为什么正在使用?!)将其视为C:

  

名称以.c结尾的文件被视为C源文件

因此,所有C ++功能都不起作用。

  • 如果这是您的文件,请将其重命名,然后停止使用cc进行C ++。

  • 如果此编译步骤是Chaniak发行版的一部分,我建议您与作者联系,因为他犯了一个严重的错误。

答案 2 :(得分:1)

我遇到了同样的问题,这就是我发现的: http://web.science.mq.edu.au/~mpawel/resources/notes/compilingCharniakJohnson.htm

从该页面开始:

  

用C ++实现的两个解析器都作为源代码分发,为了使用它们,显然需要先编译它们。在现代机器上,这可能会引发一些问题,本说明应该有助于解决这些问题。

     

在Linux平台上(我在Ubuntu 11.04上测试过),在语料库邮件列表中报告的一个可能的解决方案是使用g ++ 3.3编译器而不是现在常用的4.x版本。另一种方法是使用由Nitin Madnani制备的贴剂;这会更改重新分区解析器的源代码,以便它可以在现代64位Linux发行版上进行编译。