gpt4 book ai didi

java - 通过 Stanford 解析器提取所有名词、形容词形式和文本

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:33:45 26 4
gpt4 key购买 nike

我正在尝试通过 Stanford 解析器从给定文本中提取所有名词和形容词。

我目前的尝试是在 Tree-Object 的 getChildrenAsList() 中使用模式匹配来定位如下内容:

(NN paper), (NN algorithm), (NN information), ...      

并将它们保存在一个数组中。

输入句子:

In this paper we present an algorithm that extracts semantic information from an arbitrary text.

结果 - 字符串:

[(S (PP (IN In) (NP (DT this) (NN paper))) (NP (PRP we)) (VP (VBP present) (NP (NP (DT an) (NN algorithm)) (SBAR (WHNP (WDT that)) (S (VP (VBD extracts) (NP (JJ semantic) (NN information)) (PP (IN from) (NP (DT an) (ADJP (JJ arbitrary)) (NN text)))))))) (. .))]

我尝试使用模式匹配,因为我无法在 Stanford 解析器中找到返回所有词类(例如名词)的方法。

是否有更好的方法来提取这些词类,或者解析器是否提供了特定的方法?

public static void main(String[] args) {
String str = "In this paper we present an algorithm that extracts semantic information from an arbitrary text.";
LexicalizedParser lp = new LexicalizedParser("englishPCFG.ser.gz");
Tree parseS = (Tree) lp.apply(str);
System.out.println("tr.getChildrenAsList().toString()"+ parseS.getChildrenAsList().toString());
}
}

最佳答案

顺便说一句,如果您只需要名词和动词之类的词性,您应该只使用词性标注器,例如 Stanford 词性标注器。它的运行速度将提高几个数量级,并且至少同样准确。

但是你可以用解析器来做。你想要的方法是taggedYield()返回 List<TaggedWord> .所以你有

List<TaggedWord> taggedWords = (Tree) lp.apply(str);
for (TaggedWord tw : taggedWords) {
if (tw.tag().startsWith("N") || tw.tag().startsWith("J")) {
System.out.printf("%s/%s%n", tw.word(), tw.tag());
}
}

(此方法偷工减料,知道在 Penn treebank 标签集中所有且只有形容词和名词标签以 J 或 N 开头。您可以更普遍地检查一组标签中的成员资格。)

附注stackoverflow 上的 Stanford NLP 工具最好使用标签 stanford-nlp。

关于java - 通过 Stanford 解析器提取所有名词、形容词形式和文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6044354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com