我应该如何将 BM25Okapi 对象值保存到文件中?

问题描述

我们正在做信息检索任务,我们需要根据查询对研究论文进行排名。

在清理数据并创建数据框后,我们对纸质文本进行了标记化,需要将结果保存到文件中。

import sys
#tokenized_corpus = [doc.split(" ") for doc in corpus]

corpus = list(df.body_text)

tokenized_corpus1 = [doc.split(" ") for doc in corpus[:20000]]
tokenized_corpus2 = [doc.split(" ") for doc in corpus[20000:40000]]
#tokenized_corpus3 = [doc.split(" ") for doc in corpus[40000:]]

tokenized_corpus = tokenized_corpus1 + tokenized_corpus2 # + tokenized_corpus3 

上面的单元格创建标记化的语料库。

with open('file.csv','w',newline='',encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerows(tokenized_corpus)

然后我们将数据保存到 .csv 文件中。

之后,我们调用BM25Okapi方法

bm25 = BM25Okapi(tokenized_corpus)

由于这一步需要太多时间并消耗数千兆字节的内存(导致经常出现错误),我们希望保存结果,这样我们就不需要每次都调用函数

为了根据结果检索结果,我们使用了以下步骤。

query = "coronavirus origin"
tokenized_query = query.split(" ")

doc_scores = bm25.get_scores(tokenized_query)
doc_scores

我无法将 BM25 对象值保存到文件中。并且在源代码中没有看到任何方法。我该怎么办?

解决方法

问题以错误的方式提出。 我们要做的是保存对象,而不是专门保存 BM25Okapi 结果。

所以,这里是解决方案:

var psql = new PostgresHandler();
psql.connect().then(() => {
  psql.retreiveImageData() // Should log true once the connection is established.
}) 

然后,读取对象数据:

import pickle

#To save bm25 object
with open('bm25result','wb') as bm25result_file:
    pickle.dump(bm25,bm25result_file)

详细说明见this article

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...