使用正则表达式scala标记每个单词只包含字母的句子

ghhkc1vu  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(294)

我将spark与scala结合使用,并尝试将每个单词只包含字母的句子标记化。这是我的密码

def tokenization(extractedText: String): DataFrame = {

    val existingSparkSession = SparkSession.builder().getOrCreate()
    val textDataFrame = existingSparkSession.createDataFrame(Seq(
      (0, extractedText))).toDF("id", "sentence")
    val tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words")
    val regexTokenizer = new RegexTokenizer()
      .setInputCol("sentence")
      .setOutputCol("words")
      .setPattern("\\W")
    val regexTokenized = regexTokenizer.transform(textDataFrame)
    regexTokenized.select("sentence", "words").show(false)
    return regexTokenized;
  }

如果我在标记化后提供“我要去学校5”的感觉,它应该只有[我,正在,要去],应该放弃学校5。但以我目前的模式,它不会忽略单词中的数字。我该如何删除带数字的单词?

mspsb9vt

mspsb9vt1#

您可以使用下面的设置来获得所需的标记化。基本上,您可以使用适当的regex模式提取只包含字母的单词。

val regexTokenizer = new RegexTokenizer().setInputCol("sentence").setOutputCol("words").setGaps(false).setPattern("\\b[a-zA-Z]+\\b")

val regexTokenized = regexTokenizer.transform(textDataFrame)

regexTokenized.show(false)
+---+---------------------+------------------+
|id |sentence             |words             |
+---+---------------------+------------------+
|0  |I am going to school5|[i, am, going, to]|
+---+---------------------+------------------+

因为我要 gapsfalse ,见文件:
一种基于regex的标记器,通过使用提供的regex模式(用java方言)分割文本(默认)或重复匹配regex(如果gaps为false)来提取标记。可选参数还允许使用最小长度过滤令牌。它返回一个可以为空的字符串数组。
您希望重复匹配正则表达式,而不是用给定的正则表达式拆分文本。

相关问题