我想从推文中获取令牌。
为了实现这一点,我使用了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)