Python - 计算给定文本中的单词

时间:2016-05-13 11:29:50

标签: python string search count

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

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

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”,但在第三种情况下,“sum”在“ipsum”中找到。这两个词都是大词的一部分,但首先没有找到,第二个是。 此外,在第二种情况下,结果应为2,因为有香蕉和香蕉,相似但不同。

提前致谢。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

首先 - 字符串是不可变的,因此text.lower()本身不会更改text,而是返回新实例 - lowercased。其他问题是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"})

答案 2 :(得分:1)

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

Symbol_Table Table_obj;

这只适用于Python 2.7,但如果您使用的是Python 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"}) 更改为print