나는 단순한 감정 채광 시스템을 Naive Bayes classifier
으로 만들고있다.사전에 비해 파이썬 빠른 대안?
내 분류 기준을 교육하기 위해 각 줄에 토큰 목록 (짹짹에서 생성)과 관련 정서 (-ve는 0, 양수는 4)가 포함 된 텍스트 파일이 있습니다.
이0 @ switchfoot http : //twitpic.com/2y1zl - Awww , that 's a bummer . You shoulda got David Carr of Third Day to do it . ; D
0 spring break in plain city ... it 's snowing
0 @ alydesigns i was out most of the day so did n't get much done
0 some1 hacked my account on aim now i have to make a new one
0 really do n't feel like getting up today ... but got to study to for tomorrows practical exam ...
이제 각 토큰을위한 내가 할 노력하고있어, 그것은 긍정적 인 트윗 발생 횟수를 계산하고, 얼마나 많은 시간이 부정적인 트윗에서 발생
예를 들어. 그런 다음이 계산을 사용하여 확률을 계산할 계획입니다. 이 카운트를 저장하기 위해 내장 사전을 사용하고 있습니다. 키는 토큰이며 값은 크기가 2 인 정수 배열입니다.
이 코드는 매우 빠르게 시작하지만 느리게 진행되고 약 20 만 건의 짹짹을 처리하면 실제로 느려집니다. 초당 1 짹짹. 내 훈련 세트에는 160 만 건의 짹짹이 있기 때문에 너무 느립니다. 내가 가진 코드는 이것이다 :
def compute_counts(infile):
f = open(infile)
counts = {}
i = 0
for line in f:
i = i + 1
print(i)
words = line.split(' ')
for word in words[1:]:
word = word.replace('\n', '').replace('\r', '')
if words[0] == '0':
if word in counts.keys():
counts[word][0] += 1
else:
counts[word] = [1, 0]
else:
if word in counts.keys():
counts[word][1] += 1
else:
counts[word] = [0, 1]
return counts
나는 빨리이 과정을 위해 무엇을 할 수 있는가? 더 나은 데이터 구조?
편집 : 중복되지는 않지만 일반적인 경우에는 dict보다 빠르지 만이 특정 사용 사례에서는 문제가 아닙니다.
키가 존재하는지 여부를 확인하는 대신 counts [key] = counts.get (key, default = None) # 키가없는 경우 기본값을 제공 할 수 있습니다. 기본값으로 생성됩니다. –
목록의 사전 사전 대신 두 개의'collections.Counter'를 사용할 수 있습니다. –