2011-11-14 5 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ループの動作を確認してください。まず、各行を一度に1つずつ読み込み、各行の単語リストを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

句読点を消去

1つのオプションは、正規表現モジュールのre.sub機能にあります。この場合、英数字またはスペースではないすべての文字を削除します。

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

小文字

文字列オブジェクトの直接的な下位機能。

>>> 'Its ok'.lower() 
its ok 
関連する問題