Stanford CoreNLP开源项目的3种编译和运行方式[2]

4.     项目源码在linux控制台下的编译与运行

3节中所述的操作其实已经可以满足大部分程序员的要求了。但是还有一小部分程序员,他们要把项目打好jar包部署到linux的服务器上。

部署的过程中有可能要在linux服务器上当场改代码。这时候有两种解决方式:

1.返回开发环境,用可视化的编辑软件修改代码后重新编译,在完成打包部署过程。

2.直接在linux服务器上用vi修改代码,改完后在linux上编译,打包,再部署。

两种方式各有好处,如果对linux相当熟悉的话,可以考虑使用第2种方式。快捷且高效。

这就是本节要阐述的内容:如何让项目源码在linux控制台下编译与运行

准备工作仍然是拿到源码stanford-source.jar(源文件为:

stanford-corenlp-2011-06-19-sources.jar,我改了名字)

1. 解压源码到src目录

hdp@master:~/tmp/nlp$  mkdir  src

hdp@master:~/tmp/nlp$  cd  src

hdp@master:~/tmp/nlp/src$  jar  xf  ../stanford-source.jar

hdp@master:~/tmp/nlp/src$  ls

edu  META-INF
2. 准备Makefile文件,文件内容是总体编译edu下的源码,然后使用META-INF下的MANIFEST.MF文件将编译好的class

hdp@master:~/tmp/nlp/src$  cd  ..

hdp@master:~/tmp/nlp$  ls

src  stanford-source.jar

hdp@master:~/tmp/nlp$  touch  Makefile

hdp@master:~/tmp/nlp$  vi  Makefile

JAVAC = javac

JAVAFLAGS = -O -d .

corenlp:      

        $(JAVAC) $(JAVAFLAGS) -classpath lib/jgraph.jar:lib/jgrapht.jar:lib/xom.jar:lib/fastutil.jar src/edu/stanford/nlp/*/*.java \

            src/edu/stanford/nlp/*/*/*.java \

            src/edu/stanford/nlp/*/*/*/*.java \

            src/edu/stanford/nlp/*/*/*/*/*.java \

            src/edu/stanford/nlp/*/*/*/*/*/*.java


        jar -cfm stanford-corenlp-`date +%Y-%m-%d`.jar src/META-INF/MANIFEST.MF edu        

        cp stanford-corenlp-`date +%Y-%m-%d`.jar stanford-corenlp.jar

 

        rm -rf edu

~

以上的命令可以完成MakeFile的创建工作,vi之后是Makefile的内容。

3. 准备编译时需要的jar包。lib/jgraph.jar:lib/jgrapht.jar:lib/xom.jar:lib/fastutil.jar

hdp@master:~/tmp/nlp$  ls

Makefile  src  stanford-source.jar

hdp@master:~/tmp/nlp$  mkdir  lib

hdp@master:~/tmp/nlp$  cp  /home/hdp/nlp/lib/*.jar  lib/
4. 编译,打包
hdp@master:~/tmp/nlp$  make

javac -O -d . -classpath lib/jgraph.jar:lib/jgrapht.jar:lib/xom.jar:lib/fastutil.jar src/edu/stanford/nlp/*/*.java \

             src/edu/stanford/nlp/*/*/*.java \

             src/edu/stanford/nlp/*/*/*/*.java \

             src/edu/stanford/nlp/*/*/*/*/*.java \

             src/edu/stanford/nlp/*/*/*/*/*/*.java

Note: Some input files use or override a deprecated API.

Note: Recompile with -Xlint:deprecation for details.

Note: Some input files use unchecked or unsafe operations.

Note: Recompile with -Xlint:unchecked for details.

jar -cfm stanford-corenlp-`date +%Y-%m-%d`.jar src/META-INF/MANIFEST.MF edu

cp stanford-corenlp-`date +%Y-%m-%d`.jar stanford-corenlp.jar

rm -rf edu

此过程中,nlp目录下将创建edu,然后编译,编译得到的文件全部放于edu中。然后使用edu中类文件与src/META-INF/MANIFEST.MF文件一起打成stanford-corenlp-`date +%Y-%m-%d`.jar包。最后将这个临时jar包改名成stanford-corenlp.jar

5. 准备输入数据。向input.txt写入数据。

