Spark ml 之 Tokenizer

Tokenizer en Spark ml

  • Tokenizer es el proceso de dividir el texto como una oración en palabras de ciudad. Tokenizer se proporciona en spark ml para lograr esta función. RegexTokenizer proporciona división de palabras en base a la coincidencia avanzada de expresiones regulares. De manera predeterminada, el patrón de parámetros (expresión regular predeterminada: "\ s +") se usa como delimitador para dividir el texto de entrada, o el usuario establece los huecos de los parámetros en falso y especifica que el patrón de expresión regular se expresa como tokens en lugar de Separador, para que todas las coincidencias encontradas como resultado de la división sean muy simples, basadas principalmente en la lógica de la segmentación de datos comerciales.
    El código de muestra también es un ejemplo dado en el sitio web oficial:
import org.apache.spark.ml.feature.{RegexTokenizer, Tokenizer}
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._

/**
  *
  * @author wjc
  *
  *         Tokenizer
  **/
object Tokenizer extends App {

  val spark = SparkSession
    .builder()
    .master("local[*]")
    .appName("ml_learn")
    //  .enableHiveSupport()
    .config("", "")
    .getOrCreate()

  val sentenceDataFrame = spark.createDataFrame(Seq(
    (0, "Hi I heard about Spark"),
    (1, "I wish Java could use case classes"),
    (2, "Logistic,regression,models,are,neat")
  )).toDF("id","sentence")

  sentenceDataFrame.show(false)

  //Tokenizer实例
  val tokenizer = new Tokenizer()
    .setInputCol("sentence")
    .setOutputCol("words")
  //RegexTokenizer分词器
  val regexTokenizer = new RegexTokenizer()
    .setInputCol("sentence")
    .setOutputCol("words")
    .setPattern("\\W")
  //或者通过gaps设置为false,指定正则表达式pattern表示tokens 而不是分隔符
  val regexTokenizer2 = new RegexTokenizer()
    .setInputCol("sentence")
    .setOutputCol("words")
    .setPattern("\\w+")
    .setGaps(false)

  //udf 计算长度
  val countTokens = udf { (words:Seq[String]) => words.length}
  //tokenizer分词结果
  val tokenized = tokenizer.transform(sentenceDataFrame)
      tokenized.select("sentence","words")
    .withColumn("tokens",countTokens(col("words"))).show(false)

  //regexTokenizer分词结果
  val regexTokenized = regexTokenizer.transform(sentenceDataFrame)
      regexTokenized.select("sentence","words")
    .withColumn("tokens",countTokens(col("words"))).show(false)

  //regexTokenizer分词结果
  val regexTokenized2 = regexTokenizer2.transform(sentenceDataFrame)
      regexTokenized2.select("sentence","words")
    .withColumn("tokens",countTokens(col("words"))).show(false)
}

Resultado de la operación :
Inserte la descripción de la imagen aquí

14 artículos originales publicados · Me gusta1 · Visitas 684

Supongo que te gusta

Origin blog.csdn.net/qq_33891419/article/details/103767629
Recomendado
Clasificación