Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Spark/Scala ML中使用RegexTokenizer()后StopWords()不起作用_Regex_Scala_Apache Spark_Tokenize_Apache Spark Ml - Fatal编程技术网

在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()的理解是错误的,这是有道理的