StopWords () не работает после использования RegexTokenizer () в Spark / Scala ML - PullRequest
1 голос
/ 21 октября 2019

Мне нужно использовать StopWordsRemover после того, как я использую RegexTokenizer. Тем не менее, я заметил, что никакие стоп-слова не удаляются. Я заметил, что при использовании Tokenizer (в отличие от RegexTokenizer) стоп-слова удаляются, потому что Tokenizer преобразует вывод в массив терминов. RegexTokenizer выводит только массив строк с (без запятых). можно ли это исправить?

Вот как выглядят мои данные, где "тело" - это исходные данные. Вы можете видеть, что «removeStopWords» - это то же самое, что и столбец «removeTags». Это не должно иметь место:

enter image description here

Код:

val regexTokenizer = new RegexTokenizer() // first remove tags from string
  .setInputCol("body")
  .setOutputCol("removeTags")
  .setPattern("<[^>]+>")
val stopWordsRemover = new StopWordsRemover()
  .setInputCol(regexTokenizer.getOutputCol)
  .setOutputCol("removedStopWords")

1 Ответ

2 голосов
/ 21 октября 2019

Токенизатор должен взять поток символов (например, предложение) и разбить его на более мелкие куски (например, слова). Например, Tokenizer в Spark будет разбивать предложение на пробелы.

Здесь вы используете RegexTokenizer для удаления тегов HTML (точнее, разделите предложение на токены на основе тегов). Хотя это работает, вы должны убедиться, что вывод также разбит на отдельные слова. Чтобы сделать это, вы можете добавить условие к регулярному выражению, чтобы, в дополнение к тегам, разделить любые пробелы, добавив \\s+ к шаблону регулярного выражения:

val regexTokenizer = new RegexTokenizer() // removes tags from string and split into words
  .setInputCol("body")
  .setOutputCol("removeTags")
  .setPattern("<[^>]+>|\\s+")

Теперь использование StopWordsRemover должно работать какожидается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...