2011-11-14 3 views
2

험한 프로그래머가 있습니다. 수업 과제를 위해 나는 텍스트 문서에서 단어를 가져 와서 계산하고 주문해야합니다. 구두점을 지우고 대문자를 낮은 문자로 바꾸는 데 문제가 있습니다. 모든 지침은 크게 감사하겠습니다.구두점과 대문자를 제거하는 데 문제가 있습니까? (초급)

docwords={} 
doc=raw_input("Please enter the name of a text file: ") 
docread=open(doc, 'r') 
doclist=[] 



def main(): 
    for x in docread: 
     words = x.split() 
    for word in words: 
     doclist.append(word) 

def wordcount(): 
    main() 
    for counter in doclist: 
     docwords[counter] = docwords.get(counter,0) + 1 

wordcount() 
docread.close() 
for p in sorted(docwords): 
    print p, "-->", docwords[p] 
+0

표준 라이브러리에는 단어의 실제 계산에 유용한 '카운터'클래스가 있습니다. –

답변

0

이 정말 모두 1 개 라인 (프롬프트를 열고, 읽고, 분할, 스트립 낮은 withing에 목록 빌려)에서 할 수있다 :

words = [word.strip("!\"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~").lower() for word in open(raw_input("Please enter the name of a text file: ").strip(), 'r').read().replace("'", "").split()] 

다음 인쇄 통계 :

print "Word count: %d" % len(words) 
for p in sorted(words): 
    print %s --> %s" % (p, words[p]) 

또는 길다 (에머리) :

docwords={} 
doc=raw_input("Please enter the name of a text file: ") 
docread=open(doc, 'r') 
doclist=[] 

def main(): 

    for x in docread: 
     doclist.extend([word.strip("!\"#$%&\'()*+,-./:;<=>[email protected][\\]^_`{|}~").replace("'", "").lower() for word in x.split()]) 

def wordcount(): 
    main() 
    for counter in doclist: 
        docwords[counter] = docwords.get(counter,0) + 1 

wordcount() 
docread.close() 
for p in sorted(docwords): 
    print p, "-->", docwords[p] 
2

시작하려면 main이 원하는 것을 수행하지 않습니다. for 루프가 수행하는 작업을 확인하십시오. 먼저 한 줄씩 한 줄씩 읽고 각 줄의 단어 목록을 words에 할당합니다. 하지만 방금 words을 반복하여 덮어 썼습니다. 이제 words은 마지막 줄에있는 단어 목록입니다. 이제 단어들을 doclist에 넣으십시오. 루프 중첩 방법을 생각하고이 섹션을 먼저 수정하십시오.

def main(): 
    for x in docread: 
     words = x.split() 
    for word in words: 
     doclist.append(word) 

이제는 누락 된 부분으로 이동할 수 있습니다. 파이썬에는 유용한 라이브러리가 많이 있습니다. 문자열을 소문자로 바꾸려면 여기를보십시오 : http://docs.python.org/library/stdtypes.html#str.lower. 구두점을 제거하려면이 기능이 문자가 문자인지 확인하는 데 유용 할 수 있습니다 (http://docs.python.org/library/stdtypes.html#str.isalpha).

숙제 이후로 나는 코드를 포기하는 것을 주저합니다. 그렇지 않으면 너는 그것을 배우지 않을 것이다. 네가 다시 붙어 있다면 뭔가를 말해봐.

+0

정말 고마워요. 소문자와 구두점이 작동하도록했습니다. for 루프는 오타 였고 사과했습니다. – user1044868

+0

@ user1044868 사과하실 필요가 없습니다. 레코드를 수정하려면 게시물의 오타를 편집 할 수 있습니다. 여러분이 여기에서 새로 왔으므로, 특히 미래의 질문에 답하기를 원하면 질문에 대한 대답을 받아 들여야한다고 지적 할 것입니다. –

1

삭제 문장

하나의 옵션은 정규 표현식 모듈의의 re.sub 기능이다. 이 경우 영숫자 또는 공백이 아닌 모든 문자를 제거합니다.

import re 
s = "It's ok" 
print re.sub('[^\w ]','',s) 
Its ok 

소문자

캐릭터 오브젝트의 직 하부 포워드 기능.

>>> 'Its ok'.lower() 
its ok 
관련 문제