Java 从庞大的文本语料库中删除停止词最有效的方法是什么?

Java 从庞大的文本语料库中删除停止词最有效的方法是什么?,java,algorithm,hadoop,nlp,apache-spark,Java,Algorithm,Hadoop,Nlp,Apache Spark,我想知道从庞大的文本语料库中删除停止词的有效方法。 目前我的方法是将stopword转换为regex,将文本行与regex匹配并删除它 e、 g 有没有其他有效的方法可以从巨大的corupus中删除stopwords 感谢使用Spark,一种方法是在文字标记后从文字中减去停止字 val text = sc.textFile('huge.txt') val stopWords = sc.textFile('stopwords.txt') val words = text.flatMap(line

我想知道从庞大的文本语料库中删除停止词的有效方法。 目前我的方法是将stopword转换为regex,将文本行与regex匹配并删除它

e、 g

有没有其他有效的方法可以从巨大的corupus中删除stopwords


感谢使用Spark,一种方法是在文字标记后从文字中减去停止字

val text = sc.textFile('huge.txt')
val stopWords = sc.textFile('stopwords.txt')
val words = text.flatMap(line => line.split("\\W"))
val clean = words.subtract(stopwords)
如果您需要处理非常大的文本文件(>>GBs),那么将stopwords集视为可以广播给每个工作者的内存结构将更加有效

代码将更改如下:

val stopWords = sc.textFile('stopwords.txt')
val stopWordSet = stopWords.collect.toSet
val stopWordSetBC = sc.broadcast(stopWordSet)
val words = text.flatMap(line => line.split("\\W"))
val clean = words.mapPartitions{iter =>
    val stopWordSet = stopWordSetBC.value
    iter.filter(word => !stopWordSet.contains(word))
}
请注意,要使其正常工作,必须对原始文本中的单词进行规范化。

对于“巨大”的文本文件,处理速度主要取决于您读取和处理文件的速度。调整正则表达式不太可能产生任何重大影响。要进行检查,请将输入文件复制到输出文件,而不进行处理,并查看需要多长时间。您将无法以更快的速度处理文件。
val stopWords = sc.textFile('stopwords.txt')
val stopWordSet = stopWords.collect.toSet
val stopWordSetBC = sc.broadcast(stopWordSet)
val words = text.flatMap(line => line.split("\\W"))
val clean = words.mapPartitions{iter =>
    val stopWordSet = stopWordSetBC.value
    iter.filter(word => !stopWordSet.contains(word))
}