Python 标记文件

Python 标记文件,python,Python,在我的CS课上,我被要求阅读莎士比亚戏剧和十四行诗的全部文集,并打印出一个特定单词出现的次数。有人能帮我把脚抬起来吗。这是我得到的逐步细化的第一级 0级 定义一个函数,用于标记文件,返回标记数组。循环遍历数组,每行打印一个令牌。例如,您的专用main可能如下所示: def main(): tokens = readTokens("shakespeare.txt") for i in range(0,len(tokens),1): print(tokens[i])

在我的CS课上,我被要求阅读莎士比亚戏剧和十四行诗的全部文集,并打印出一个特定单词出现的次数。有人能帮我把脚抬起来吗。这是我得到的逐步细化的第一级

0级 定义一个函数,用于标记文件,返回标记数组。循环遍历数组,每行打印一个令牌。例如,您的专用main可能如下所示:

def main():
    tokens = readTokens("shakespeare.txt")
    for i in range(0,len(tokens),1):
        print(tokens[i])
我想我真正的问题是如何标记一个文件,然后将其读入python的数组中?对不起,如果这类问题不是这个网站的目的,我只是想寻求一些帮助。谢谢

goodletters = set("abcdefghijklmnopqrstuvwxyz' \t")

def tokenize_file(fname):
    tokens = []
    with open(fname) as inf:
        for line in inf:
            clean = ''.join(ch for ch in line.lower() if ch in goodletters)
            tokens.extend(clean.split())
    return tokens

这样写是为了清晰;在生产中,我会使用
inf.read().translate()
,但是Python 2.x和3.x的设置有很大的不同,我不想过于混乱。

你的问题太广泛了。给出一些你尝试过的东西,以及那些没有奏效/部分奏效的东西,你将更有可能得到帮助。在你的情况下,你如何定义“代币”呢?计数器的使用是好的,但这会将“不会”、“不会”和“不会”作为单独的单词计算(它不会去除标点符号或规范化大写)“HughBothwell没有OP的更多信息,很难说他是否想要这些。我实现了最基本的功能,但是如果没有进一步的输入,我就不愿意删除输入文本。@HughBothwell说,我认为你的
goodletters
实现非常棒!我考虑过偷它;)。也许我们应该结合我们的答案?没问题;正如你所说,他可能对此感到高兴。如果你想借用,请继续,但为什么不显示str.translate的用法呢?我不知道在这种情况下我是否会使用
str.translate
,因为我正在将大量内容映射到
None
,并且在其余部分只真正使用
str.casefold()
。我会按你的方式做;)
from collections import Counter

def readTokens(file):
    tokens = Counter()
    with open(file) as f:
        for line in f:
            tokens += Counter(word.strip() for word in line.split())
            # if you're trying to count "Won't", "won't", and "won't!"
            # all together, do this instead:
            ## tokens += Counter(word.strip('"!?,.;:').casefold() for word in line.split())
    return tokens

def main():
    tokens = readTokens('shakespeare.txt')
    for token in tokens:
        print(token)
    print("The most commonly used word is {}".format(max(tokens.items(), key=
                                                    lambda x: x[1])))