使用Java从文本中删除停止字(如a等)的有效方法是什么

使用Java从文本中删除停止字(如a等)的有效方法是什么,java,performance,nlp,opennlp,Java,Performance,Nlp,Opennlp,在使用基于JAVA的文档分类器(如OpenNLP)等之前,是否有方法删除停止词(如“of”“a”“the”等)。或者,如果您自己(使用JAVA)执行此操作,最有效的方法是什么(考虑到字符串比较效率较低)。此外,考虑到每个文档本身并没有那么大,即平均约100字,但假设文档数量很大 E.g., // Populate the stop words to a list List<String> stopWordsList = ArrayList<>(); // Iterat

在使用基于JAVA的文档分类器(如OpenNLP)等之前,是否有方法删除停止词(如“of”“a”“the”等)。或者,如果您自己(使用JAVA)执行此操作,最有效的方法是什么(考虑到字符串比较效率较低)。此外,考虑到每个文档本身并没有那么大,即平均约100字,但假设文档数量很大

E.g., 
// Populate the stop words to a list
List<String> stopWordsList = ArrayList<>();

// Iterate through a list of documents
String currentDoc = getCurrentDoc();

String[] wordsArray = currentDoc.split(" ");    

 for ( String word : wordsArray ) {

      if (stopWordsList.contains(word)){
           // Drop it
      }
  }
例如。,
//将停止词填充到列表中
List stopWordsList=ArrayList();
//反复浏览文档列表
字符串currentDoc=getCurrentDoc();
字符串[]wordsArray=currentDoc.split(“”);
for(字符串字:wordsArray){
if(stopWordsList.contains(word)){
//放下它
}
}

无需拆分,只需将目标字符串替换为空字符串即可

String currentDoc = getCurrentDoc();
currentDoc = currentDoc.replace(stringToReplace,"");

或者,如果要替换多个单词,请使用regex使用
replaceAll

您的技术很好。但是,您应该将stopWordsList设置为一个集合,而不是一个列表,这样您就可以在固定时间而不是线性时间中查找内容。换句话说,你不需要查看整个stopWords列表来查看
word
是否在其中;您只想立即查看它是否在集合中。

您可以尝试以下代码:

    String sentence = "This is a sample sentence for testing stop word deletion";

    String pattern = " a | the | for | is ";
    sentence = sentence.replaceAll(pattern, " ");
结果:此示例语句测试停止删除单词


该模式包含由管道分隔的所有停止字,也就是说,该模式可能包含其中任何一个。记住在停止词周围留有空格,以便将它们区分为准确的单词。如果不是空格,它将替换所有出现的停止字的字符组合,即使是在单词内

不,这不是个好主意。“a”是一个停止词。简单地做一个替换将把“apple”变成“ppe”,这显然不是你想要的。停止词可以是大写/小写,+如果停止词没有包装在两个空格之间,你的模式就不起作用,如果句子以停止词开头或结尾,或者后面跟逗号,等等……注意到。但是上面提到的大多数问题都可以通过适当的正则表达式模式或者一系列正则表达式模式来解决。