Java 计算文件中每个单词的频率
我正在尝试构建一个算法,该算法将表示Scala编程语言中每个单词的频率。 我使用这个函数(如下)从2个不同的文件中创建了2个映射,现在我想将t1.txt中出现的每个单词的数量除以gen-voc.txt中出现的每个单词的数量,以计算频率。所以我需要一个合适的算法来做到这一点Java 计算文件中每个单词的频率,java,algorithm,scala,apache-spark,Java,Algorithm,Scala,Apache Spark,我正在尝试构建一个算法,该算法将表示Scala编程语言中每个单词的频率。 我使用这个函数(如下)从2个不同的文件中创建了2个映射,现在我想将t1.txt中出现的每个单词的数量除以gen-voc.txt中出现的每个单词的数量,以计算频率。所以我需要一个合适的算法来做到这一点 import scala.io.Source import scala.collection.mutable import scala.collection.immutable.ListMap object Proje
import scala.io.Source
import scala.collection.mutable
import scala.collection.immutable.ListMap
object Project1 extends App {
def buildRepresentation(content: String): mutable.Map[String, Int] = {
val vector = mutable.Map.empty[String, Int]
// use sequences of <space> , ! . to split the string
val arrayOfWords = content.split("[ ,!.]+")
for (rawWord <- arrayOfWords) {
val word = rawWord.toLowerCase
vector(word) = vector.getOrElse(word, 0) + 1
}
vector
}
////Import t1.txt & gen-voc.txt data files:
val data_t1 = "t1.txt"
val data_voc = "gen-voc.txt"
for (line <- Source.fromFile(data_t1).getLines) {}
for (line <- Source.fromFile(data_voc).getLines) {}
//get all of the lines from the file as one String:
val t1 = Source.fromFile(data_t1).getLines.mkString
val gen_voc = Source.fromFile(data_voc).getLines.mkString
导入scala.io.Source
导入scala.collection.mutable
导入scala.collection.immutable.ListMap
对象Project1扩展应用程序{
def buildRepresentation(内容:字符串):可变的.Map[String,Int]={
val vector=mutable.Map.empty[String,Int]
//使用、!.的序列分割字符串
val arrayOfWords=content.split(“[,!.]+”)
对于(rawWord,您可以将此implem用于scala中的buildRepresentation(更面向功能)
导入scala.io.Source
对象Project1扩展应用程序{
//使用、!.的序列分割字符串
def buildRepresentation(内容:String):映射[String,Int]=
内容
.split(“[,!.]+”)
.map(u.toLowerCase)
.groupBy(身份)
.mapValues(长度)
////导入t1.txt和gen-voc.txt数据文件:
val data_t1=“t1.txt”
val data\u voc=“gen voc.txt”
//将文件中的所有行作为一个字符串获取:
val t1=Source.fromFile(data_t1).getLines.mkString
val gen_voc=Source.fromFile(data_voc).getLines.mkString
val t1repr:Map[String,Int]=buildRepresentation(t1)
val genVocRepr:Map[String,Int]=buildRepresentation(gen_voc)
//项目和参考中键的频率
def频率[A](项目:映射[A,Int],参考:映射[A,Int])=
items.keySet.intersect(reference.keySet)
.map(k=>k->items.getOrElse(k,0).toDouble/reference.getOrElse(k,0).toDouble)
汤玛普先生
val frequencyOfT1RelativeToGenVoc:Map[String,Double]=频率(t1repr,genVocRepr)
}
您希望的算法有多健壮/幼稚?请参阅以下问题了解相关内容:进行快速web搜索时,有一些特定于Spark的方法可以实现您想要的结果: