【发布时间】:2017-04-25 09:37:39
【问题描述】:
我正在使用 NLTK 计算余弦相似度并将余弦相似度值导出到我想用于其他报告目的的 SQL Server。
我有大约 4773 列,大约 2k 行,而 SQL Server 不支持这些列数?什么是更好的选择?还有其他支持这种数据规模的开源数据库吗?
我有 2 个数据集,我称之为训练集(2k 文档)和测试数据集(4773 个文档),在此过程中,所有测试数据记录将变成大约 4773 列的列,这不受 SQl 支持服务器 。
我的主要动机是为我的训练数据中的每个文档从测试数据中找到最近的相似文档。
任何建议都会有所帮助 - 谢谢
这是我用于计算余弦相似度的代码
from sklearn.metrics.pairwise import cosine_similarity
df = pd.DataFrame(cosine_similarity(trainVectorizerArray,testVectorizerArray))
熊猫到 SQL Server
import sqlalchemy
import pypyodbc
engine = sqlalchemy.create_engine("mssql+pyodbc://<user>:<password>@<DSN>")
write the DataFrame to a table in the sql database
df.to_sql("Cosine", engine)
样本输出
0 1 2 3 4 5
0 0.428519 0.000000 0.0 0.541096 0.250099 0.345604
1 0.056650 0.000000 0.0 0.000000 0.000000 0.000000
2 0.000000 0.000000 0.0 0.000000 0.000000 0.000000
3 0.849066 0.559117 0.0 0.374447 0.424247 0.586254
4 0.317644 0.000000 0.0 0.271171 0.586686 0.424560
【问题讨论】:
-
不同的架构怎么样:TrainSetId、DataSetId、Value?这给出了 3 列和 950 万行。假设所有这些文档都是相同的数据类型...
-
好的!我明白你在说什么,是的,这可能是一种可能性,但我不确定以后如何使用该模式。在此过程中我可能需要一些帮助,我已经用我的代码更新了我的问题。
-
你之前打算如何比较?如果您要比较所有列 2500 个文档并通过 TrainSetId 获得最接近的文档,那么现在您将比较所有 DataSetId = 2500 个文档并通过 TrainSetId 获得最接近的文档。我不知道这些文件是什么样子我只是在这里猜测您的要求:-)
-
您可以在导出前将数据按摩到不同的布局吗?如果不是,您可能需要导出为 .CSV,然后使用 SSIS 之类的工具将数据导入 SQL。
-
我能够导出为 CSV,但再次使用 SSIS 我将无法进行大量数据按摩。我比较的方式是,正如你在我的输出中看到的那样 - 我会有一个余弦值,它会告诉我每个文档与我的训练集有多相似。
标签: sql-server python-3.x pandas cosine-similarity