-5

これは私が持っているものです。コメントは私がやろうとしていることを説明しています

一部の単語のスペルが間違っているテキスト ファイルに入力された単語と、スペル チェックに使用されるテスト テキスト ファイルがあります。

例 >>> spellCheck("test1.txt") {'exercsie': 1, 'finished': 1}

from string import ascii_uppercase, ascii_lowercase
def spellCheck(textFileName):

    # Use the open method to open the words file.
    # Read the list of words into a list named wordsList
    # Close the file

    file=open("words.txt","r")
    wordsList = file.readlines()
    file.close()

    # Open the file whos name was provided as the textFileName variable
    # Read the text from the file into a list called wordsToCheck
    # Close the file

    file=open(textFileName, "r")
    wordsToCheck = file.readlines()
    file.close()

    for i in range(0,len(wordsList)): wordsList[i]=wordsList[i].replace("\n","")
    for i in range(0,len(wordsToCheck)): wordsToCheck[i]=wordsToCheck[i].replace("\n","")


    # The next line creates the dictionary
    # This dictionary will have the word that has been spelt wrong as the key and the number of times it has been spelt wrong as the value
    spellingErrors = dict(wordsList)


    # Loop through the wordsToCheck list
    # Change the current word into lower case
    # If the current word does not exist in the wordsList then
            # Check if the word already exists in the spellingErrors dictionary
                    # If it does not exist than add it to the dictionary with the initial value of 1.
                    # If it does exist in the dictionary then increase the value by 1

    # Return the dictionary
    char_low = ascii_lowercase
    char_up = ascii_uppercase
    for char in wordsToCheck[0]:
       if char in wordsToCheck[0] in char_up:
            result.append(char_low)
    for i in wordsToCheck[0]:
       if wordsToCheck[0] not in wordsList:
            if wordsToCheck[0] in dict(wordsList):
                    dict(wordsList) + 1
            elif wordsToCheck[0] not in dict(wordsList):
                    dict(wordsList) + wordsToCheck[0]
                    dict(wordsList) + 1
    return dict(wordsList)

私のコードはエラーを返します

トレースバック (最新の呼び出しが最後): ファイル ""、1 行目、spellCheck("test1.txt") のファイル "J:\python\SpellCheck(1).py"、36 行目、spellCheck の spellingErrors = dict(wordsList) ValueError: 辞書更新シーケンス要素 #0 の長さは 5 です。2が必要です

誰でも私を助けることができますか?

4

1 に答える 1

8

PEP-8を適用し、非 Python コードを書き直しました。

import collections

def spell_check(text_file_name):
    # dictionary for word counting
    spelling_errors = collections.defaultdict(int)

    # put all possible words in a set
    with open("words.txt") as words_file:
        word_pool = {word.strip().lower() for word in words_file}

    # check words
    with open(text_file_name) as text_file:
        for word in (word.strip().lower() for word in text_file):
            if not word in word_pool:
                spelling_errors[word] += 1

    return spelling_errors

with ステートメントdefaultdictについて読みたいと思うかもしれません。

ascii_uppercaseとを使用したコードascii_lowercase:チュートリアルを読んで、基本を学んでください。そのコードは「自分が何をしているのかわからないけどとにかくやる」の集まりです。

古いコードに関するいくつかの説明

あなたが使う

char_low = ascii_lowercase

char_lowその値を操作することはないため、必要はありません。オリジナルを使用するだけascii_lowercaseです。次に、コードの次の部分があります。

for char in wordsToCheck[0]:
    if char in wordsToCheck[0] in char_up:
        result.append(char_low)

ここで何をしようとしているのかよくわかりません。リスト内の単語を小文字に変換したいようです。実際、そのコードが実行される場合 (実際には実行されませんresult)、リスト内の単語のすべての大文字に対して、小文字のアルファベット全体を に追加します。resultそれにもかかわらず、後のコードでは使用しないため、害はありません。print wordsToCheck[0]ループの前またはループ内に a を追加して、print charそこで何が起こるかを確認するのは簡単です。

コードの最後の部分はめちゃくちゃです。各リストの最初の単語だけにアクセスします。おそらく、そのリストがどのように見えるかわからないためです。それは試行錯誤によるコーディングです。代わりに、知識によるコーディングを試してください。

dictあなたは a が何をするのか、どのように使うのか本当に知りません。ここで説明できますが、www.python.org にこの素晴らしいチュートリアルがあり、最初に読みたいと思うかもしれません。特に、辞書を扱う章です。これらの説明を調べてもまだ理解できない場合は、これに関する新しい質問に戻ってください。

defaultdictここでの生活が楽になるので、標準の辞書の代わりに を使用しました。spelling errors代わりにasを定義するdictと、コードの一部を次のように変更する必要があります

if not word in word_pool:
    if not word in spelling_errors:
        spelling_errors[word] = 1
    else:
        spelling_errors[word] += 1

ところで、私が書いたコードは問題なく実行されます。不足している単語 (小文字) をキーとして辞書を取得し、その単語の数を対応する値として取得します。

于 2012-11-26T22:00:37.227 に答える