Ich habe einen Code geschrieben, der eine Liste mit Wörtern mit mehreren Texten abgleicht. Hierfür habe ich die Liste in eine Dictionary umgewandelt,
damit jedes Key mehrere Values erhält und das in Form einer Liste (damit es später in ein Dataframe in pandas umgewandelt wird).
Taucht ein Wort in einem Text auf, erhält das Key per ".append" den Wert 1. Wenn nicht, dann 0. u.s.w..
"relevante wörter.xlsx" (108 KB) enthält eine Spalte mit den Wörtern, wonach gesucht werden soll.
"heise_archiv.csv" (766 MB) enthält die Texte etc..
Der Code geht alle Texte der heise news durch, aber ab den Punkt, wo die beiden DataFrames verkettet werden müssen, frisst Python mein Arbeitsspeicher (16GB DDR3)
und fängt an auf meine zweite SSD (1 TB) auszulagern. Woran liegt das? Und wie könnte man das ganze optimieren?
Hierfür habe ich den folgenden Code geschrieben:
Code: Alles auswählen
#####################IMPORT LIST#########################################################################
import pandas as pd
import openpyxl
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO,
filename='word_counter.log')
import pickle
import time
start = time.time()
word_list = pd.read_excel("relevante wörter.xlsx", sheet_name="ALL Summary_extended", header=0, usecols=[0])[["Gesamt"]]
keywords = []
for index, row in word_list.iterrows():
keywords.append(row["Gesamt"])
dic_keywords = {key.lower(): [] for key in keywords}
print(dic_keywords)
heise_archiv_csv = pd.read_csv(filepath_or_buffer='heise_archiv.csv', sep=',', header=0,
usecols=['titel', 'link', 'month', 'year', 'date', 'url', 'text', 'text2', 'month_year',
'quarter', 'title'])[['month_year', 'link', 'url', 'title', 'text2']]
heise_collection = []
documents_heise = []
list_heise = []
for index, row in heise_archiv_csv.iterrows():
i = 0
date = row['month_year']
print(date)
url = row['url']
title = row['title']
text = str(row['text2']).lower()
for key, value in dic_keywords.items():
if text.find(key):
dic_keywords[key].append(1)
i += 1
else:
dic_keywords[key].append(0)
keyword_hits = i
list_heise.append({'date': date,
'url': str(url),
'title': str(text),
'keyword_hits': int(keyword_hits)})
with open('heise_hit_list_dictionary.pickle', 'wb') as handle:
pickle.dump(dic_keywords, handle, protocol=pickle.HIGHEST_PROTOCOL)
complete_heise_archive = pd.DataFrame(data=list_heise, columns=["date", "url", "title", "keyword_hits"])
keyword_hits_dataframe = pd.DataFrame.from_dict(data=dic_keywords)
final_dataframe = pd.concat([complete_heise_archive, keyword_hits_dataframe], axis=1)
writer = pd.ExcelWriter("hits_result.xlsx", engine='openpyxl')
final_dataframe.to_excel(writer, sheet_name='hits_table')
writer.save()
end = time.time()
elapsed_time = end - start
print(str(time.strftime("%H:%M:%S", time.gmtime(elapsed_time))))
Ich bedanke mich sehr im Voraus!

LG
pytony