【问题标题】:Python - Count words in a given textPython - 计算给定文本中的单词
【发布时间】:2016-09-09 14:07:02
【问题描述】:

我是编码新手,所以如果我问一些已经回答的问题,请原谅我,但请相信我确实搜索了答案但找不到它。

我的任务是计算给定文本中有多少给定单词。单词可以是一个洞或其他单词的一部分。字母大小写无关紧要。如果单词在文本中出现多次,则只计算一次。 到目前为止,我设法做到了这一点:

def count_words(text, words):
    count = 0
    text = text.lower()
    for w in words:
        if w in text:
            count =+ 1

    print (count)

count_words("How aresjfhdskfhskd you?", {"how", "are", "you", "hello"})
count_words("Bananas, give me bananas!!!", {"banana", "bananas"})
count_words("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",
                       {"sum", "hamlet", "infinity", "anything"})

使用该代码,我设法将所有树文本的最终计数为 1,并且只有三分之一是可以的。

在我看来,我的第一个问题是我的 text.lower() 没有做任何事情,我认为它应该降低所有情况。

我的第二个问题是,在第一种情况下,在“aresjfhdskfhskd”中找不到“are”,但在第三种情况下,在“ipsum”中找到了“sum”。这两个词都是大词的一部分,但第一个没有找到,第二个是。 另外,在第二种情况下,结果应该是 2,因为有香蕉和香蕉,相似但不同。

提前致谢。

【问题讨论】:

  • 我还不确定第二个和第三个问题,但text.lower() 不会修改字符串。它返回字符串,但是是小写的。使用text = text.lower()
  • 关键错误是count = +1count += 1
  • 谢谢你们。这解决了部分问题。
  • 除计数错误外,将for语句更改为for w in words.lower()。你的“单词”总是小写吗?否则你也必须给他们打电话lower()

标签: python string search count


【解决方案1】:

使用sum 和生成器表达式,这似乎是最简单的解决方案:

text = text.lower()
count = sum(word in text for word in words)
# bools are cast to ints (0, 1) here

【讨论】:

  • 虽然正确(并解决了问题),但该解决方案似乎并没有真正解决问题,即了解错误并学习。类型强制技巧在那里无济于事。补充:如果你想要最小化,你也可以在表达式中使用text.lower()
  • @Joost 你是对的,当然。真正的(平庸的)问题已经在 cmets 中发布并得到适当的支持。尽管如此,为什么不建议一个更简洁、更短、易于阅读且可能具有指导意义的替代方案?
  • @Joost True,但是每次迭代都会调用lower()
  • 我认为在我提出这个问题之前我已经学到了一些我不知道的东西,所以我想最后它是有帮助的。 :)
【解决方案2】:

首先 - 字符串是不可变的,所以text.lower() 本身不会改变text,而是返回新的实例——小写。另一个问题是if a in base 检查是否存在,没有信息多少次......

def count_words(text, words):
    count = 0
    lower_text = text.lower()
    for w in words:
        print w + " - " + str(lower_text.count(w))

print "1"
count_words("How aresjfhdskfhskd you?", {"how", "are", "you", "hello"})
print "2"
count_words("Bananas, give me bananas!!!", {"banana", "bananas"})
print "3"
count_words("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",
                   {"sum", "hamlet", "infinity", "anything"})

【讨论】:

  • @DejanJovanovic 没问题 - Schwobaseggl 的回答更像 Pythonic,但我认为您需要为此做好准备。如果您需要良好的信息来源 - 请点击此链接diveintopython.net :)
  • 谢谢伙计。我一定会遵循它,因为我知道我不知道多少。 :)
【解决方案3】:

您的代码部分错误。试试这个:

def count_words(text, words):
    count = 0
    lower_text = text.lower()
    for w in words:
        if w in lower_text:
            count += 1

    print count

count_words("How aresjfhdskfhskd you?", {"how", "are", "you", "hello"})
count_words("Bananas, give me bananas!!!", {"banana", "bananas"})
count_words("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",
                   {"sum", "hamlet", "infinity", "anything"})

这仅适用于 Python 2.7,因此如果您使用的是 Python 3+,则需要将最终的 print 更改为 print(count)

【讨论】:

    猜你喜欢
    • 2014-11-04
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    相关资源
    最近更新 更多