我尝试使用一个函数来计算文本文件中的单词数,然后将此文本文件"清除"仅包含字母和单个空格。所以我有我的第一个函数,我想清理文本文件,然后我有我的下一个函数实际返回前一个函数的结果的长度 (清理文本)。以下是这两个功能。
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.")
希望我提供足够的信息。
答案 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
(当然,如果你打算拆分单词,双倍空格不是问题。)