I以下の機能があります。私は最大のCPU時間はzip()
機能に費やされていると思われることを見つけるために、プロファイラを使用している最適化
def filetxt():
word_freq = {}
lvl1 = []
lvl2 = []
total_t = 0
users = 0
text = []
for l in range(0,500):
# Open File
if os.path.exists("C:/Twitter/json/user_" + str(l) + ".json") == True:
with open("C:/Twitter/json/user_" + str(l) + ".json", "r") as f:
text_f = json.load(f)
users = users + 1
for i in range(len(text_f)):
text.append(text_f[str(i)]['text'])
total_t = total_t + 1
else:
pass
# Filter
occ = 0
import string
for i in range(len(text)):
s = text[i] # Sample string
a = re.findall(r'(RT)',s)
b = re.findall(r'(@)',s)
occ = len(a) + len(b) + occ
s = s.encode('utf-8')
out = s.translate(string.maketrans("",""), string.punctuation)
# Create Wordlist/Dictionary
word_list = text[i].lower().split(None)
for word in word_list:
word_freq[word] = word_freq.get(word, 0) + 1
keys = word_freq.keys()
numbo = range(1,len(keys)+1)
WList = ', '.join(keys)
NList = str(numbo).strip('[]')
WList = WList.split(", ")
NList = NList.split(", ")
W2N = dict(zip(WList, NList))
for k in range (0,len(word_list)):
word_list[k] = W2N[word_list[k]]
for i in range (0,len(word_list)-1):
lvl1.append(word_list[i])
lvl2.append(word_list[i+1])
とjoin
とsplit
をコードの一部として、私は、もし私が見落としてしまったことを見逃しているのであれば、コードをきれいにして最適化することができます。 zip()
機能。どんな助けもありがとう!
P.S.この関数の基本的な目的は、20個ほどのツイートが含まれているファイルをロードすることです。この関数を使用して送信されるファイルは、20k〜50k程度です。
1 "love"
2 "pasa"
3 "mirar"
4 "ants"
5 "kers"
6 "morir"
7 "dreaming"
8 "tan"
9 "rapido"
10 "one"
11 "much"
12 "la"
...
10 1
13 12
1 7
12 2
7 3
2 4
3 11
4 8
11 6
8 9
6 5
9 20
5 8
20 25
8 18
25 9
18 17
9 2
...
ありがとう、私は基本的にあなたと@milkypostmanからいくつかを取ったが、何か理由でこれに短い答えを探している人は、これを答えとしてマークします。さらに、私が作っていた最大の間違いは、W2N = dict(zip(WList、NList))を呼び出すことでした。これは、ループごとに大規模な辞書を作成し続け、CPU時間を無駄にしていました。解決策は、これをループの外側に配置することでした。約5分かかっていた1000個のファイルが生成されましたが、現在では.59秒かかります。 – eWizardII