2014-12-09 3 views
1
def get_word_frequencies(filename): 
    freqs = {} 
    for line in open(filename): 
     for char in line.split(): 
      if char in freqs: 
       freqs[char] += 1 
      else: 
       freqs[char] = 1 
    return freqs 

텍스트 파일의 분할 문자에 문제가있어서 주파수를 찾습니다. 나는이 코드를 작성했지만 단어 만 찾았습니다. 나는 A-Z 사전에 편지를 원합니다.txt 파일의 분할 문자

답변

1

당신은 당신의 편지 수를 얻을 수 collections.Counterstring.ascii_letters를 사용할 수 있습니다. string.ascii_letters의 사용은 당신이 단지 정규 표현식 사용 등

from collections import Counter 
from string import ascii_letters 

def get_word_frequencies(filename): 
    with open(filename) as f: 
     c = Counter(f.read()) 
    return {k:v for k,v in c.items() if k in ascii_letters} 

c = get_word_frequencies('derp.py') 

print(c) 
# {'o': 12, 'h': 1, 'C': 2, 't': 16, 'i': 18, 'y': 1, 'u': 5, 'f': 11, 'p': 6, 
# 'v': 2, 'c': 10, 'm': 7, 'n': 13, 'k': 3, 'd': 5, 'a': 6, 'q': 2, 'w': 3, 
# 's': 10, 'g': 3, 'r': 19, 'l': 6, 'e': 25} 
+0

을이 있지만, 유일한 결과는 다음과 같습니다. t. 내가 뭘 잘못했는지 모른다 ... – pyp

+0

또 다른 문제는 get_word_frequencies가 나에게 이름 오류를 발생시키고 그것이 정의되어 있지 않다는 것입니다. – pyp

+0

내가 파일 이름을 전달하면 나에게 t가 붙는다 !! – pyp

2

문자를 개별적으로 반복하려면 split이 필요하지 않습니다. 문자열은 직접 반복 가능합니다.

for char in line: 

... ""와 같은 공백도 포함됩니다. 글자 만 원하면 단어를 반복하고 단어의 각 문자를 반복 할 수 있습니다. 당신은 반드시 수동으로 주파수 딕셔너리를 구성 할 필요가 없습니다

for word in line.split(): 
    for char in word: 

덧붙여, 파이썬은 이미하는 Counter 클래스가 있습니다.

>>> import collections 
>>> print collections.Counter("hello how are you doing today?") 
Counter({' ': 5, 'o': 5, 'a': 2, 'e': 2, 'd': 2, 'h': 2, 'l': 2, 'y': 2, 'g': 1, 'i': 1, 'n': 1, 'r': 1, 'u': 1, 't': 1, 'w': 1, '?': 1}) 
-1

문자, 그리고 문장 부호, 계산 할 수 있습니다 : derp.py?I이 시도 무엇 Sorry..but

import re 
from collections import Counter 

with open('filename', 'r') as file: 
    text = file.read() 

text = re.sub('[\s]+|()', ' ', text).split() 

freqs = Counter(text) 
+0

이것은 완벽하게 작동합니다. 왜 downvoting ?! – Abdo