Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算文件中每个单词的频率_Java_Algorithm_Scala_Apache Spark - Fatal编程技术网

Java 计算文件中每个单词的频率

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

我正在尝试构建一个算法,该算法将表示Scala编程语言中每个单词的频率。 我使用这个函数(如下)从2个不同的文件中创建了2个映射,现在我想将t1.txt中出现的每个单词的数量除以gen-voc.txt中出现的每个单词的数量,以计算频率。所以我需要一个合适的算法来做到这一点

    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的方法可以实现您想要的结果: