stanford parser 依存负数什么意思

在 NLTK 中使用 Stanford NLP 工具包 - 简书
在 NLTK 中使用 Stanford NLP 工具包
巧者劳而智者忧,无能者无所求,饱食而遨游,泛若不系之舟
在 NLTK 中使用 Stanford NLP 工具包
08 Jun 2016目录
NLTK 与 Stanford NLP
NLTK 是一款著名的 Python 自然语言处理(Natural Language Processing, NLP)工具包,在其收集的大量公开数据集、模型上提供了全面、易用的接口,涵盖了分词、词性标注(Part-Of-Speech tag, POS-tag)、命名实体识别(Named Entity Recognition, NER)、句法分析(Syntactic Parse)等各项 NLP 领域的功能。
Stanford NLP 是由斯坦福大学的 NLP 小组开源的 Java 实现的 NLP 工具包,同样对 NLP 领域的各个问题提供了解决办法。
斯坦福大学的 NLP 小组是世界知名的研究小组,如果能将 NLTK 和 Stanford NLP 这两个工具包结合起来使用,那自然是极好的!在 2004 年 Steve Bird 在 NLTK 中加上了对 Stanford NLP 工具包的支持,通过调用外部的 jar 文件来使用 Stanford NLP 工具包的功能。
从 NLTK 的 commit 历史中可以找到相应的提交记录:
commit e1372fef56bfb88d02fdb6c0eaa38
Author: Steven Bird &&
Date: Tue Aug 3 12:20:20
added Stanford svn/trunk@2088
现在的 NLTK 中,通过封装提供了 Stanford NLP 中的以下几个功能:
命名实体识别
句法分析,依存句法分析
安装和配置
NLTK 3.2 之后加入了用于中文分词的 StanfordSegmenter 这个类,作者是知名 NLP 博主 52nlp,见 。而 NLTK 3.1 及之前则只有以下几个类:
分词: StanfordTokenizer
词性标注: StanfordPOSTagger
命名实体识别: StanfordNERTagger
句法分析: StanfordParser
依存句法分析: StanfordDependencyParser, StanfordNeuralDependencyParser
方便起见,本文以 NLTK 3.2 这个版本来说明如何进行相关的安装和配置,3.1 及之前的版本基本相同。
需要注意这么几点:
Stanford NLP 工具包自 2014 年 10 月后(大概是 version 3.5.0)需要 Java 8 及之后的版本,如果出错请检查 Java 版本
下面的配置过程都以 Stanford NLP 3.6.0 为例,如果使用的是其他版本,请注意替换相应的文件名
下面的配置过程以 NLTK 3.2 为例,如果使用 NLTK 3.1,需要注意该旧版本中 StanfordSegmenter 未实现,其余大致相同
下面的配置过程是针对不同的接口分别讲述各自如何配置,根据来自 NLTK 的源代码,分别是
nltk/tokenize/stanford.py
nltk/tag/stanford.py
nltk/parse/stanford.py
如果不想了解这些细节,可以参考 NLTK 官方 上的内容,但需要注意的是,StanfordSegmenter 和 StanfordNeuralDependencyParser 这两者的配置和其他的都不一样,而 wiki 页面上并未覆盖到这部分内容。
事实上,也可以完全不进行环境变量设置,但这就需要在每次调用的时候手动指定参数
StanfordSegmenter
处下载 stanford-segmenter-.zip (version 3.6.0)
将 stanford-segmenter-.zip 解压, 并将解压目录中的 stanford-segmenter-3.6.0.jar 拷贝为 stanford-segmenter.jar
将 stanford-segmenter.jar 和 slf4j-api.jar 加入到 CLASSPATH 中去
export STANFORD_SEGMENTER_PATH="$HOME/stanford/segmenter"export CLASSPATH="$CLASSPATH:$STANFORD_SEGMENTER_PATH/stanford-segmenter.jar:$STANFORD_SEGMENTER_PATH/slf4j-api.jar"
之所以要将 stanford-segmenter.jar 和 slf4j-api.jar 加入到 CLASSPATH 中,是因为在 StanfordSegmenter 的实现中显式依赖了这两个文件,并且优先在 CLASSPATH 中寻找这两个文件。如果在 CLASSPATH 中找不到 stanford-segmenter.jar ,则会在环境变量 STANFORD_SEGMENTER 指定的路径中寻找;同样的,如果找不到 slf4j-api.jar ,则会在环境变量 SLF4J 指定的路径中寻找。其他几个类也有同样的依赖设置,为了统一管理,可以将所有依赖的 jar 文件都加入到 CLASSPATH 中去,当然分别为不同的 jar 文件设置不同的环境变量也是可以的。
除了设置环境变量,也可以通过函数参数来传入依赖的 jar 文件的准确路径,此时将会忽略环境变量设置。
StanfordTokenizer
中下载 stanford-postagger-full-.zip (version 3.6.0)
将 stanford-postagger-full-.zip 解压
将解压目录中的 stanford-postagger.jar 加入到 CLASSPATH 中,或者设置到环境变量
STANFORD_POSTAGGER 中
export STANFORD_POSTAGGER_PATH="$HOME/stanford/postagger"export CLASSPATH="$CLASSPATH:$STANFORD_POSTAGGER_PATH/stanford-postagger.jar"
export STANFORD_POSTAGGER="$HOME/stanford/postagger/stanford-postagger.jar"
StanfordNERTagger 和 StanfordPOSTagger
在 NLTK 里,StanfordNERTagger 和 StanfordPOSTagger 都继承自 StanfordTagger ,在设置上有共同之处,因此放到一起来讲一下。
处下载 stanford-ner-.zip (version 3.6.0)
中下载 stanford-postagger-full-.zip (version 3.6.0)
将 stanford-ner-.zip 和 stanford-postagger-full-.zip 都解压
将解压后目录中的 stanford-ner.jar 和 stanford-postagger.jar 加入到 CLASSPATH 中去,和 StanfordTokenizer 不一样,这两个类都只从 CLASSPATH 中寻找对应的 jar 文件(所以为了统一我建议都添加到 CLASSPATH 中去)
export STANFORD_NER_PATH="$HOME/stanford/ner"export STANFORD_POSTAGGER_PATH="$HOME/stanford/postagger"export CLASSPATH="$CLASSPATH:$STANFORD_NER_PATH/stanford-ner.jar:$STANFORD_POSTAGGER_PATH/stanford-postagger.jar"
同时将 stanford-ner-.zip 解压后目录中的 classifiers 目录和 stanford-postagger-full-.zip 解压后目录中的 models 目录加入到环境变量 STANFORD_MODELS 中去
export STANFORD_MODELS="$STANFORD_NER_PATH/classifiers:$STANFORD_POSTAGGER_PATH/models"
StanfordParser, StanfordDependencyParser
StanfordParser 和 StanfordDependencyParser 都继承自 GenericStanfordParser ,使用 stanford-parser.jar 来提供句法分析功能。
处下载 stanford-parser-full-.zip (version 3.6.0)
将下载的压缩包解压,并将其中的 stanford-parser.jar 和 stanford-parser-3.6.0-models.jar(这个在不同版本中名称会不一样) 都加入到 CLASSPATH 中
export STANFORD_PARSER_PATH="$HOME/stanford/parser"export CLASSPATH="$CLASSPATH:$STANFORD_PARSER_PATH/stanford-parser.jar:$STANFORD_PARSER_PATH/stanford-parser-3.6.0-models.jar"
或者将 stanford-parser.jar 加入到环境变量 STANFORD_PARSER 中,将 stanford-parser-3.6.0-models.jar 加入到环境变量 STANFORD_MODELS 中
export STANFORD_PARSER="$STANFORD_PARSER_PATH/stanford-parser.jar"export STANFORD_MODELS="$STANFORD_MODELS:$STANFORD_PARSER_PATH/stanford-parser-3.6.0.models.jar"
StanfordNeuralDependencyParser
StanfordNeuralDependencyParser 虽然也继承自 GenericStanfordParser,并且用来进行句法分析,但它使用的 Stanford CoreNLP 中的功能和模型,不依赖 Stanford Parser 这个(子)工具包。
处下载 stanford-corenlp-full-.zip
将下载的压缩包解压,并将其中的 stanford-corenlp-3.6.0.jar 和 stanford-corenlp-3.6.0-models.jar 加入到 CLASSPATH 中去
export STANFORD_CORENLP_PATH="$HOME/stanford-corenlp-full-"export CLASSPATH="$CLASSPATH:$STANFORD_CORENLP_PATH/stanford-corenlp-3.6.0.jar:$STANFORD_CORENLP_PATH/stanford-corenlp-3.6.0-models.jar"
或者可以更简单地将解压目录设置为环境变量 STANFORD_CORENLP 的值
export STANFORD_CORENLP=$STANFORD_CORENLP_PATH
使用 StanfordSegmenter 和 StanfordTokenizer 进行分词
StanfordSegmenter 是 52nlp 实现的对 Stanford Segmenter 的封装,用来进行中文分词。
# coding: utf-8
from nltk.tokenize import StanfordSegmenter
segmenter = StanfordSegmenter(
path_to_sihan_corpora_dict="/home/linusp/stanford/segmenter/data/",
path_to_model="/home/linusp/stanford/segmenter/data/pku.gz",
path_to_dict="/home/linusp/stanford/segmenter/data/dict-chris6.ser.gz")
res = segmenter.segment(u"北海已成为中国对外开放中升起的一颗明星")
print type(res)
print res.encode('utf-8')
&type 'unicode'&
北海 已 成为 中国 对外开放 中 升起 的 一 颗 明星
StanfordSegmenter 的初始化参数说明:
path_to_jar: 用来定位 stanford-segmenter.jar ,在设置了 CLASSPATH 的情况下,该参数可留空
注: 其他所有 Stanford NLP 接口都有 path_to_jar 这个参数,同样在设置了环境变量的情况下可以留空,后面不再另加说明。
path_to_slf4j: 用来定位 slf4j-api.jar ,在设置了 CLASSPATH 或者 SLF4J 这个环境变量的情况下,该参数可留空
path_to_sihan_corpora_dict: 设定为 stanford-segmenter-.zip 解压后目录中的 data 目录,话说这个参数名真是让人摸不着头脑
path_to_model: 用来指定用于中文分词的模型,在 stanford-segmenter- 的 data 目录下,有两个可用模型 pkg.gz 和 ctb.gz
需要注意的是,使用 StanfordSegmenter 进行中文分词后,其返回结果并不是 list ,而是一个字符串,各个汉语词汇在其中被空格分隔开。
StanfordTokenizer 可以用来进行英文的分词,使用起来比较简单
# coding: utf-8
from nltk.tokenize import StanfordTokenizer
tokenizer = StanfordTokenizer()
sent = "Good muffins cost $3.88\nin New York. Please buy me\ntwo of them.\nThanks."
print tokenizer.tokenize(sent)
[u'Good', u'muffins', u'cost', u'$', u'3.88', u'in', u'New', u'York', u'.', u'Please', u'buy', u'me', u'two', u'of', u'them', u'.', u'Thanks', u'.']
使用 StanfordNERTagger 进行命名实体识别
所谓命名实体识别,是用来识别并标注文本中的人名、地名、组织机构名等单元,这些单元既是 "命名实体"。
# coding: utf-8
from nltk.tag import StanfordNERTagger
eng_tagger = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
print eng_tagger.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]
StanfordNERTagger 在初始化时需要指定所使用的模型,在 stanford-ner-.zip 解压后的 classifiers 目录中,有几个可用的英语 NER 模型:
/home/linusp/stanford/ner/classifiers/├── english.all.3class.distsim.crf.ser.gz├── english.all.3class.distsim.prop├── english.conll.4class.distsim.crf.ser.gz├── english.conll.4class.distsim.prop├── english.muc.7class.distsim.crf.ser.gz├── english.muc.7class.distsim.prop├── example.serialized.ncc.ncc.ser.gz└── example.serialized.ncc.prop
如果需要进行中文的命名实体识别,则可以在
页面的 Models 一节找到中文模型的下载链接,下载得到 stanford-chinese-corenlp--models.jar ,解压后将 edu/stanford/nlp/models/ner/ 目录下的 chinese.misc.distsim.crf.ser.gz 和 chinese.misc.distsim.prop 复制到模型目录下(stanford-ner-/classifiers)即可。
coding: utf-8from nltk.tag import StanfordNERTaggerchi_tagger = StanfordNERTagger('chinese.misc.distsim.crf.ser.gz')sent = u'北海 已 成为 中国 对外开放 中 升起 的 一 颗 明星'for word, tag in chi_tagger.tag(sent.split()): print word.encode('utf-8'), tag
北海 GPE已 O成为 O中国 GPE对外开放 O中 O升起 O的 O一 O颗 O明星 O
使用 StanfordPOSTagger 进行词性标注
所谓词性标注,是根据句子中的上下文信息,给句中每个词确定一个最为合适的词性标记,比如动词、名词、人称代词等。
和 StanfordNERTagger 一样,StanfordPOSTagger 需要的输入也是一个已经分好词的句子,下面是一个英文的词性标注实例:
from nltk.tag import StanfordPOSTaggereng_tagger = StanfordPOSTagger('english-bidirectional-distsim.tagger')print eng_tagger.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]
如果之前配置时下载的是 stanford-postagger-full-xxxx-xx-xx.zip ,在解压后,其中的 models 目录是包含有两个中文模型的,分别是 chinese-distsim.tagger 和 chinese-nodistsim.tagger ,可以直接使用。
coding: utf-8from nltk.tag import StanfordPOSTaggerchi_tagger = StanfordPOSTagger('chinese-distsim.tagger')sent = u'北海 已 成为 中国 对外开放 中 升起 的 一 颗 明星'for _, word_and_tag in chi_tagger.tag(sent.split()): word, tag = word_and_tag.split('#') print word.encode('utf-8'), tag
北海 NR已 AD成为 VV中国 NR对外开放 NN中 LC升起 VV的 DEC一 CD颗 M明星 NN
这个中文的词性标注输出的结果有点奇怪……
使用 StanfordParser 进行句法分析
句法分析在分析单个词的词性的基础上,尝试分析词与词之间的关系,并用这种关系来表示句子的结构。实际上,句法结构可以分为两种,一种是短语结构,另一种是依存结构。前者按句子顺序来提取句法结构,后者则按词与词之间的句法关系来提取句子结构。这里说的句法分析得到的是短语结构。
from nltk.parse.stanford import StanfordParsereng_parser = StanfordParser(model_path=u'edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz')print list(eng_parser.parse("the quick brown fox jumps over the lazy dog".split()))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]
得到的结果是一个 list, 其中的元素是 Tree 类型的,在上面这个例子中,这个 list 的长度是 1 ,调用 Tree 的 draw 方法可以将句法树绘制出来。
eng_parse_tree.png
要进行中文的句法分析,只要指定好中文的模型就好,可用的中文模型有两个,分别是 'edu/stanford/nlp/models/lexparser/chinesePCFG.ser.gz' 和 'edu/stanford/nlp/models/lexparser/chineseFactored.ser.gz',依然拿 "北海 已 成为 中国 对外开放 中 升起 的 一 颗 明星" 这句话作为例子,得到的句法树如下所示。
chi_parse_tree.png
使用 StanfordDependencyParser 进行依存句法分析
见上一节,依存句法分析得到的是句子的依存结构。
from nltk.parse.stanford import StanfordDependencyParsereng_parser = StanfordDependencyParser(model_path=u'edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz')res = list(eng_parser.parse("the quick brown fox jumps over the lazy dog".split()))for row in res[0].triples(): print row
((u'fox', u'NN'), u'det', (u'the', u'DT'))((u'fox', u'NN'), u'amod', (u'quick', u'JJ'))((u'fox', u'NN'), u'amod', (u'brown', u'JJ'))((u'fox', u'NN'), u'dep', (u'jumps', u'NNS'))((u'jumps', u'NNS'), u'nmod', (u'dog', u'NN'))((u'dog', u'NN'), u'case', (u'over', u'IN'))((u'dog', u'NN'), u'det', (u'the', u'DT'))((u'dog', u'NN'), u'amod', (u'lazy', u'JJ'))
绘制出来的依存句法结构如下图所示。
dep_parse_tree.png
中文的依存句法分析同理,在初始化时使用中文模型即可,不再赘述。
StanfordNeuralDependencyParser 的使用与 StanfordDependencyParser 一样,但是在本人的机器上执行非常耗时,即使是对一些简单句子,所以这里就不略过不讲了。
is designed by Rizky AriestiyansyahCopyright (C) 2016
这家伙很烂,什么都没有留下。
机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 1) 注:机器学习资料篇目一共500条,篇目二开始更新 希望转载的朋友,你可以不用联系我.但是一定要保留原文链接,因为这个项目还在继续也在不定期更新.希望看到文章的朋友...
cs.AI - 人工智能cs.CL - 计算与语言cs.CR - 加密与安全cs.CV - 机器视觉与模式识别cs.CY - 计算与社会cs.DC - 分布式、并行与集群计算cs.DS - 数据结构与算法cs.HC - 人机接口cs.IR - 信息检索cs.IT - 信息论...
《Brief History of Machine Learning》 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机、神经网络、决策树、SVM、Adaboost到随机森林、Deep Learning. 《Deep Learning in Neural Netw...
我在github上建了一个知识索引列表,以后会不断的刷新和结构化它。请点击此处访问我的列表。我的目的是不断的吸收各种机器学习,特别是深度学习的知识,构建称为机器学习的知识体系,然后我有另外一个Python的项目去构建一个文本阅读机器人(目前还在起步阶段)。 Deep Mac...
廖君机器学习资料 《机器学习经典算法详解及Python实现--基于SMO的SVM分类器》 介绍:此外作者还有一篇元算法、AdaBoostpython实现文章 《Numerical Optimization: Understanding L-BFGS》 介绍:加州伯克利大学博...
关于这句代码local ok, app = xpcall(require, err_log, &app.& .. app_name)xpcall中有三个参数,而我查了函数原型:xpcall (f, err)它只有两个参数。当实参数量大于形参的数量的时候,多余的参数会被忽略。...
阅读内容:《让未来现在就来》第四章 阅读时间:1小时 收获:尝试的重要性!有时候不要想自己做到做不到,能坚持多久,先去尝试一下,万一自己喜欢呢!
android material design 中文版地址:/project/material-design/ https://wcc723.gitbooks.io/google_design_translate/con...
创建90度扇形坐标数组 要展开的时候将扇形坐标赋值给子控件消失的时候将消失坐标赋值给子控件
在这个年龄段过年,有点寂寞。 身边的同学朋友都已经结婚有孩子了,再也没有那种过年的时候就疯狂地出去耍的日子了。 我自己一个在客厅被逼看完了春晚,被逼着戳了一个晚上的咻咻。 因为我没人约,自己找事情打发时间。 你们有这样吗? 跟我一样,过年那么寂寞。posts - 7,&
comments - 2,&
trackbacks - 0
一、stanford parser是什么?
stanford parser是stanford nlp小组提供的一系列工具之一,能够用来完成语法分析任务。支持英文、中文、德文、法文、阿拉伯文等多种语言。
可以从这里()下载编译好的jar包、源码、javadoc等等。
是FAQ,看一下FAQ基本就能明白很多东西。当然,你得懂英文是吧?哈哈。
二、stanford parser怎么用(针对中文)?
这里只说如何在java工程中调用相关功能。从上面的地址下载到压缩包后,解压缩,将下面两个jar包加入到java build path里即可:
stanford-parser.jar
stanford-parser-xxx-models.jar
在stanford-parser.jar!\edu.stanford.nlp.parser.lexparser.demo包下面有两个最简单的例子,是可以直接运行的。
不过例子给出的是英文的使用方法,我们处理的中文还是有些不一样的。不过,在一中提到的FAQ页面上,是有简单的如何处理中文的使用方法的(第24问),不过处理方式是直接用java命令来做。
FAQ中给出的处理命令如下:
$ java -server -mx500m edu.stanford.nlp.parser.lexparser.LexicalizedParser -encoding utf-8 /u/nlp/data/lexparser/chineseFactored.ser.gz chinese-onesent-utf8.txt
很明显,所有的东西都是从edu.stanford.nlp.parser.lexparser.LexicalizedParser这个类开始的。所以我们只要把这个类的main函数搞清楚,如何处理中文我们大概也就知道了。
在这之前,先看一下训练好的中文grammars:
The parser is supplied with 5 Chinese grammars (and, with access to suitable training data, you could train other versions). You can find them inside the supplied stanford-parser-YYYY-MM-DD-models.jar file (in the GUI, select this file and the at the command line, use jar -tf to see its contents). All of these grammars are trained on data from the , and you should consult their site for details of the syntactic representation of Chinese which they use. They are:
The PCFG parsers are smaller and faster. But the Factored parser is significantly better for Chinese, and we would generally recommend its use. The xinhua grammars are trained solely on Xinhua newspaper text from mainland China. We would recommend their use for parsing material from mainland China. The chinese grammars also include some training material from Hong Kong SAR and Taiwan. We'd recommend their use if parsing material from these areas or a mixture of text types. Note, though that all the training material uses s traditional characters were converted to simplified characters (usually correctly). Four of the parsers assume input that has already been word segmented, while the fifth does word segmentation internal to the parser. This is discussed further below. The parser also comes with 3 Chinese example sentences, in files whose names all begin with chinese.
三、LexicalizedParser类main函数分析
先从javadoc了解下基本用法,main函数支持多个选项。可以用来从treebank data完成建立和序列化一个解析器,可以解析文件或者url页面内容中的句子。
主要就是训练生成解析器,用解析器解析句子两大功能。以下摘自main函数的javadoc:
Sample Usages:
Train a parser (saved to serializedGrammarFilename) from a directory of trees (trainFilesPath, with an optional fileRange, e.g., 0-1000):
java -mx1500m edu.stanford.nlp.parser.lexparser.LexicalizedParser [-v] -train trainFilesPath [fileRange] -saveToSerializedFile serializedGrammarFilename
Train a parser (not saved) from a directory of trees, and test it (reporting scores) on a directory of trees :
java -mx1500m edu.stanford.nlp.parser.lexparser.LexicalizedParser [-v] -train trainFilesPath [fileRange] -testTreebank testFilePath [fileRange]
Parse one or more files, given a serialized grammar and a list of files :
java -mx512m edu.stanford.nlp.parser.lexparser.LexicalizedParser [-v] serializedGrammarPath filename [filename] ...
Test and report scores for a serialized grammar on trees in an output directory :
java -mx512m edu.stanford.nlp.parser.lexparser.LexicalizedParser [-v] -loadFromSerializedFile serializedGrammarPath -testTreebank testFilePath [fileRange]
如果 serializedGrammarPath 以.gz结尾, 那么grammar是以gzip格式来读写的。
如果serializedGrammarPath是一个URL, 以http://开始,则会从URL读取解析器。
fileRange参数 specifies a numeric value that must be included within a filename for it to be used in training or testing (this works well with most current treebanks). It can be specified like a range of pages to be printed, for instance as 200-2199 or 1-300,500-725,9000 or just as 1 (if all your trees are in a single file, just give a dummy argument such as 0 or 1).
解析器可以将语法分写成ca序列化的Java object文件,或者输出到文本文件,或者同时输出两种方式,用如下命令来使用:
java edu.stanford.nlp.parser.lexparser.LexicalizedParser [-v] -train trainFilesPath [fileRange] [-saveToSerializedFile grammarPath] [-saveToTextFile grammarPath]
如果没有提供要解析的文件,则一个默认的句子会被解析。
Parameters:在-v 同样的位置,可以有很多其他的选项,比较常用的如下(水平有限,有的英文就懒的翻译了):
-tLPP class 当使用除英文外的语言或者English Penn Treebank之外的Treebank时候需要指定TreebankLangParserParams,该选项必须出现在其他的与语言相关的选项之前。(即使是导入一个序列化grammar时候,也建议制定该选项;it is necessary if the language pack specifies a needed character encoding or you wish to specify language-specific options on the command line.)
-encoding charset 指定输入输出文件的编码类型。 当这个选项出现在-tLPP选项后时,会覆盖TreebankLangParserParams中设置的值。
-tokenized 输入是否已经完成分词(以空白符分割各词)。此选项存在则忽略分词处理,只使用whitespace进行分词。除非用-escaper指定特殊的escape,否则需要确保分词结果中的特殊符号符合所用的Treebank。(例如,如果用Penn English Treebank, 必须将"(" 转为 "-LRB-", "3/4" 转为 "3\/4", 等等.)
-escaper class 指定一个Function&List&HasWord&,List&HasWord&&类型的类来完成特定的转义工作。例如, it could change "(" to "-LRB-" for the Penn English Treebank. A provided escaper that does such things for the Penn English Treebank isedu.stanford.nlp.process.PTBEscapingProcessor
-tokenizerFactory class 指定一个TokenizerFactory类来完成tokenization
-tokenizerOptions options 指定TokenizerFactory类完成tokenization 所需要的参数信息。类型为 comma-separated list. 对 PTBTokenizer而言, options of interest includeamericanize=false and asciiQuotes (for German). 任意tokenizer的选项,如果和parser training data 时用的tokenization 不同,可能会降低parser 的表现。
-sentences token 指定一个词语来划分句子边界。A value of newline causes sentence breaking on newlines. A value of onePerElement causes each element (using the XML -parseInside option) to be treated as a sentence. All other tokens will be interpreted literally, and must be exactly the same as tokens returned by the tokenizer. For example, you might specify "|||" and put that symbol sequence as a token between sentences. If no explicit sentence breaking option is chosen, sentence breaking is done based on a set of language-particular sentence-ending patterns.
-parseInside element Specifies that parsing should only be done for tokens inside the indicated XML-style elements (done as simple pattern matching, rather than XML parsing). For example, if this is specified as sentence, then the text inside the sentence element would be parsed. Using "-parseInside s" gives you support for the input format of Charniak's parser. Sentences cannot span elements. Whether the contents of the element are treated as one sentence or potentially multiple sentences is controlled by the -sentences flag. The default is potentially multiple sentences. This option gives support for extracting and parsing text from very simple SGML and XML documents, and is provided as a user convenience for that purpose. If you want to really parse XML documents before NLP parsing them, you should use an XML parser, and then call to a LexicalizedParser on appropriate CDATA.
-tagSeparator char Specifies to look for tags on words following the word and separated from it by a special character char. For instance, many tagged corpora have the representation "house/NN" and you would use -tagSeparator /. Notes: This option requires that the input be pretokenized. The separator has to be only a single character, and there is no escaping mechanism. However, splitting is done on the last instance of the character in the token, so that cases like "3\/4/CD" are handled correctly. The parser will in all normal circumstances use the tag you provide, but will override it in the case of very common words in cases where the tag that you provide is not one that it regards as a possible tagging for the word. The parser supports a format where only some of the words in a sentence have a tag (if you are calling the parser programmatically, you indicate them by having them implement the HasTaginterface). You can do this at the command-line by only having tags after some words, but you are limited by the fact that there is no way to escape the tagSeparator character.
-maxLength leng 指定可以被处理的的句子的最大长度,可以限制内存消耗。如果不指定,解析器会渐进的增加处理句子的长度,但可能会遇到内存溢出错误。
-outputFormat styles 输出语句的格式: penn for prettyprinting as in the Penn treebank files, or oneline for printing sentences one per line, words, wordsAndTags,dependencies, typedDependencies, or typedDependenciesCollapsed. 多选项可以输入一个comma-separated list. 参照 TreePrint 类的文档获得更多信息。
-outputFormatOptions 当有多个-outputFormat时,提供更多的参数,比如 lexicalize, stem, markHeadNodes, 或者 xml。选项应该是一个 comma-separated list.
-writeOutputFiles 将输出存至文件,文件名与input files相同保存为".stp" 后缀格式。输出格式依赖于 outputFormat选项. 默认输出至std。
-outputFilesExtension 输出文件的后缀格式,默认是stp。有 -writeOutputFiles选项时起作用。
-outputFilesDirectory 输出目录的路径(当-writeOutputFiles 选项存在时才起作用)。未指定时候输出目录默认与输入目录相同。
-nthreads 解析测试时候支持多线程,本参数指定可以使用的线程数量,当值为负时,线程数被指定为机器cpu核数。
更多信息可以查看该包的使用说明。
四、LexicalizedParser类解析中文句子代码
上面说了这么多没用的,不如直接上代码。分析中文句子的代码如下:
package com.RE.SP
import edu.stanford.nlp.parser.lexparser.LexicalizedP
* Created with IntelliJ IDEA.
* Author: st316
* Date: 13-12-3
* Time: 下午3:42
public class SPtest {
public static void main(String[] args) {
String[] arg2 = {"-encoding", "utf-8",
"-outputFormat", "penn,typedDependenciesCollapsed",
"edu/stanford/nlp/models/lexparser/chineseFactored.ser.gz",
"F:\\RelationExtract\\data\\chinese-onesent-utf8.txt"};
LexicalizedParser.main(arg2);
输出结果:
五、分析结果的含义
ROOT:要处理文本的语句&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& IP:简单从句
NP:名词短语&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& VP:动词短语
PU:断句符,通常是句号、问号、感叹号等标点符号&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& LCP:方位词短语
PP:介词短语&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CP:由&的&构成的表示修饰性关系的短语
DNP:由&的&构成的表示所属关系的短语&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ADVP:副词短语
ADJP:形容词短语&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& DP:限定词短语
QP:量词短语&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NN:常用名词
NR:固有名词&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NT:时间名词
PN:代词&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& VV:动词
VC:是&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CC:不是(应该是吧!!不太确定)
VE:有&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& VA:表语形容词
AS:内容标记(如:了)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& VRD:动补复合词
参考资料:
阅读(...) 评论()}

我要回帖

更多关于 stanford parser 依存 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信