java - 从java中的词干文本中提取专有名词

标签 java nlp opennlp porter-stemmer

我正在使用 OpenNLP 从句子中提取专有名词。这是我的代码:

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Set;

import opennlp.tools.cmdline.parser.ParserTool;
import opennlp.tools.parser.Parse;
import opennlp.tools.parser.Parser;
import opennlp.tools.parser.ParserFactory;
import opennlp.tools.parser.ParserModel;

public class ParserTest {

    static Set<String> nounPhrases = new HashSet<>();

    private static String line = "iran india pai oil due euro delhi iran ask indian refin essar oil mangalor refineri petrochem mrpl clear oil due amount billion euro month lift sanction iran told indian author three year mechan pai cent oil import bill rupe keep remain cent pend payment channel clear end.";

    public void getNounPhrases(Parse p) {
        if (p.getType().equals("NNP") || p.getType().equals("NNPS")) {
             nounPhrases.add(p.getCoveredText());
             System.out.println(p.getCoveredText());
        }

        for (Parse child : p.getChildren()) {
             getNounPhrases(child);
        }
    }


    public void parserAction() throws Exception {
        InputStream is = new FileInputStream("C:\\Users\\asus\\Downloads\\en-parser-chunking.bin");
        ParserModel model = new ParserModel(is);
        Parser parser = ParserFactory.create(model);
        Parse topParses[] = ParserTool.parseLine(line, parser, 1);
        for (Parse p : topParses){
            //p.show();
            getNounPhrases(p);
        }
    }
    public static void main(String[] args) throws Exception {
        new ParserTest().parserAction();
        System.out.println("List of Noun Parse : "+nounPhrases);
    }
}

问题是它是一个词干文本(我使用了波特词干算法),所以每个单词都是小写的。因此,专有名词没有被提取。我上面提取专有名词的方法是否正确?如果是,那么我必须在代码中进行哪些更改才能使其正常工作?如果没有,那么建议我一种新方法以及示例代码将帮助我做到这一点。

谢谢。

最佳答案

我认为,除非您在词干文本上训练名词短语的分块模型,否则在词干提取完成之前,您将必须在处理管道的上游进一步运行名词短语提取。另外,在我看来,根据上面的输入字符串,在您的过程中,您正在消除停用词和词干,这也会导致问题,因为您将无法正确对齐下游的两组跨度。 因此,如果您可以控制向您提供词干文本的过程,则应该将名词短语向上移动,并将原始标记、词干标记、NNP 和任何其他元数据(例如 NER 结果)向下传递到您现在所在的位置...然后您就可以使用了。 HTH

关于java - 从java中的词干文本中提取专有名词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35980306/

相关文章:

java - Hibernate 中的 ManyToOne 关系错误

java - EL 中的异或 (XOR)

JavaFX-任务中的新阶段

python - wordnet中的lemma和synset有什么联系或区别?

python - 我应该为命名实体识别提取域词吗?

java - 安装 OpenNLP 1.8.3 时出现问题

parsing - opennlp 与 corenlp : Market reach - popularity

java - 如何 "update"一个现有的命名实体识别模型——而不是从头开始创建?

java - 我们可以将 init 方法的用途替换为 servlet 构造函数吗?

tensorflow - 在自定义数据上微调 BERT