我正在处理十万(100,000)份文件(平均文件长度约为500个术语)。对于每个文档,我想通过余弦相似性得到前k(例如k = 5)个相似文档。那么如何有效通过 Python 来做到这一点。
这是我做的:
我在i5-2.5GHz上运行我的代码,12小时过去但仍然有效。所以我想知道如何优化我的代码或程序。
以下是我的想法:
那么,你有什么好主意吗?
非常感谢。
我知道有一个similar question,但这不是我想要的。
感谢@orange,经过剖析,我发现第2步是瓶颈!以下是示例代码:
XMLHttpRequest
因此,瓶颈是向pandas添加新的行和列。有什么想法吗?
答案 0 :(得分:0)
如果您一次分配数据数组,Pandas DataFrames(和底层numpy)真的很快。 set_value
需要调用矩阵中的每个单元格!
您可以执行dt_matrix = pd.DataFrame(cleaned_dict)
并且您有一个带有一个函数调用的DataFrame(忽略Pandas内部调用)。
尝试改为:
dt_matrix = pd.DataFrame()
for docid, f in enumerate(files):
dt_matrix_file = pd.DataFrame(cleaned_dict)
dt_matrix_file['docid'] = docid
dt_matrix = dt_matrix.append(dt_matrix_file)
这应该快几个数量级。
如果您需要NaN单元格为零,则可以执行dt_matrix.fillna(0)
(再次,一次调用而非潜在的n * m)。