python - 我怎样才能使我的单矩阵检查的文档相似性更快?
问题描述
我试图从大量文章(460 个文件,每个文件包含 4000 行)中找到文档相似性。但是做cosine similarity
起来需要很多时间来计算。
我不能使用 sklearn 或 scipy 的 python 库。所以我试图实现raw tf-idf vectorizer
和cosine similarity
. 矢量化器给了我一个列表列表。
矩阵如下所示:
[[0.0,0.0,...…,0.35480,0.0,0.0],[0.0,.....]]
我的代码:
def computeTFIDFVector(document):
tfidfVector = [0.0] * len(wordDict)
for i, word in enumerate(wordDict):
if word in document:
tfidfVector[i] = document[word]
return tfidfVector
def cosine_similarity(vector1, vector2):
dot_product = sum(p*q for p,q in zip(vector1, vector2))
magnitude = math.sqrt(sum([val**2 for val in vector1])) * math.sqrt(sum([val**2 for val in vector2]))
if not magnitude:
return 0
return dot_product/magnitude
duplicates=[]
count=0
for i in range(len(tfidfVector)):
for j in range(i+1, len(tfidfVector)):
count=count+1
clear_output()
print(count)
similarity=cosine_similarity(tfidfVector[i],tfidfVector[j])
duplicates.append((i,j,similarity))
现在,预期的结果还可以,但计算起来需要很长时间。有什么建议可以让它更快吗?
解决方案
推荐阅读
- centos - 从 DVD 安装最小 Centos 的问题
- javascript - 在不覆盖当前语言环境的情况下定义 Moment.js 语言环境
- xml - 如何修复这些 XML 错误?
- javascript - 我需要帮助了解用于网络抓取的 soup.find() 以及它如何准确地找到正确的信息
- c - #176-D 表达式无效”当我创建函数指针数组时出现警告。这是怎么回事?
- c++ - OpenGL:一个简单的彩色三角形 glDebugCallback 错误
- python - 脚本在 Anaconda Prompt 中有效,但不能通过命令行
- java - Springboot 应用程序在 Cloud Foundry 上崩溃而没有任何崩溃日志
- lua - 向数组添加名称,检查数组以查看名称是否存在,运行代码
- json - 如何在 JavaScript 中使用访问令牌格式化 API 调用