如何解决使用Scala操作rdd从Sharespeare.txt到动词字典获取单词计数
verb_dict.txt包含类似的内容
扑灭,扑灭,扑灭,扑灭,扑朔迷离
减弱,减弱,减弱,减弱,减弱,减弱
遵守,遵守,住所,住所,遵守,遵守
......
每个词有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 举报,一经查实,本站将立刻删除。