在先前标记的句子上使用斯坦福依赖性解析器

时间:2014-01-08 01:54:43

标签: java twitter nlp stanford-nlp part-of-speech

我目前正在使用Twitter POS标记器available here将推文标记为Penn-Tree Bank标记。

以下是代码:

import java.util.List;

import cmu.arktweetnlp.Tagger;
import cmu.arktweetnlp.Tagger.TaggedToken;

/* Tags the tweet text */
List<TaggedToken> tagTweet(String text) throws IOException {

    // Loads Penn Treebank POS tags
    tagger.loadModel("res/model.ritter_ptb_alldata_fixed.txt");

    // Tags the tweet text
    taggedTokens = tagger.tokenizeAndTag(text);

    return taggedTokens;
}

现在我需要确定直接对象在这些标记中的位置。经过一番搜索,我发现Stanford Parser可以通过Stanford Typed Dependencies(online example)来做到这一点。通过使用dobj()调用,我应该能够得到我需要的东西。

但是,我没有找到任何关于如何将已标记的句子提供到此工具中的良好文档。根据我的理解,在使用Dependency Parser之前,我需要从句子的标记/标记创建一个树。这是怎么做到的?我找不到任何示例代码。

Twitter POS Tagger包含斯坦福NLP工具的一个实例,所以我不远,但是我不熟悉斯坦福工具将我的POS标记文本输入到它中以获得依赖解析器工作正常。 The FAQ does mention this functionality,但没有任何示例代码,我有点卡住了。

1 个答案:

答案 0 :(得分:2)

以下是完全手动创建the FAQ中讨论的List的方法:

String[] sent3 = { "It", "can", "can", "it", "." };
// Parser gets second "can" wrong without help (parsing it as modal MD)
String[] tag3 = { "PRP", "MD", "VB", "PRP", "." };                                                 
List<TaggedWord> sentence3 = new ArrayList<TaggedWord>();
for (int i = 0; i < sent3.length; i++) {
  sentence3.add(new TaggedWord(sent3[i], tag3[i]));
}
Tree parse = lp.parse(sentence3);
parse.pennPrint();