在Spark/Scala ML中使用RegexTokenizer()后StopWords()不起作用
在使用在Spark/Scala ML中使用RegexTokenizer()后StopWords()不起作用,regex,scala,apache-spark,tokenize,apache-spark-ml,Regex,Scala,Apache Spark,Tokenize,Apache Spark Ml,在使用RegexTokenizer之后,我需要使用StopWordsRemover。然而,我注意到没有停止词被删除。我注意到当使用标记器时(与RegexTokenizer相反),停止字被删除,因为标记器将输出转换为一个术语数组RegexOkenizer只输出一个字符串数组,其中包含(不是逗号分隔的)。有解决办法吗 以下是我的数据,其中“body”是初始数据。您可以看到“removedStopWords”与“removeTags”列是一样的。情况不应如此: 代码: val regexTokeni
RegexTokenizer
之后,我需要使用StopWordsRemover
。然而,我注意到没有停止词被删除。我注意到当使用标记器
时(与RegexTokenizer
相反),停止字被删除,因为标记器
将输出转换为一个术语数组RegexOkenizer
只输出一个字符串数组,其中包含(不是逗号分隔的)。有解决办法吗
以下是我的数据,其中“body”是初始数据。您可以看到“removedStopWords”与“removeTags”列是一样的。情况不应如此:
代码:
val regexTokenizer = new RegexTokenizer() // first remove tags from string
.setInputCol("body")
.setOutputCol("removeTags")
.setPattern("<[^>]+>")
val stopWordsRemover = new StopWordsRemover()
.setInputCol(regexTokenizer.getOutputCol)
.setOutputCol("removedStopWords")
val regexTokenizer=new regexTokenizer()//首先从字符串中删除标记
.setInputCol(“主体”)
.setOutputCol(“移除标记”)
.setPattern(“]+>”)
val stopWordsRemover=新stopWordsRemover()
.setInputCol(regexTokenizer.getOutputCol)
.setOutputCol(“删除的停止字”)
标记器应该获取一个字符流(例如一个句子)并将其分解成更小的块(例如单词)。
例如,一个in-Spark将在空格上拆分一个句子
在这里,您可以使用RegexTokenizer
删除HTML标记(更准确地说,根据标记将句子拆分为标记)。虽然这是可行的,但您需要确保输出也被拆分为单个单词。
为此,您可以向正则表达式中添加一个条件,除了标记之外,还可以通过向正则表达式模式中添加\\s+
来拆分任何空白:
val regexTokenizer = new RegexTokenizer() // removes tags from string and split into words
.setInputCol("body")
.setOutputCol("removeTags")
.setPattern("<[^>]+>|\\s+")
val regexTokenizer=new regexTokenizer()//从字符串中删除标记并拆分为单词
.setInputCol(“主体”)
.setOutputCol(“移除标记”)
.setPattern(“]+>| \\s+”)
现在使用
StopWordsRemover
应该可以正常工作。谢谢,这很有效!我对RegexTokenizer()的理解是错误的,这是有道理的