微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Scala操作rdd从Sharespeare.txt到动词字典获取单词计数

如何解决使用Scala操作rdd从Sharespeare.txt到动词字典获取单词计数

verb_dict.txt包含类似的内容

扑灭,扑灭,扑灭,扑灭,扑朔迷离

减弱,减弱,减弱,减弱,减弱,减弱

遵守,遵守,住所,住所,遵守,遵守

......

莎士比亚文字只有5MB的文章

每个词有6个时态,问题在文本中一次遇到了不同的时态,但需要算作原始时态

使用学习的RDD操作合并来自相同动词的动词对。例如。 (工作,100), (作品50),(作品150)---->(作品300)。

我的想法是像[[verb_in_different_tense,(original_tense,count))]之类的东西,我不知道这是否行得通呢?

我的代码显示如下:

val shakes = sc.textFile("shakespeare.txt")从txt文件创建rdd

val shakes1 = shakes.filter(l => l.length > 0)删除空行

val shakes2 = shakes1.map(x=>x.replaceAll("""[\p{Punct}]""","")) 删除标点符号

val shakes3 = shakes2.flatMap(line=>line.split(" "))按空格分隔会将每个单词分成一个分区

val shakes4 = shakes3.filter(_.nonEmpty)获得非空行

val shakes5 = shakes4.filter(w=>w == w.toLowerCase())小写

这是对Shakespeare.txt文件的完成

然后需要使用学习的RDD操作合并来自相同动词的动词对。例如。 (工作,100), (作品50),(作品150)---->(作品300)。

有人可以给我具体步骤来解决这个问题吗?

解决方法

还有另一个与此主题相关的问题,它们与NLP任务有关。这里需要的是提取这些单词的词缀,并将它们放在另一列中,然后按该列分组。

看看https://en.wikipedia.org/wiki/Lemma_(morphology)

您可以使用Stanford NLP库对您的单词(令牌)执行lemmatizer。一个如何在Java中使用的示例,该示例可以在Scala中使用而不会出现问题:https://stanfordnlp.github.io/stanfordnlp/lemma.html

在此仓库中,您将看到如何在Spark https://github.com/databricks/spark-corenlp中使用Stanford CoreNLP。

或者您可以使用SparkNLP项目https://nlp.johnsnowlabs.com/docs/en/annotators

中的注释

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。