我们有大约40000行的文本(如tweets),我们正在根据文档项(DF-IDF)矩阵进行比较。我们的目标是建立一个简单的网络,其中两行之间有连接,如果它们之间有共同的单词/标记,至少说“k”。在
下面给出了一个非常简单的代码,通过使用twitterID读取TF-IDF的tweets:
import os
import time
import numpy as np
import csv
k = 3 # two tuples have at least three common keywords
t = []
with open('file1.csv', 'r', encoding='utf-8') as f:
csv_reader = csv.reader(f, delimiter=',')
for fields in csv_reader:
t.append(fields)
for i in range(len(t)): # Loop 1
j = i + 1
while(j<len(t)): # Loop 2
commonkw = 0
for kw in range(1, 246): # Loop 3 (column 1 is ID)
if(int(t[i][kw]) != 0 and int(t[j][kw]) != 0): # If both have a common keyword in the Document term matrix
commonkw += 1
if(commonkw >=k):
with open("file2.csv", "a", encoding='utf-8') as outputfile:
outputwriter = csv.writer(outputfile, delimiter= ',', lineterminator='\n')
record = [t[i][0], t[j][0],commonkw]
outputwriter.writerow(record)
outputfile.close()
j += 1
问题是,假设400000;总的成对比较是n(n-1)/2
=800亿。此外,它还必须检查术语矩阵(大约300个单词/列矩阵)
加工过程有什么改进吗?在
我们尝试过熊猫分块阅读、写作和操作,但直接列表似乎效果更好。我们读过关于读元组比读字典快,但是列表呢? 另外,可以通过一些R类型的apply或iterator函数来减少循环吗?这将是一个伟大的学习。谢谢!在
数据集如下:https://github.com/kartucson/pyspark_ipython/blob/master/sample_input_loops.csv
^{pr2}$
目前没有回答
相关问题 更多 >
编程相关推荐