java parser .java_Stanford Parser使用之 Eclipse+java调用

本文档详细介绍了如何在Eclipse Java项目中集成和使用Stanford Parser,包括下载、解压模型文件、设置项目路径,以及演示了如何通过相对路径加载模型并进行解析操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

==================================================================================

官网-》Download

Stanford Parser version

3.2.0-》stanford-parser-full-2013-06-20.zip

==================================================================================

解压缩:stanford-parser-full-2013-06-20.zip-》stanford-parser-full

部分如下

a4c26d1e5885305701be709a3d33442f.png

-》解压缩stanford-parser.jar-》stanford-parser文件夹

-》解压缩stanford-parser-3.2.0-models.jar-》stanford-parser-3.2.0-models文件夹-》将下面的

edu\stanford\nlp\models\lexparser中的englishPCFG.ser.gz拷贝到工程的source文件夹下。

==================================================================================

使用:

首先要将stanford-parser.jar文件加载到lib文件夹中。右键build

path->add to build

path. 只加载stanford-parser.jar即可。

其中参考1中将englishPCFG.ser.gz

a4c26d1e5885305701be709a3d33442f.png

错的!!!

也加入到Referenced Libraries中,在本地报错,不要加入。

另外在初始化要写绝对路径,也和参考的不一样!

更新:englishPCFG.ser.gz拷贝到工程的source文件夹下即可。

工程的层次结构图:

stanfordpatser工程名

src代码

stanfordparser包

Parser.java类

lib

stanford-parser.jar

source

englishPCFG.ser.gz

==================================================================================

本地.java中调用的代码

//LexicalizedParser lp =

LexicalizedParser.loadModel("...\\stanford-parser-

//full\\englishPCFG.ser.gz");//本地中为绝对路径

//相对路径即可

LexicalizedParser lp =

LexicalizedParser.loadModel("source/englishPCFG.ser.gz");

String subsen = "One beer later and I'm

walking down the street smoking a cig with them";

PTBTokenizer ptb =

PTBTokenizer.newPTBTokenizer(new StringReader(subsen));

List words = ptb.tokenize();

System.out.println(lp.parse(words));

=================

结果:

(ROOT (S (NP (NP (CD One) (NN beer) (RB

later)) (CC and) (NP (PRP I))) (VP (VBP 'm) (VP (VBG walking) (PRT

(RP down)) (NP (NP (DT the) (NN street)) (VP (VBG smoking) (NP (DT

a) (NN cig)) (PP (IN with) (NP (PRP them)))))))))

==================================================================================

自带的样例ParserDemo.java

public static void main(String[] args) {

//LexicalizedParser lp =

LexicalizedParser.loadModel("D:\\my

download\\Parser\\Stanford

//Parser\\stanford-parser-full\\englishPCFG.ser.gz");

//相对路径即可

LexicalizedParser lp =

LexicalizedParser.loadModel("source/englishPCFG.ser.gz"); demoAPI(lp);

}

public static void demoAPI(LexicalizedParser lp)

{

// This option shows parsing a list

of correctly tokenized

words第一块 String[] sent = { "This", "is", "an", "easy", "sentence", "."

};

List

rawWords = Sentence.toCoreLabelList(sent);

Tree parse =

lp.apply(rawWords);

parse.pennPrint();

System.out.println();

// This option shows loading and

using an explicit

tokenizer第二块 String sent2 = "This is another sentence.";

TokenizerFactory tokenizerFactory =

PTBTokenizer.factory(new CoreLabelTokenFactory(), "");

List

rawWords2 =

tokenizerFactory.getTokenizer(new

StringReader(sent2)).tokenize();

parse =

lp.apply(rawWords2);

TreebankLanguagePack tlp = new PennTreebankLanguagePack();

GrammaticalStructureFactory gsf =

tlp.grammaticalStructureFactory();

GrammaticalStructure gs = gsf.newGrammaticalStructure(parse);

List tdl =

gs.typedDependenciesCCprocessed();

System.out.println(tdl);

//for(TypedDependency tdl1:tdl){

// System.out.println(tdl1); //例如输出完整的:nsubj(sentence-4, This-1)

// System.out.println(tdl1.gov()); //例如输出支配地位的:sentence-4

// System.out.println(tdl1.dep()); //例如输出从属地位的:This-1

// System.out.println(tdl1.reln());//例如输出关系:nsubj

// }

System.out.println();

输出第三块

TreePrint tp = new

TreePrint("penn,typedDependenciesCollapsed"); tp.printTree(parse);

}

输出结果:

Loading parser from serialized file D:\my

download\Parser\Stanford

Parser\stanford-parser-full\englishPCFG.ser.gz ... done [1.6

sec].

Loading parser from

serialized file source/englishPCFG.ser.gz ... done [1.4

sec].(ROOT

(S

(NP (DT

This))

(VP (VBZ

is)

(NP (DT an) (JJ easy) (NN sentence)))

(.

.)))

[nsubj(sentence-4, This-1),

cop(sentence-4, is-2), det(sentence-4, another-3), root(ROOT-0,

sentence-4)]

(ROOT

(S

(NP (DT

This))

(VP (VBZ

is)

(NP (DT another) (NN sentence)))

(.

.)))

nsubj(sentence-4, This-1)

cop(sentence-4, is-2)

det(sentence-4, another-3)

root(ROOT-0, sentence-4)

java精神(基于函数式组合子逻辑的javaparser框架) 一。 释名。 为什么叫精神? 如果你熟悉c++,那么你可能知道一个叫做”spirit”的parser库。它利用c++的模板元编程能力,使用c++语言本身提供了一个递归下降文法解析的框架。 我这里介绍的jparsec库,就是一个java里面的递归下降文法解析框架。 不过,它并非是spirit的java版本。 Jparsec的蓝本来自Haskell语言的parsec库。Parsec是一个基于monad的parser组合子库。 这个库的目的是要在java中提供一个类似parsec, spirit的库,这种组合子库并非c++的专利,java/c#也可以做到。这个库还将在java5.0上被改写,类型安全上它将也不再逊色于c++。 那么,为什么叫“函数式”呢?java是面向对象的嘛。 如果你使用过haskell, lisp等语言,这个函数式不用解释你也知道是怎么回事了。 如果你是一个老牌的c++/java程序员,那么这里还要稍微解释一下。当然如果您对这些虚头八脑的名词不感兴趣,那么,你尽可以跳过这一章,不知道什么是“函数式”,并不会影响你对这个库的理解的。 C++这几年随着gp的普及,“函数式”这个老孔乙己逐渐又被人从角落里面拽了出来。一个c++程序员所熟悉的“函数式”很可能是stl的for_each, transform,count_if这些函数。 怎么说呢,就象我不能否定str.length()这个调用属于OO一样,我也无法说for_each, transform不是函数式。 但是,“函数式”的精髓不在于此。 一般归纳起来,就像我们说OO是什么多态,封装,继承一样,“函数式”的特征被总结为: 1。无副作用。 2。高阶函数。 3。延迟计算 而最最有意义的(至少我认为如此),是基于高阶函数的函数组合能力。一些人把这叫做glue。 简短地说,什么让函数式编程如此强大?是用简单的函数组合出复杂函数的能力。 我可以想象,说到这里,你还是一头雾水。“什么是组合?1+1不是也把两个1组合成2了吗?new A(new B(), new C())不也是从B和C组合成A了?”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值