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