java - 从 Java 中的字符串中删除停用词

标签 java regex stop-words

我有一个包含很多单词的字符串,我需要计算。

但我想避免一些对上下文没有意义的词。

所以,我有一个文件,其中包含我将忽略的所有单词。我打开这个文件并创建一个列表,我称之为

ArrayList<String> stopWordsList;

现在我有了字符串,需要清理它,从列表中删除停用词。

我试过这样的:

String example = "Job in a software factory. Work with Agile, Spring, Hibernate, GWT, etc.";

for(String stopWord : stopWordsList){
    example = example.replaceAll(" "+ stopWord + " ", " ");
}

在此之后,字符串示例应该是:

"Job software factory. Work Agile, Spring, Hibernate, GWT, ."

问题是“等”。没有删除它,因为单词后面有一个点。

然后我尝试了:

for(String stopWord : stopWordsList){
    example = example.replaceAll(" "+ stopWord + " ", " ");    
    example = example.replaceAll(" "+ stopWord + ",", ",");     
    example = example.replaceAll(" "+ stopWord + ".", ".");
}

但是,这是不对的,它不能满足我的需要。

谁能帮我找到一种方法来清理这个字符串,包括标点符号或空格之前的单词。

PS:我不能随便做

 example = example.replaceAll(stopWord, " ");   

因为这可以打破一些像“initial”这样的词。它会删除“in”并留下“initial”。

最佳答案

最简单的方法可能是沿单词边界拆分字符串并添加除停用词之外的所有内容。

StringBuilder result = new StringBuilder(example.length());
for (String s : result.split("\\b")) {
    if (!stopWordsSet.contains(s)) result.append(s);
}

关于java - 从 Java 中的字符串中删除停用词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206915/

相关文章:

java - 按对象属性值查找

java - 为什么这段代码(IDE Eclipse)中没有抛出 EOFException?

javascript - RegExp 替换在再次替换时导致错误结果

regex - 如何在 R 中使用子函数

language-agnostic - 为什么这些词被视为停用词?

java - 在奇数索引处反转队列中的数字

java - JTextField 焦点未集中在第一次单击 Tab 按钮上

正则表达式匹配重复的行首字符串并删除重复项

Elasticsearch:使用关键字标记器但不使用停用词对字段进行索引

sql-server - 全文搜索 : Noise words are being searched for