Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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 - Fatal编程技术网

从文本中提取名词(Java)

从文本中提取名词(Java),java,nlp,Java,Nlp,有人知道从正文中只提取名词的最简单方法吗 我听说了这件事,我试着尝试一下,但由于某种原因无法让它发挥作用 有什么建议吗 谢谢你,菲尔 编辑: import org.annolab.tt4j.*; TreeTaggerWrapper tt = new TreeTaggerWrapper(); try { tt.setModel("/Nouns/english.par"); tt.setHandler(new TokenHandler() { void token(String

有人知道从正文中只提取名词的最简单方法吗

我听说了这件事,我试着尝试一下,但由于某种原因无法让它发挥作用

有什么建议吗

谢谢你,菲尔

编辑:

import org.annolab.tt4j.*; TreeTaggerWrapper tt = new TreeTaggerWrapper(); try { tt.setModel("/Nouns/english.par"); tt.setHandler(new TokenHandler() { void token(String token, String pos, String lemma) { System.out.println(token+"\t"+pos+"\t"+lemma); } }); tt.process(words); // words = list of words } finally { tt.destroy(); } 导入org.annolab.tt4j.*; TreeTaggerWrapper tt=新的TreeTaggerWrapper(); 试试{tt.setModel(“/nomes/english.par”); tt.setHandler(新的TokenHandler(){ void标记(字符串标记、字符串位置、字符串引理){ System.out.println(token+“\t”+pos+“\t”+引理);}); tt.process(words);//words=单词列表 }最后{tt.destroy(); } 这是我的代码,英语是我的语言。我得到了一个错误:类型new TokenHandler(){}必须实现继承的抽象方法TokenHandler.token。我做错什么了吗?

看看数据库。这个词法数据库。你可以试着把每个单词和它匹配起来,然后检查它是否是名词


不过,我怀疑你是否有100%的准确度;该数据库并没有匹配英语中所有可能的单词,但至少这是一个开始。

请检查。这应该可以从英文文本中挑选出来。但我必须承认这不是我的专长。

最简单的方法可能是将文本中的每个单词与名词词典进行比较。之后,您可能需要进行一些基本的解析,并接受结果中的近似正确性。大量关于解析自然语言的在线参考。

查找一个带有API(例如WS、RESTful)的词典网站,您可以使用该API运行搜索查询


结果应采用易于使用的格式(如XML、JSON),当然还应包括单词的词法类别。

首先,您必须标记文本。这可能看起来很琐碎(在任何空白处拆分都可能对您有用),但从形式上来说更难。然后你必须决定什么是名词。“停车场”包含一个名词(停车场)、两个名词(汽车、停车场)还是一个名词(停车场)和一个形容词(汽车)?这是一个很难解决的问题,但同样地,没有它你也可以过得去

“我看到了xyzzy”是否表示字典中没有的名词?单词“The”可能将xyzy标识为一个名词

“光阴似箭”中的名词在哪里。与“像香蕉一样的果蝇”相比(感谢格劳乔·马克思)

我们使用OpenNLP工具包(OpenNLP.tools.lang.english.PosTagger;OpenNLP.tools.postag.poston)中的Brown标记器(Java)()来查找普通英语中的名词,我建议您从这一点开始—它可以帮您解决大部分问题。否则,看看任何一个邮戳 ()或()

在计算机词性标注中, 这是典型的区别50 到150个不同的词类 例如,英语中NN表示单数 普通名词,NNS表示复数普通名词 名词,NP表示单数专有名词 (请参阅本手册中使用的POS标签。) 语料库)

中有一个非常完整的NLP工具包列表。我强烈建议您使用其中一种,而不是尝试与Wordnet或其他集合进行匹配。

根据您的编辑:


错误表示必须重写抽象方法令牌,并且在匿名内部类中有令牌的定义,但令牌重写的签名可能与在TokenHandler中定义的抽象方法的签名不匹配?

我的以下代码适用于TreeTagger:

public List<String> tag(String str) {
    final List<String> tagLemme = new ArrayList<String>();
    String[] tokens =tokenizer.tokenize(str);
      System.setProperty("treetagger.home", "parametresTreeTagger/TreeTagger");
    TreeTaggerWrapper tt = new TreeTaggerWrapper<String>();
    try {
        tt.setModel("parametresTreeTagger/english/english.par");
        tt.setHandler(new TokenHandler<String>(){
                public void token(String token, String pos, String lemma) {
                        tagLemme.add(token + "_" + pos + "_" + lemma);
                        //System.out.println(token + "_" + pos + "_" + lemma);
                }
        });
        tt.process(asList(tokens));
     } catch (IOException e) {
        e.printStackTrace();
      } catch (TreeTaggerException e) {
        e.printStackTrace();
    }
finally {
        tt.destroy();
}
    return tagLemme;
}
公共列表标记(字符串str){
最终列表标记名=新的ArrayList();
String[]tokens=tokenizer.tokenize(str);
System.setProperty(“treetagger.home”、“ParameterStreetAgger/treetagger”);
TreeTaggerWrapper tt=新的TreeTaggerWrapper();
试一试{
tt.setModel(“parametresTreeTagger/english/english.par”);
tt.setHandler(新的TokenHandler(){
公共无效令牌(字符串令牌、字符串位置、字符串引理){
tagLemme.add(标记+“”+位置+“”+引理);
//System.out.println(token+“”+pos+“”+引理);
}
});
tt.进程(asList(令牌));
}捕获(IOE异常){
e、 printStackTrace();
}捕获(树袋鼠){
e、 printStackTrace();
}
最后{
tt.destroy();
}
返回标记名;
}

介意解释一下TreeTagger到底有什么不起作用吗?您能具体说明您的问题吗?特别是语言会很高兴知道。。。例如,德语有一个很好的优势,即所有名词的第一个字母都大写。我不熟悉TreeTagger API,但我会先在setHandler()之外实例化TokenHandler,这可能会给出更清晰的信息。我的猜测是,TokenHandler是抽象的,但…另请参见:。这和专有名词有关,这并不准确。例如,拿“He is walking to school.”和“He said that walking is deafting.”这句话来说,在第二句中,“walking”是一个名词(通过动名词名词化的动词),但在第一句中,它是动词“to walking”的进行形式。这只是一个例子,还有更多的问题。解释+1。有些人似乎认为NLP并不那么难,其实它是计算中最复杂的事情之一。有大量的角落案例,当处理的语言突然改变时,一切都将毫无用处。此外,在更理论的层面上,你还有一个问题,那就是名词、动词、代词等的定义不止一个。@Maximilian感谢你的支持。我们同意这很难。幸运的是,我们只是试图解释化学家编写的语言,这要容易得多!非常好的帖子,谢谢。目前正在下载lingpipe,不过我在windows上,希望它没有太多讨厌的.sh脚本!hahaWe使用了LingPipe,但它不是开放的,我们必须有一个开放的分销系统。如果你只是个人使用