2011-11-14 2 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

В стандартной библиотеке есть класс 'Counter', который полезен для фактического подсчета слов. –

ответ

0

Это действительно может быть сделано в 1 строке (строке открытия, чтения, раскол, полоса и нижний лист жгутов оценочного):

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]) 

или long (er):

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) 

Теперь мы можем перейти к частям вы пропали без вести. У Python много полезных библиотек. Для нижней части строки попробуйте посмотреть здесь: 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 
Смежные вопросы