Python: работа с большой матрицей (пакет представления слов для большого набора данных) - PullRequest
0 голосов
/ 19 января 2020

У меня есть 190 000 файлов, где каждый файл содержит представление BoW для страницы Википедии. Мне нужно построить представление BoW (матрицу совместного использования) для всех документов, но только для некоторых слов (список важных_термов). Таким образом, я должен go просмотреть эти файлы и посмотреть, сколько раз каждое из терминов (список важных_термов) встречалось в каждом файле. Мне также нужно поддерживать порядок списка страниц Википедии.

#Create the co-occurrence matrix (Not enough memory error)
co=np.zeros((len(intial_ent),len((important_terms)),dtype=np.float))
files = os.listdir(file_path3)
count=0
for f in files:
    if f.endswith('.txt'):
        entity=f.split('.txt')[0]#get the page name

        #Check if the page amonge the requeired wiki pages(intial_ent)
        if  entity in intial_ent:
            page_index=intial_ent.index(entity)   #get the index of the page
            file_path=file_path3+f

            #open the file to search for the words in (important_terms)
            with open(file_path,"r") as fl:   
                for line in fl:
                    l= line.strip().split()

                    word=l[0][:l[0].index(':')]
                    word_freq=int(l[0][l[0].index(':')+1:])

                    if word in (important_terms):
                        fea_index=important_terms.index(word) #find the word index  
                        co[page_index,fea_index]=word_freq    #insert the info in the right index

Я выдаю ошибку памяти при создании co-матрицы [190,000X170,000], и даже если я уменьшу количество файлов до 30000 файлов, это работает, но очень медленно. моя RAM = 32G

Как сделать этот код более эффективным? Я ценю любые советы.

...