尝试使用一个函数的输出来影响下一个函数来计算文本文件中的单词

时间:2015-06-05 08:14:29

标签: python file python-3.x io count

我尝试使用一个函数来计算文本文件中的单词数,然后将此文本文件"清除"仅包含字母和单个空格。所以我有我的第一个函数,我想清理文本文件,然后我有我的下一个函数实际返回前一个函数的结果的长度 (清理文本)。以下是这两个功能。

def cleanUpWords(file):
    words = (file.replace("-", " ").replace("  ", " ").replace("\n", " "))
    onlyAlpha = ""
    for i in words:
        if i.isalpha() or i == " ":
            onlyAlpha += i
    return onlyAlpha

所以单词是文本文件清理没有双空格,连字符,换行符。 然后,我取出所有数字,然后返回清理的onlyAlpha文本文件。 现在,如果我把return len(onlyAlpha.split())而不是只返回onlyAlpha ...它给了我文件中正确数量的单词(我知道因为我有答案)。但是,如果我这样做,并尝试将其分成两个函数,它会搞砸了大量的单词。这就是我所说的(这里是我的单词计数功能)

def numWords(newWords):
    '''Function finds the amount of words in the text file by returning
the length of the cleaned up version of words from cleanUpWords().'''
    return len(newWords.split())

newWords我在main()中定义,其中`newWords = cleanUpWords(harper)----- harper是一个变量,它运行另一个读取功能(除此之外)。

def main():
    harper = readFile("Harper's Speech.txt")    #readFile function reads
    newWords = cleanUpWords(harper)
    print(numWords(harper), "Words.")

鉴于所有这一切,请告诉我为什么如果我把它分成两个函数,它会给出不同的答案。

供参考,这里是一个统计正确的词,但没有拆分清洁和字数统计功能,numWords现在清理和计数,这是不优先的。

def numWords(file):
    '''Function finds the amount of words in the text file by returning
the length of the cleaned up version of words from cleanUpWords().'''
    words = (file.replace("-", " ").replace("  ", " ").replace("\n", " "))
    onlyAlpha = ""
    for i in words:
        if i.isalpha() or i == " ":
            onlyAlpha += i
    return len(onlyAlpha.split())

def main():
    harper = readFile("Harper's Speech.txt")
    print(numWords(harper), "Words.")

希望我提供足够的信息。

1 个答案:

答案 0 :(得分:0)

问题很简单:你把它分成两个函数,但你完全忽略第一个函数的结果,而是在清理之前计算单词的数量

将您的main功能更改为此功能,然后它才能正常工作。

def main():
    harper = readFile("Harper's Speech.txt")
    newWords = cleanUpWords(harper)
    print(numWords(newWords), "Words.") # use newWords here!

此外,您的cleanUpWords功能可能会有所改善。它仍然可以在文本中留下双重或三重空格,您也可以缩短它。或者,您可以使用正则表达式:

import re
def cleanUpWords(string):
    only_alpha = re.sub("[^a-zA-Z]", " ", string)
    single_spaces = re.sub("\s+", " ", only_alpha)
    return single_spaces

或者您可以先筛选出所有非法字符,然后将这些字词拆分并用一个空格将它们连接在一起。

def cleanUpWords(string):
    only_alpha = ''.join(c for c in string if c.isalpha() or c == ' ')
    single_spaces = ' '.join(only_alpha.split())
    return single_spaces

示例,您的原始函数会留下一些双重空格:

>>> s = "text with    triple spaces and other \n sorts \t of strange ,.-#+ stuff and 123 numbers"
>>> cleanUpWords(s)
text with triple spaces and other sorts of strange stuff and numbers

(当然,如果你打算拆分单词,双倍空格不是问题。)