def __init__(self, answers, sample, epsilon): self.sample = sample self.answers = answers self.epsilon = epsilon self.id_to_num = {} invInd = InvIndex.load(PATH_TO_INV_IND) self.num_to_id = {} for doc_num, doc_id in enumerate(invInd.doc_ids): self.id_to_num[doc_id] = doc_num self.num_to_id[doc_num] = doc_id
def __init__(self, answers, sample, epsilon, fnIdxCodex2Article): self.sample = sample self.answers = answers self.epsilon = epsilon self.num_to_ind_dict = {} self.ind_to_num_dict = {} self.inverse_index = InvIndex.load(fnIdxCodex2Article) ind = 0 for key in list(self.inverse_index.num_tokens_dict.keys()): self.ind_to_num_dict[ind] = key self.num_to_ind_dict[key] = ind ind += 1
def __init__(self, inv_ind_pickle, bm_25_file): self.inv_ind = InvIndex.load(inv_ind_pickle) self.inv_in_path = inv_ind_pickle self.tfidfs = [] self.art_names = {} self.first_tf_idf = None self.corpus = SimpleCorp.load('codexes_tokenized_corp_articles', f'{PATH_TO_FILES}/corp') if not os.path.isfile(bm_25_file): self.bm_obj = My_BM(PATH_TO_INV_IND) self.bm_obj.save(bm_25_file) else: self.bm_obj = My_BM.load(bm_25_file)
def __init__(self, inv_ind_pickle, bm_25_file): self.inv_ind = InvIndex.load(inv_ind_pickle) self.inv_in_path = inv_ind_pickle self.cash = dict() self.morph = MorphAnalyzer() self.stop_words = stopwords.words("russian") self.tfidfs = [] self.art_names = {} self.first_tf_idf = None if not os.path.isfile(bm_25_file): self.bm_obj = My_BM(PATH_TO_INV_IND) self.bm_obj.save(bm_25_file) else: self.bm_obj = My_BM.load(bm_25_file)
def __init__(self, inverse_index_pickle): self.inverse_index = InvIndex.load(inverse_index_pickle) self.corpus = [] self.ind_to_num_dict = {} self.num_to_ind_dict = {} ind = 0 for key in list(self.inverse_index.num_tokens_dict.keys()): self.corpus.append(" ".join( self.inverse_index.num_tokens_dict[key])) self.ind_to_num_dict[ind] = key self.num_to_ind_dict[key] = ind ind += 1 self.bm_oject = bm.BM25(self.corpus)
def __init__(self, inverse_index_pickle, ngramm=(1, 1), norm='l2', use_idf=True, sublinear_tf=False): self.vectorizer = TfidfVectorizer(preprocessor=None, encoding='utf-8', ngram_range=ngramm, norm=norm, use_idf=use_idf, sublinear_tf=sublinear_tf) self.tfidf_matrix = np.array([]) self.num_to_num_dict = {} self.inverse_index = InvIndex.load(inverse_index_pickle)
# иначе переходим к оценке if not os.path.exists(PATH_TO_ANS_FILE): # функция релевантности # features - list признаков для i документа def average_func(row): r_list = list(row)[1:] return sum(r_list) / len(r_list) path_to_tf_idf = os.path.join(PATH_TO_TF_IDF, 'tf_idf') tokenizer = Tokenizer() # создаем массив поисковиков searchers_array = [] for i in range(1, 7): searchers_array.append(TFIDF.load(path_to_tf_idf + '_' + str(i))) searchers_array.append(InvIndex.load(PATH_TO_INV_IND)) b_search = Baseline_Search(average_func, searchers_array) # готовим массив ответов ans_arr = [0] * len(pravoved) # заполняем массив t = tqdm(total=len(pravoved)) for i in range(len(pravoved)): ans_arr[i] = b_search.search(pravoved[i]['question'], len(searchers_array[0].doc_ids), dataFrReturned=False) t.update(1) t.close()
from tools.relative_paths_to_directories import path_to_directories PATH_TO_ROOT, PATH_TO_TOOLS, PATH_TO_FILES, PATH_TO_TF_IDF, PATH_TO_INV_IND, PATH_TO_BM_25, \ PATH_TO_LEARNING_TO_RANK = path_to_directories(os.getcwd()) # Пример того, как можно посчитать и сохранить в файл Обратный индекс # директория на папку с кодексами codexes_dir = os.path.join(PATH_TO_ROOT, "codexes") simple_corp = SimpleCorp.load('codexes_corp_articles', f'{PATH_TO_FILES}/corp') tokenized_corp = SimpleCorp.load('codexes_tokenized_corp_articles', f'{PATH_TO_FILES}/corp') tokenizer = Tokenizer() inv_index = InvIndex(tokenizer=tokenizer) inv_index.build_on(tokenized_corp, tokenized=True) inv_index.save(PATH_TO_INV_IND) query = 'Симметричные корректировки осуществляются в порядке, установленном настоящей статьей.' search_result = inv_index.search(query) found_articles = [(simple_corp.get_doc(doc_id), rel) for doc_id, rel in search_result] print(search_result) PATH_TO_IIFH = os.path.join(PATH_TO_FILES, "IIHighlight") IIFH = InvertIndexForHighlight(tokenizer=tokenizer, corpus=simple_corp) IIFH.build() IIFH.save(PATH_TO_IIFH)
def load_tfidf(): for i in range(1, 7): features.append(TFIDF.load(PATH_TO_TFIDF.format(i))) features.append(InvIndex.load("files/inv_ind.pickle"))
def __init__(self, tokenizer, inverse_index_pickle): Search.__init__(self, tokenizer) self.inverse_index = InvIndex.load(inverse_index_pickle) self.cash = self.inverse_index.cash
import tools.tokenize_docs as tokenize_docs from tools.inverse_index import InvIndex import os from tools.relative_paths_to_directories import path_to_directories PATH_TO_ROOT, PATH_TO_TOOLS, PATH_TO_FILES, PATH_TO_TF_IDF, PATH_TO_INV_IND, PATH_TO_BM_25, \ PATH_TO_LEARNING_TO_RANK = path_to_directories(os.getcwd()) # Пример того, как можно посчитать и сохранить в файл Обратный индекс # директория на папку с кодексами fnCollectionDir = os.path.join(PATH_TO_ROOT, "codexes") # файл, куда будет сохраняться (или где уже сохранен) объект класса InvIndex # перед поиском рекомендуется удалять имеющийся файл и считать заново (иначе могут быть проблемы в директориях) fnIdxCodex2Article = PATH_TO_INV_IND # если объект уже создан, то строить нет смысла # иначе строим и сохраняем объект класса InvIndex по директории fnIdxCodex2Article if not os.path.isfile(fnIdxCodex2Article): s = InvIndex(fnCollectionDir, tokenize_docs.Tokenizer('')) s.update_dicts('article') s.build_inversed_index('article') s.num_tokens_dict_builder() s.save(fnIdxCodex2Article)