我已经使用此 link 中提供的 OpenNLP 解析器代码解析了文档我得到了以下输出:
(TOP (S (NP (NN Programcreek)) (VP (VBZ is) (NP (DT a) (ADJP (RB very) (JJ huge) (CC and) (JJ useful)) (NN website)))))
由此我只想提取有意义的词,意思是我想删除所有停用词,因为我想根据这些有意义的词进一步做分类。您能否建议我如何从解析的输出中删除停用词?
最后我想得到下面的输出
(TOP (S (NP (NN Programcreek)) (JJ useful)) (NN website)))))
请帮我解决这个问题,如果 OpenNLP 无法实现,请向我推荐任何其他用于自然语言处理的 Java 库。因为我的主要目的是解析文档并仅获取有意义的单词。
最佳答案
OpenNLP 似乎不支持此功能。您必须按照 Olena Vikariy 的建议自行实现,或者使用不同的 Java NLP 库,例如 Mallet。
Java中去除停用词的实现如下(不需要排序):
String testText = "This is a text you want to test";
String[] stopWords = new String[]{"a", "able", "about", "above", "according", "accordingly", "across", "actually", "after", "afterwards", "again", "against", "all"};
String stopWordsPattern = String.join("|", stopWords);
Pattern pattern = Pattern.compile("\\b(?:" + stopWordsPattern + ")\\b\\s*", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(testText);
testText = matcher.replaceAll("");
您可以使用 this list英语停用词。
或者使用 Mallet,您必须遵循教程 here . 删除停用词的部分是为此目的使用管道定义的:
pipeList.add(new TokenSequenceRemoveStopwords(false, false));
Mallet 包含一个停用词列表,因此您无需定义它们,但如果需要也可以对其进行扩展。
希望这对您有所帮助。
关于java - 使用 OpenNLP 从解析的内容中删除停用词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17739006/