2017-04-24 1 views
0

안녕하세요. 텍스트를 읽고 처음 문자를 대문자로 사용하는 키워드를 식별하는 간단한 프로그램으로 놀아 왔습니다. 내가 겪고있는 문제는 프로그램에서 단어의 구두점을 제거하지 않는다는 것입니다. 즉, Frodo Frodo라는 말은 구두점을 제거하지 않을 것입니다. 프로도, 같은 항목이 아닌 다른 항목으로 올라오고 있습니다. 가져 오기 문자열을 사용하고 문장 부호로 놀아 보았지만 작동하지 않았습니다.Python - 구두점을 제거하는 데 어려움이있는 키워드 읽기 프로그램

아래 코드는 http://www.angelfire.com/rings/theroaddownloads/fotr.pdf (novel.txt라는 txt 문서로 복사)입니다. 다시 감사

by_word = {} 
with open ('novel.txt') as f: 
    for line in f: 
    for word in line.strip().split(): 
     if word[0].isupper(): 
     if word in by_word: 
      by_word[word] += 1 
     else: 
      by_word[word] = 1 

by_count = [] 
for word in by_word: 
    by_count.append((by_word[word], word)) 

by_count.sort() 
by_count.reverse() 

for count, word in by_count[:100]: 
    print(count, word) 
+1

[Python의 문자열에서 구두점을 제거하는 가장 좋은 방법] 가능한 복제본 (http://stackoverflow.com/questions/265960/best-way-to-strip-punctuation-from-a-string-in-python) – elethan

+0

먼저 위의 솔루션을 사용해 보았습니다.하지만 구현에 문제가있는 것 같지 않았습니다. –

답변

1

희망 :

import string 
exclude = set(string.punctuation) 

by_word = {} 
with open ('novel.txt') as f: 
    for line in f: 
    for word in line.strip().split(): 
     if word[0].isupper(): 
     word = ''.join(char for char in word if char not in exclude) 
     if word in by_word: 
      by_word[word] += 1 
     else: 
      by_word[word] = 1 

by_count = [] 
for word in by_word: 
    by_count.append((by_word[word], word)) 

by_count.sort() 
by_count.reverse() 

for count, word in by_count[:100]: 
    print(count, word) 

그것은 word에서

!"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~ 

을 모두 제거합니다.

+0

완벽하게, 고마워! –

0

귀하의 코드는 괜찮습니다, 문장 부호를 제거하기 위해 정규식을 사용하여 분할,

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

이 변경 될 수 있습니다에 []의 첫 번째 인수가 모두 포함

for word in re.split('[,.;]',line.strip()): 

구두점 이 모듈은 re 모듈 https://docs.python.org/2/library/re.html#re.split을 사용합니다. 예상대로이 아래 당신을 위해 작동합니다

+0

감사합니다. 구두점을 삭제 한 것으로 보이지만 지금 Traceback (가장 최근의 마지막 통화) : 파일 "C : \ Users \ joshr \ Desktop \ Key-word reader.py", 줄 7, [0] .isupper() : IndexError : 문자열 인덱스가 범위를 벗어났습니다.이 오류의 의미를 이해하지만 각각의 목록이 하나의 개체로 구성되어 있으므로 인덱스 0에 문제가 없어야합니다. –

관련 문제