问题描述
我们正在做信息检索任务,我们需要根据查询对研究论文进行排名。
在清理数据并创建数据框后,我们对纸质文本进行了标记化,需要将结果保存到文件中。
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 文件中。
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