Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中从词干文本中提取专有名词_Java_Nlp_Opennlp_Porter Stemmer - Fatal编程技术网

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

java中从词干文本中提取专有名词,java,nlp,opennlp,porter-stemmer,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.P

我使用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);
    }
}
import java.io.FileInputStream;
导入java.io.InputStream;
导入java.util.HashSet;
导入java.util.Set;
导入opennlp.tools.cmdline.parser.ParserTool;
导入opennlp.tools.parser.Parse;
导入opennlp.tools.parser.parser;
导入opennlp.tools.parser.ParserFactory;
导入opennlp.tools.parser.ParserModel;
公共类ParserTest{
静态集合=新HashSet();
private static String line=“伊朗-印度-派伊石油到期欧元-德里-伊朗要求印度石油公司-曼格洛炼油厂-中石油mrpl清理到期石油金额亿欧元-月解除制裁-伊朗告诉印度作者三年期机械-派伊分石油进口账单卢比保留分待付款渠道清理结束。”;
公共短语(解析p){
if(p.getType().equals(“NNP”)| | p.getType().equals(“NNPS”)){
名词短语.add(p.getCoveredText());
System.out.println(p.getCoveredText());
}
for(解析子对象:p.getChildren()){
英语短语(儿童);
}
}
public void parserAction()引发异常{
InputStream is=新文件InputStream(“C:\\Users\\asus\\Downloads\\en parser chunking.bin”);
ParserModel模型=新的ParserModel(is);
Parser=ParserFactory.create(model);
Parse-topParses[]=ParserTool.parseLine(第行,解析器,1);
for(解析p:topParses){
//p、 show();
短语(p);
}
}
公共静态void main(字符串[]args)引发异常{
新建ParserTest().parserAction();
System.out.println(“名词解析列表:“+名词短语”);
}
}
问题是它是一个词干文本(我使用波特词干算法),所以每个单词都是小写的。正因为如此,专有名词没有被提取出来。我上面提取专有名词的方法正确吗?如果是,那么我必须对代码进行哪些更改才能使其正常工作?如果没有,那么建议我一个新的方法和一个示例代码将帮助我做到这一点


多谢各位

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

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