我正在使用Stanford Parser来解析单词之间的依赖关系,但我还需要标记单词。但是,在ParseDemo.java中,程序仅输出标记树。我需要每个单词的标记如下:
My/PRP$ dog/NN also/RB likes/VBZ eating/VBG bananas/NNS ./.
不喜欢这样:
(ROOT
(S
(NP (PRP$ My) (NN dog))
(ADVP (RB also))
(VP (VBZ likes)
(S
(VP (VBG eating)
(S
(ADJP (NNS bananas))))))
(. .)))
谁能帮帮我?非常感谢。
答案 0 :(得分:12)
如果您主要对在程序中操作标记感兴趣,并且不需要TreePrint
功能,则可以将标记的单词作为列表获取:
LexicalizedParser lp =
LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz");
Tree parse = lp.apply(Arrays.asList(sent));
List taggedWords = parse.taggedYield();
答案 1 :(得分:3)
在命令行上运行edu.stanford.nlp.parser.lexparser.LexicalizedParser时,您要使用:
-outputFormat "wordsAndTags"
以编程方式,使用由formatString =“wordsAndTags”构造的TreePrint类并调用printTree,如下所示:
TreePrint posPrinter = new TreePrint("wordsAndTags", yourPrintWriter);
posPrinter.printTree(yourLexParser.getBestParse());
答案 2 :(得分:2)
String[] sent = { "This", "is", "an", "easy", "sentence", "." };
List<CoreLabel> rawWords = Sentence.toCoreLabelList(sent);
Tree parse = lp.apply(rawWords);
ArrayList ar=parse.taggedYield();
System.out.println(ar.toString());
答案 3 :(得分:0)
这个答案有点过时,所以我决定添加自己的答案。因此,使用Stanford Parser 3.6.0版(maven依赖项):
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-parser</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.6.0</version>
<classifier>models</classifier>
</dependency>
private static MaxentTagger tagger = new MaxentTagger(MaxentTagger.DEFAULT_JAR_PATH);
public String getTaggedString(String someString) {
String taggedString = tagger.tagString(someString);
return taggedString;
}
这将返回I_PRP claim_VBP the_DT rights_NNS
'I claim the rights'
所以如果你想使用java和stanford解析器检测短语中的动词,你可以这样做:
public boolean containsVerb(String someString) {
String taggedString = tagger.tagString(someString);
String[] tokens = taggedString.split(" ");
for (String tok : tokens){
String[] taggedTokens = tok.split("_");
if (taggedTokens[1].startsWith("VB")){
return true;
}
}
return false;
}