正则表达式 - Spark scala DataSet

时间:2016-12-06 22:02:45

标签: regex scala apache-spark

我想从推文中获取令牌。

为了实现这一点,我使用了Spark 2.0和scala的RegexTokenizer。我的问题是实现我想要的模式。

我有这些推文:

0) "#oscars https://w.r/123f5"
1) "#oscars! go leo!"
2) "#oscars: did it!"

我想拥有代币:

0) (#oscars, https://w.r/123f5)
1) (#oscars, go, leo)
2) (#oscars, did, it)

也就是说,如果推文有单词" #oscar。"或" #oscar!"或#oscar:",我希望令牌为:" #oscar" 同时,如果推文上有单词" leo!"或者"它"我希望令牌是:" leo"或"它"。

我不想解除网址的攻击!

我试试:

val sentenceDataFrame = spark.createDataFrame(Seq(
  (0, "#oscars https://w.r/123f5"),
  (1, "#oscars! go leo!"),
  (2, "#oscars: he did it! ")
)).toDF("label", "sentence")

val regextokenizer = new RegexTokenizer()
  .setGaps(false)
  .setPattern("\\p{L}+")
  .setInputCol("text")
  .setOutputCol("words")

val regexTokenized = regexTokenizer.transform(sentenceDataFrame)

但它并不好用。我明白了:

(oscars, https, w, r, 123f5)
(oscars, go, leo)
(oscars, he, did, it)

0 个答案:

没有答案