我试图从一个txt文件中生成一个共现矩阵,它是一个对称矩阵。我完成了第一步,但现在我被困住了。
例如,如果我有“我正在堆叠溢出上发一篇文章并且我在这里”的文字,我就会:
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.
我需要与值和的所有键组合,但我找不到合适的解决方案
谢谢
发布于 2016-02-26 17:52:44
假设像这样的事情应该能解决你的问题。
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))
发布于 2016-02-26 18:14:38
希望我能正确理解这个问题。将Wordsn调用为您的第一个n个单词数组及其相关计数,那么m-第一个单词将是字-1,0和它的计数字sum 1,1。然后我们定义另一个数组WordCouplesn,包含每一对可能的单词和它们各自计数的总和。WordCouples有n个平方条目,每个条目包含3个值: WordCouplesi,0包含第一个单词,WordCouplesi,1包含第一个组合的第二个单词,WordCouples i,2包含两个单词的计数之和。
然后,您可以从单词中填写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”。
https://stackoverflow.com/questions/35658043
复制相似问题