Как сохранить значение объекта BM25Okapi в файл?

#python #artificial-intelligence #ranking #information-retrieval

Вопрос:

Мы работаем над задачей поиска информации, и нам нужно ранжировать исследовательские работы по запросу.

После очистки данных и создания фрейма данных у нас есть маркированные бумажные тексты, и нам нужно сохранить результат в файл.

 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 объектов в файл. И не видел никакого метода в исходном коде. Как мне следует поступить?

Ответ №1:

Вопрос задан неправильно. Что нам нужно сделать, так это сохранить объекты, не относящиеся конкретно к результатам BM25Okapi.

итак, вот вам и решение:

 import pickle

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

затем, чтобы прочитать данные объекта:

 #to read bm25 object
with open('bm25result', 'rb') as bm25result_file:
    bm25result = pickle.load(bm25result_file)
 

подробное описание можно найти в этой статье