Compiling Charniak's parser

2019-09-19 07:41发布

问题:

A couple of days ago I downloaded Charniak's parser from the web. This parser is used to parse natural languages.

I've been trying to compile it but it is not working. When I'm in parser directory and type make this is prompted:

/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

Some other people have problems compiling this thing, like the one in this forum. but I dont think my gcc version is the problem.

NOTE: I am trying to build a numerical optimization algorithm used for natural language parsing. I'm trying to get some examples from charniak's parser. Any help would be greatly appreciated.

回答1:

Files with the upper-case extension .C are (somewhat confusingly!) assumed to be C++.

However, utils.c has a lower-case extension which means the cc compiler (and why is that being used?!) is treating it as C:

Files whose names end with .c are taken to be C source files

All the C++ functionality therefore does not work.

  • If this is your file, rename it, and stop using cc for C++.

  • If this compilation step is part of the Chaniak distribution, I suggest contacting the author, because he has made a serious error.



回答2:

This is an updated and improved version from the Brown Laboratory for Linguistic Information Processing: https://github.com/BLLIP/bllip-parser

I compiled it on Ubuntu 12.10 and it has been easy. You need to install Flex.



回答3:

I ran into the same problem, and this is what I found: http://web.science.mq.edu.au/~mpawel/resources/notes/compilingCharniakJohnson.htm

From that page:

Both parsers, implemented in C++, are distributed as source code and, in order to use them, one obviously needs to compile them first. On modern machines this may now raise some problems and this note is supposed to help to address the issues.

On Linux platforms (I tested on Ubuntu 11.04) a possible solution, reported on the corpora mailing list, is to use the g++ 3.3 compiler instead of the now commonly used 4.x version. An alternative is to use the patch prepared by Nitin Madnani; this changes the source code of the reranking parser so that it can compile on modern 64-bit Linux distributions.