问题描述
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
中的注释