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

kknvjkwl  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(499)

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

String regex ="\\b(?:a|an|the|was|i)\\b\\s*";
 String line = "hi this is regex approach of stop word removal";
 String lineWithoutStopword = line.replaceAll(regex,"");

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

yyhrrdl8

yyhrrdl81#

使用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集视为可以广播给每个worker的内存结构会更有效。
代码将如下更改:

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))
}

请注意,规范化的话,原文将是必要的,这将正常工作。

相关问题