Scala - 共生矩阵

时间:2016-02-26 17:27:21

标签: scala matrix

我正在尝试从对称矩阵的txt文件中创建共生矩阵。 我完成了第一步,但现在我被卡住了。

例如,如果我有文字"我在stackoverflow上发帖子,我在这里" 我会:

 List( (I,2), (am,2), (making,1), (a,1), (post,1), (on,1),(stackoverflow,1), (here,1) )

然后创建我的矩阵我需要像:

first line : List( ((I,I),2 or 4 idk) ((I,am),4), ((I,making),3), ((I, a),2) ... )
Second line: List( ((am,I),4), ((am,am),2 or 4), ... )
etc.

我需要所有具有值总和的组合键,但我找不到合适的解决方案

由于

2 个答案:

答案 0 :(得分:0)

假设像下面这样的smth可以解决你的问题。

  val ll = List(("I", 2), ("am", 2), ("making", 1), ("a", 1), ("post", 1), ("on", 1), ("stackoverflow", 1), ("here", 1))

  val r = ll.map { x =>
    ll.map { y =>
      ((x._1, y._1), x._2 + y._2)
    }
  }
  r.foreach(println)

结果:

List(((I,I),4), ((I,am),4), ((I,making),3), ((I,a),3), ((I,post),3), ((I,on),3), ((I,stackoverflow),3), ((I,here),3))
List(((am,I),4), ((am,am),4), ((am,making),3), ((am,a),3), ((am,post),3), ((am,on),3), ((am,stackoverflow),3), ((am,here),3))
List(((making,I),3), ((making,am),3), ((making,making),2), ((making,a),2), ((making,post),2), ((making,on),2), ((making,stackoverflow),2), ((making,here),2))
List(((a,I),3), ((a,am),3), ((a,making),2), ((a,a),2), ((a,post),2), ((a,on),2), ((a,stackoverflow),2), ((a,here),2))
List(((post,I),3), ((post,am),3), ((post,making),2), ((post,a),2), ((post,post),2), ((post,on),2), ((post,stackoverflow),2), ((post,here),2))
List(((on,I),3), ((on,am),3), ((on,making),2), ((on,a),2), ((on,post),2), ((on,on),2), ((on,stackoverflow),2), ((on,here),2))
List(((stackoverflow,I),3), ((stackoverflow,am),3), ((stackoverflow,making),2), ((stackoverflow,a),2), ((stackoverflow,post),2), ((stackoverflow,on),2), ((stackoverflow,stackoverflow),2), ((stackoverflow,here),2))
List(((here,I),3), ((here,am),3), ((here,making),2), ((here,a),2), ((here,post),2), ((here,on),2), ((here,stackoverflow),2), ((here,here),2))

答案 1 :(得分:0)

希望我能正确理解这个问题。调用单词[n] [2]你的第一个n个单词的数组及其相关的计数,然后第m个单词将是单词[m-1,0]及其计数单词[m-1,1]。然后让我们定义另一个数组WordCouples [n²] [3],包含每个可能的单词和它们各自计数的总和。 WordCouples有n²个条目,每个条目包含3个值:WordCouples [i,0]包含第一个单词,WordCouples [i,1]包含第i个组合的第二个单词,而WordCouples [i,2]包含的总和这两个词的数量。

然后你可以用Words填写WordCouples,如下所示:

for (int i; i<n; i++) {
    for (int j; j<n; j++) {
        WordCouples[n*i+j,0]=Word[i,0];
        WordCouples[n*i+j,1]=Word[j,0];
        WordCouples[n*i+j,2]=Word[i,1]+Word[j,1];
    }

请注意,上述内容仅作为解决方案的建议逻辑方法提及。您很可能需要从上述数组的“int”元素中拆分“String”。