计算文件中的单词长度

时间:2011-02-04 06:21:32

标签: python

所以我的函数应该打开一个文件并计算字长并给出输出。例如,

许多( 'SAMPLE.TXT')

长度为1:2的单词

长度为2:6的单词

长度为3:7的单词

长度为4:6的单词

我的sample.txt文件包含: 这是一个测试文件。有多少个单词长度为1? 三个长度是多少个单词?我们应该搞清楚! 功能可以这样做吗?

我的编码到目前为止,

def many(fname): infile = open(fname,'r')
text = infile.read()
infile.close()
L = text.split()
L.sort
for item in L:
    if item == 1:
        print('Words of length 1:', L.count(item))

谁能告诉我我做错了什么。我称这个功能没有任何反应。这显然是因为我的编码,但我不知道从哪里开始。任何帮助都会很好,谢谢。

6 个答案:

答案 0 :(得分:4)

由于这是家庭作业,我会在这里发布一个简短的解决方案,并将其作为练习,以弄清楚它的作用及其工作原理:)

>>> from collections import Counter
>>> text = open("sample.txt").read()
>>> counts = Counter([len(word.strip('?!,.')) for word in text.split()])
>>> counts[3]
7

答案 1 :(得分:2)

您希望获取长度列表(1,2,3,4,...字符)以及文件中出现此长度的单词数。

所以直到L = text.split()这是一个很好的方法。现在看看Python中的词典,它将允许您存储上面提到的数据结构并迭代文件中的单词列表。只是一个暗示...

答案 2 :(得分:1)

您对此有何看法

if item == 1:

在这里

L.count(item)

实际发生了什么?使用调试器并查看变量值或只将它们打印到屏幕上。

答案 3 :(得分:0)

让我们一步一步地分析您的问题。

你需要:

  1. 从文件中检索所有单词
  2. 迭代所有单词
  3. 每次找到长度为N
  4. 的单词时,都会增加计数器N
  5. 输出结果
  6. 您已经完成了第1步:

    def many(fname): 
        infile = open(fname,'r')
        text = infile.read()
        infile.close()
        L = text.split()
    

    然后你(尝试)对单词进行排序,但它没用。你会按字母数字对它们进行排序,因此对你的任务没用。

    相反,我们定义一个Python dictionary来保存单词数

        lengths = dict()
    

    @sukhbir在评论中正确地建议使用Counter类,我鼓励你去搜索它,但我会在这个例子中坚持使用传统词典,因为我觉得熟悉基础知识非常重要在探索图书馆之前的语言。

    让我们继续第2步:

        for word in L:
            length = len(word)
    

    对于列表中的每个单词,我们为变量length分配当前单词的长度。让我们检查一下计数器是否已经有一个我们长度的插槽:

            if length not in lengths:
                lengths[length] = 0
    

    如果没有遇到长度为length的单词,我们会分配该插槽并将其设置为零。我们终于可以执行第3步:

            lengths[length] += 1
    

    最后,我们增加了当前长度为1个单位的单词计数器。

    在功能结束时,您会发现lengths将包含字长的地图 - >这个长度的单词数。让我们通过打印其内容来验证(步骤4):

        for length, counter in lengths.items():
            print "Words of length %d: %d" % (length, counter)
    

    如果您复制并粘贴我写的代码(尊重缩进!!),您将获得所需的答案。

    我强烈建议您浏览Python tutorial

答案 4 :(得分:0)

正则表达式库可能也有帮助,如果有点矫枉过正。匹配re的简单单词可能类似于:

import re
f = open("sample.txt")
text = f.read()
words = re.findall("\w+", text)

单词是......单词的列表:)

然而,这不会恰当地匹配像'不是'和'我'这样的词,因为\ w只匹配字母数字。本着家庭作业的精神,我想我会留给感兴趣的读者,但是Python Regular Expression文档作为一个开端非常好。

然后我按长度计算这些单词的方法就像:

occurrence = dict()
for word in words:
    try:
        occurrence[len(word)] = occurrence[len(word)] + 1
    except KeyError:
        occurrence[len(word)] = 1
print occurrence.items()

使用字典(出现)来存储单词长度及其在文本中的出现次数。 try:和except:关键字处理我们第一次尝试在字典中存储特定长度的单词时,在这种情况下,字典不满意被要求检索它不知道的内容,以及除外:获取作为结果抛出的异常并存储该长度的单词的第一次出现。最后一行打印字典中的所有内容。

希望这会有所帮助:)

答案 5 :(得分:0)

也许这个:

>>> s
'This is a test file. How many words are of length one? How many words are of length three? We should figure it out! Can a function do this?'
>>> {x:[len([c for c in w ]) for w in s.split()].count(x) for x in [len([c for c in w ]) for w in s.split()] }
{1: 2, 2: 6, 3: 5, 4: 6, 5: 4, 6: 5, 8: 1}