java - 使用 OpenNLP 从解析的内容中删除停用词

标签 java nlp stop-words opennlp

我已经使用此 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/

相关文章:

java - 在java中写入文件时插入 header 的最佳方法

python - 如何从 Spacy 获得更好的引理

elasticsearch - Elasticsearch中的自定义预定义停用词列表

java - java中的停止 token 过滤器以使用您想要的停止词

java - 启动错误 : org. springframework.beans.factory.BeanCreationException: Error creating bean with name

java - jar找不到里面文件的路径

java - 正确设置 MockHttpServletRequestBuilder 的 RequestBody

machine-learning - 从自然语言文本中提取数据

machine-learning - 无法训练我的 keras 模型 : (Data cardinality is ambiguous:)

python - 从 Python 字符串列中删除停用词