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

我的代码返回错误

Traceback(最近一次调用最后):文件“”,第 1 行,在 spellCheck("test1.txt") 文件“J:\python\SpellCheck(1).py”,第 36 行,在 spellCheck spellingErrors = dict(wordsList) ValueError:字典更新序列元素 #0 的长度为 5;2 是必需的

那么任何人都可以帮助我吗?

4

1 回答 1

8

我应用了PEP-8并重写了 unpythonic 代码。

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_uppercaseascii_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在循环中添加 a 以查看那里发生了什么。

代码的最后一部分只是一团糟。您只访问每个列表中的第一个单词 - 可能是因为您不知道该列表的外观。那是通过反复试验进行编码。尝试通过知识进行编码。

你真的不知道 a做什么dict以及如何使用它。我可以在这里解释它,但是您可能想先阅读 www.python.org 上的这个精彩教程,尤其是处理字典的章节。如果您研究了这些解释但仍然不理解,请随时提出有关此的新问题。

我使用 adefaultdict而不是标准字典,因为它使这里的生活更轻松。如果您将我的代码的一部分定义spelling errorsdict

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 回答