我们正在进行信息检索任务,需要根据查询对研究论文进行排序。
在清理数据并创建数据框后,我们已经对论文文本进行了分词处理,并需要将结果保存到文件中。
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的结果。
所以,解决方案如下:
import pickle#To save bm25 objectwith open('bm25result', 'wb') as bm25result_file: pickle.dump(bm25, bm25result_file)
然后,读取对象数据:
#to read bm25 objectwith open('bm25result', 'rb') as bm25result_file: bm25result = pickle.load(bm25result_file)
详细描述可以在这篇文章中找到