gpt4 book ai didi

java - 使用 Stanford NLP 找出描述名词的形容词

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:39 24 4
gpt4 key购买 nike

我需要编写一段代码,将几行关于产品的评论作为输入,并根据评论中描述产品的形容词对产品进行评级。我刚刚使用词性标注器来标注每条评论的词性。现在,我必须挑选出描述名词的形容词,如果一个名词似乎与产品相关,我需要考虑相应的形容词。这是我用于 POS 标记的代码。它工作正常。

import java.io.*;
import edu.stanford.nlp.tagger.maxent.MaxentTagger;
public class Tagg {
public static void main(String[] args) throws IOException,
ClassNotFoundException {

String tagged;

// Initialize the tagger
MaxentTagger tagger = new MaxentTagger("edu/stanford/nlp/models/pos-tagger/wsj- left3words/wsj-0-18-left3words-distsim.tagger");
FileInputStream fstream = new FileInputStream("src/input.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
FileWriter q = new FileWriter("src/output.txt",true);
BufferedWriter out =new BufferedWriter(q);
String sample;
//we will now pick up sentences line by line from the file input.txt and store it in the string sample
while((sample = br.readLine())!=null)
{
//tag the string
tagged = tagger.tagString(sample);
System.out.print(tagged+"\n");
//write it to the file output.txt
out.write(tagged);
out.newLine();
}
out.close();
}
}

我需要一种方法来继续。 .

最佳答案

一个简单的解决方案会让你走得更远,那就是使用依赖解析器,它包含在 Stanford CoreNLP 中。算法是这样的:

  1. PoS 标签和 Dependency 解析你的句子
  2. 确定您对哪些名词感兴趣。如果您要处理产品评论,一种简单的方法是将文本中的所有名词与已知产品名称列表进行匹配。
  3. 在依赖解析器的输出中查找包含您感兴趣的名词的 amod 关系。

使用 online Stanford demo 的示例:

输入:

I own a tall glass and just bought a big red car.

amod 依赖:

amod(glass-5, tall-4)
amod(car-12, big-10)
amod(car-12, red-11)

假设评论是关于汽车的。最后两个依赖项包含目标名词 car,因此您要查找的形容词是 bigred

警告:这是一个高精度搜索算法,而不是高召回率。您的关键字列表永远不会详尽无遗,因此您很可能会漏掉一些形容词。此外,解析器并不完美,有时会出错。此外,amod 关系是形容词描述名词的多种方式之一。例如,"The car is red" 解析为

det(car-2, The-1)
nsubj(red-4, car-2)
nsubj(black-6, car-2)
cop(red-4, is-3)
root(ROOT-0, red-4)
conj_and(red-4, black-6)

如您所见,这里没有amod 关系,只有系词和连词。您可以尝试制定更复杂的规则来提取 car is redcar is black 这一事实。是否要这样做取决于您。在当前形式下,当此算法返回形容词时,您可以有理由相信它确实在描述名词。在我看来,这是一个很好的特性,但这完全取决于您的用例。


OP评论后编辑:

是的,I bought a new car.It is awesome. 是两个独立的句子,将分别进行解析。此问题称为 coreference (anaphora) resolution .事实证明,斯坦福大学也支持这一点——参见 their webpage .还有a system by CMU ,这也是在 Java 中。我没有使用过这两个系统,但后者有一个非常有用的在线演示。把上面两句话放进去,就得到了

[I] bought [a new car]2 .
[It]2 is awesome .

关于java - 使用 Stanford NLP 找出描述名词的形容词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17251156/

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