如果我从主页上举个例子:
The strongest rain ever recorded in India shut down
the financial hub of Mumbai, snapped communication
lines, closed airports and forced thousands of people
to sleep in their offices or walk home during the night,
officials said today.
斯坦福解析器:
LexicalizedParser lexicalizedParser = LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz");
Tree parse = lexicalizedParser.parse(text);
TreePrint treePrint = new TreePrint("penn, typedDependencies");
treePrint.printTree(parse);
交付下面的树:
(ROOT
(S
(S
(NP
(NP (DT The) (JJS strongest) (NN rain))
(VP
(ADVP (RB ever))
(VBN recorded)
(PP (IN in)
(NP (NNP India)))))
(VP
(VP (VBD shut)
(PRT (RP down))
(NP
(NP (DT the) (JJ financial) (NN hub))
(PP (IN of)
(NP (NNP Mumbai)))))
(, ,)
(VP (VBD snapped)
(NP (NN communication) (NNS lines)))
(, ,)
(VP (VBD closed)
(NP (NNS airports)))
(CC and)
(VP (VBD forced)
(NP
(NP (NNS thousands))
(PP (IN of)
(NP (NNS people))))
(S
(VP (TO to)
(VP
(VP (VB sleep)
(PP (IN in)
(NP (PRP$ their) (NNS offices))))
(CC or)
(VP (VB walk)
(NP (NN home))
(PP (IN during)
(NP (DT the) (NN night))))))))))
(, ,)
(NP (NNS officials))
(VP (VBD said)
(NP-TMP (NN today)))
(. .)))
我现在想拆分依赖于其结构的树以获取子句。所以在这个例子中,我想拆分树以获得以下部分:
所以第一个答案是使用递归算法打印所有根到叶的路径。
以下是我尝试过的代码:
public static void main(String[] args) throws IOException {
LexicalizedParser lexicalizedParser = LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz");
Tree tree = lexicalizedParser.parse("In a ceremony that was conspicuously short on pomp and circumstance at a time of austerity, Felipe, 46, took over from his father, King Juan Carlos, 76.");
printAllRootToLeafPaths(tree, new ArrayList<String>());
}
private static void printAllRootToLeafPaths(Tree tree, List<String> path) {
if(tree != null) {
if(tree.isLeaf()) {
path.add(tree.nodeString());
}
if(tree.children().length == 0) {
System.out.println(path);
} else {
for(Tree child : tree.children()) {
printAllRootToLeafPaths(child, path);
}
}
path.remove(tree.nodeString());
}
}
当然,这段代码完全不符合逻辑,因为如果我只是将leaf添加到路径中,就永远不会有递归调用,因为leaf没有子对象。这里的问题是,所有真实的单词都是leaf,所以这个算法只会打印出单个单词,它们是leaf:
[The]
[strongest]
[rain]
[ever]
[recorded]
[in]
[India]
[shut]
[down]
[the]
[financial]
[hub]
[of]
[Mumbai]
[,]
[snapped]
[communication]
[lines]
[,]
[closed]
[airports]
[and]
[forced]
[thousands]
[of]
[people]
[to]
[sleep]
[in]
[their]
[offices]
[or]
[walk]
[home]
[during]
[the]
[night]
[,]
[officials]
[said]
[today]
[.]
看看打印二叉树或分裂二叉树中的所有根到叶路径:
我使用StanfordNLP来标记用智能手机编写的一组消息。这些文本有很多拼写错误,不遵守标点符号规则。通常,空格缺失会影响标记化。 例如,以下句子漏掉了“California.This”和“university,founded”中的空格。 斯坦福大学位于加利福尼亚州,这所大学是一所伟大的大学,创建于1891年。 标记器返回: {“斯坦福”、“大学”、“是”、“位于”、“加利福尼亚州”。这个”、“
问题内容: 如何使用Stanford解析器将文本或段落拆分为句子? 有没有可以提取句子的方法(例如为Ruby提供的方法)? 问题答案: 您可以检查DocumentPreprocessor类。以下是一个简短的摘要。我认为可能还有其他方式可以做您想要的事情。
我是斯坦福核心NLP的新手。我想用它来从英语,德语,法语的文本中拆分句子。这是哪一个班的工作?提前谢谢。
试图运行示例,但我一直无法打开“english-left3words-distsim.tagger”文件可能丢失。文件没有丢失,目录指向模型jar文件的位置,路径:edu\stanford\nlp\模型\pos-tagger\english-left3word在jar文件中是正确的。 我使用3.7.0,安装从nuget在视觉工作室2015. 代码如下: 我确实在Stack上看到了一个类似的问题,他
我试图分多个步骤运行核心管道,以减少昂贵的解析和注释步骤。 我有一个文档集,目前我正在用管道标记和破译它们。这很有效,在一定程度上,我可以利用这些信息做我需要做的事情。 根据我对标记化句子的处理,有些需要解析依赖关系,有些需要解析依赖关系,有些可能被认为不重要而丢弃。 我可以看到依赖关系解析器可以接收一个句子的核心图,然后返回依赖关系图。但在网上阅读时,我发现使用词性标注可以改善句法分析,这当然是
我曾使用grep和awk从斯坦福CRF-NER的“内联XML”中提取英语文本中的命名实体,我希望在其他人类语言中使用相同的更大工作流。 我一直在尝试法语(西班牙语似乎给我带来了一个Java错误,这是另一个故事),并使用我得到标准文本输出,每个句子都有各种类型的注释,包括正确组合在一起的多单词实体,如下所示: 我知道解析它是可能的,但当我真的只是想要整个文件中的实体列表时,这似乎浪费了很多处理。 我