hdp@master:~/tmp/nlp$  vi  input.txt

Stanford University is located in California. It is a great university.

We use the stanford CoreNLP for tech research.

It is useful!
6. Java命令执行jar包中的StanfordCoreNLP示例。

hdp@master:~/tmp/nlp$ java -cp stanford-corenlp.jar:lib/xom.jar:lib/jgrapht.jar:lib/jgraph.jar:lib/stanford-corenlp-models-2011-06-19.jar -Xmx800m edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref -file input.txt

Adding annotator tokenize

Adding annotator ssplit

Adding annotator pos

Loading POS Model [edu/stanford/nlp/models/pos-tagger/wsj3t0-18-left3words/left3words-distsim-wsj-0-18.tagger] ... Loading default properties from trained tagger edu/stanford/nlp/models/pos-tagger/wsj3t0-18-left3words/left3words-distsim-wsj-0-18.tagger

Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/wsj3t0-18-left3words/left3words-distsim-wsj-0-18.tagger ... done [5.2 sec].

done [5.5 sec].

Adding annotator lemma

Adding annotator ner

Loading classifier from edu/stanford/nlp/models/ner/all.3class.distsim.crf.ser.gz ... done [21.3 sec].

Loading classifier from edu/stanford/nlp/models/ner/muc.distsim.crf.ser.gz ... done [19.4 sec].

Loading classifier from edu/stanford/nlp/models/ner/conll.distsim.crf.ser.gz ... done [18.2 sec].

Adding annotator parse

Loading parser from serialized file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... done [4.8 sec].

Adding annotator dcoref

Processing file /home/hdp/tmp/nlp/input.txt ... (writing to /home/hdp/tmp/nlp/input.txt.xml)
 

Annotation pipeline timing information:

PTBTokenizerAnnotator: 0.2 sec.

WordsToSentencesAnnotator: 0.0 sec.

POSTaggerAnnotator: 0.5 sec.

MorphaAnnotator: 0.2 sec.

NERCombinerAnnotator: 0.2 sec.

ParserAnnotator: 18.9 sec.

DeterministicCorefAnnotator: 0.7 sec.

TOTAL: 20.8 sec. for 26 tokens at 1.2 tokens/sec.

Pipeline setup: 71.8 sec.

Total time for StanfordCoreNLP pipeline: 93.5 sec.

hdp@master:~/tmp/nlp$

由上命令中的参数,我设置的是800m虚拟内存。运行时间只要93.5s。可是昨天设置的512m内存,程序运行如下:

hdp@master:~/nlp$ java -cp stanford-corenlp.jar:lib/xom.jar:lib/jgrapht.jar:lib/jgraph.jar:lib/stanford-corenlp-models-2011-06-19.jar -Xmx512m edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref -file input.txt

…….省略调试信息…… 

Annotation pipeline timing information:

PTBTokenizerAnnotator: 7.8 sec.

WordsToSentencesAnnotator: 0.3 sec.

POSTaggerAnnotator: 9.3 sec.

MorphaAnnotator: 4.3 sec.

NERCombinerAnnotator: 25.1 sec.

ParserAnnotator: 1888.0 sec.

DeterministicCorefAnnotator: 7.5 sec.

TOTAL: 1942.3 sec. for 13 tokens at 0.0 tokens/sec.

Pipeline setup: 3663.5 sec.

Total time for StanfordCoreNLP pipeline: 5616.9 sec.

hdp@master:~/nlp$

最后竟然用了5600s。这相当于1.55个小时。令人吃惊。

5.     总结

        到这里,完成了开源框架的3种使用方式的介绍:

1.       方式:Eclipse下使用jar包引入方式。

优缺点:这种方式只能使用,不能对框架做底层改变。

使用条件:适合于大多数程序员开发阶段。

2.       方式:Eclipse下直接编译项目源码的方式。

优缺点:这种方式能够修改框架的实现,可视化编辑;不适合linux的控制台界面。

使用条件:少数需要修改开源框架的时候。

3.       方式:linxu控制台下直接编译项目源码的方式。

优缺点:能够修改框架,但不可视化,麻烦;适合部署过程中代码量的小规模修改。

使用条件:项目部署时代码量的小规模修改。


转载于:https://my.oschina.net/stevie/blog/692187

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值