這篇文章給大家介紹基于DF的Tokenizer分詞是怎么樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
成都創(chuàng)新互聯(lián)公司作為成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站建設(shè)公司、網(wǎng)站設(shè)計(jì),有關(guān)成都定制網(wǎng)站方案、改版、費(fèi)用等問(wèn)題,行業(yè)涉及不銹鋼雕塑等多個(gè)領(lǐng)域,已為上千家企業(yè)服務(wù),得到了客戶的尊重與認(rèn)可。
Tokenizer分詞
進(jìn)行文本分析前,對(duì)文本中句子進(jìn)行分詞我們處理的第一步。大家都是Spark的機(jī)器學(xué)習(xí)庫(kù)分為基于RDD和基于DataFrame的庫(kù),由于基于RDD的庫(kù)在Spark2.0以后都處于維護(hù)狀態(tài),我們這里講的分詞就是基于Spark的Dataframe的。主要是講解兩個(gè)類Tokenizer和RegexTokenizer的使用。
1 首先準(zhǔn)備數(shù)據(jù)
導(dǎo)包
import org.apache.spark.ml.feature.{RegexTokenizer, Tokenizer}
import org.apache.spark.sql.functions._
準(zhǔn)數(shù)據(jù)
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")
2 Tokenizer
Tokenizer負(fù)責(zé)讀取文檔或者句子,將其分解為單詞。聲明一個(gè)變量
val tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words")
自定義函數(shù)來(lái)獲取每列單詞數(shù)目
val countTokens = udf { (words: Seq[String]) => words.length }
調(diào)用轉(zhuǎn)換函數(shù)
val tokenized = tokenizer.transform(sentenceDataFrame)
tokenized.select("sentence", "words").withColumn("tokens", countTokens(col("words"))).show(false)
3 RegexTokenizer
RegexTokenizer允許基于正則的方式進(jìn)行文檔切分成單詞組。默認(rèn)情況下,使用參數(shù)“pattern”( regex, default: "\s+")作為分隔符來(lái)分割輸入文本。或者,用戶可以將參數(shù)“gaps”設(shè)置為false,指示正則表達(dá)式“pattern”表示“tokens”,而不是分割間隙,并查找所有匹配事件作為切分后的結(jié)果。
val regexTokenizer = new RegexTokenizer().setInputCol("sentence").setOutputCol("words").setPattern("\W")
// 也可換為 .setPattern("\w+").setGaps(false)
開(kāi)始轉(zhuǎn)換并查看執(zhí)行結(jié)果
val regexTokenized = regexTokenizer.transform(sentenceDataFrame)
regexTokenized.select("sentence", "words").withColumn("tokens", countTokens(col("words"))).show(false)
關(guān)于基于DF的Tokenizer分詞是怎么樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。