Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 使用OpenNLP从解析的内容中删除停止词_Java_Nlp_Stop Words_Opennlp - Fatal编程技术网

Java 使用OpenNLP从解析的内容中删除停止词

Java 使用OpenNLP从解析的内容中删除停止词,java,nlp,stop-words,opennlp,Java,Nlp,Stop Words,Opennlp,我已经使用本文提供的OpenNLP解析器代码解析了该文档,并获得了以下输出: (TOP (S (NP (NN Programcreek)) (VP (VBZ is) (NP (DT a) (ADJP (RB very) (JJ huge) (CC and) (JJ useful)) (NN website))))) 从这里我只想提取有意义的单词,也就是说我想删除所有的stopwords,因为我想根据这些有意义的单词进一步分类。你能建议我如何从解析的输出中删除stopwords吗 最后,我想得到

我已经使用本文提供的OpenNLP解析器代码解析了该文档,并获得了以下输出:

(TOP (S (NP (NN Programcreek)) (VP (VBZ is) (NP (DT a) (ADJP (RB very) (JJ huge) (CC and) (JJ useful)) (NN website)))))
从这里我只想提取有意义的单词,也就是说我想删除所有的stopwords,因为我想根据这些有意义的单词进一步分类。你能建议我如何从解析的输出中删除stopwords吗

最后,我想得到下面的输出

   (TOP (S (NP (NN Programcreek)) (JJ useful)) (NN website)))))

请帮我解决这个问题,如果OpenNLP无法实现,请向我推荐任何其他用于自然语言处理的Java库。因为我的主要目的是解析文档并只获取有意义的单词。

在将其传递给OpenNLP之前,您可以轻松地从文本中删除所有停止词

  • 将停止字存储在数组中
  • 按字长对数组进行排序,以避免在“没有”之前删除“有”并以“没有”结尾等问题
  • 使用正则表达式删除所有单词,确保忽略大小写并仅删除整个单词
  • 下面是如何在.NET中实现这一点,您可以将其应用于Java

    public string CleanStopWords(string inputText)
    {
        string[] stopWords = new string[] { 
            "a", "all", "am", "an", "and", "any", "are", "aren't", 
            "as", "at", "be", "because", "been", "to", "from", "by", 
            "can", "can't", "do", "don't", "didn't", "did" };
    
        stopWords = stopWords.OrderByDescending(w => w.Length).ToArray();
    
        string outputText = Regex.Replace(inputText, "\\b" + string.Join("\\b|\\b", stopWords) + "\\b", "", RegexOptions.IgnoreCase);
    
        return outputText;
    }
    

    OpenNLP似乎不支持此功能。您必须按照OlenaVikary的建议去做,并自己实现,或者使用Java中不同的NLP库,比如Mallet

    Java中删除停止字的实现如下(不需要排序):

    你可以使用英语停止词

    或者使用木槌,您必须遵循教程。 为此,使用管道定义要删除停止词的零件:

    pipeList.add(new TokenSequenceRemoveStopwords(false, false));
    
    Mallet包含一个停止词列表,因此您不需要定义它们,但如果需要,它也可以扩展


    希望这能有所帮助。

    在这个问题上,他们建议使用lucene,但我只需要使用opennlp
    pipeList.add(new TokenSequenceRemoveStopwords(false, false));