如何在Python中计算准确的单词

时间:2020-10-02 15:24:54

标签: python regex

我想搜索一个文本并计算所选单词出现的次数。为了简单起见,我会说文本为“适合吗?”而我想数的单词是“ it”和“ fit”。

我编写了以下代码:

mystring = 'Does it fit?'
search_words = 'it', 'fit'
for sw in search_words:
    frequency = {}
    count = mystring.count(sw.strip())
    output = (sw + ',{}'.format(count))
    print(output)

输出为

it,2
fit,1

因为代码将“适合”中的“ it”计入“ it”的总数中。

我想要的输出是

it,1
fit,1

我尝试将第5行更改为count = mystring.count('\\b'+sw+'\\b'.strip()),但每个单词的计数为零。我怎样才能使它正常工作?

3 个答案:

答案 0 :(得分:1)

列表语法已关闭,但这是一种实现方法

bad_chars = [';', ':', '!', "*","?","."]
res = {}
for word in ["it","fit"]: 
    res[word] = 0
    string = ''.join((filter(lambda i: i not in bad_chars, "does it fit?")))
    for i in string.split(" "):
        if word == i: res[word] += 1

print(res)

通过使用in关键字,您正在检查该字符串是否在另一个字符串中,在这种情况下,itfit内部,因此您发现2次出现的{{1} }

在这里它直接比较了删除标点符号/特殊字符之后的单词!

输出:

it

答案 1 :(得分:1)

您尝试在原始帖子中实现的正则表达式模式的问题在于/** * @return the routing key or pattern for the binding. * Multiple elements will result in multiple bindings. */ String[] key() default {}; ,而不是模式本身。

@QueueBinding(value = @Queue(value = "foo"), exchange = @Exchange("ex1"), key={"foo", "bar", "baz"}) docs)返回方法被应用到的str.count()中作为参数传递的str.count()的不重叠出现次数-因此{ {1}}将返回str-但是,str仅用于使用字符串文字 进行子字符串标识,不适用于正则表达式模式。

以下使用您的原始模式和内置'lots of love'.('lo')模块的解决方案应该很适合您。

2

如果您希望从str.count()获得匹配项,而不考虑它们的大小写,例如reimport re mystring = 'Does it fit?' search_words = 'it', 'fit' results = dict() for sw in search_words: count = re.findall(rf'\b{sw}\b', mystring) results[sw] = 0 if not count else len(count) for k, v in results.items(): print(f'{k}, {v}') search_words等每次出现在{{ 1}}包含在'Fit'中存储的计数中-您可以通过更改以下行来实现:

'FIT'

'fIt'

答案 2 :(得分:-1)

尝试一下:

def count_words(string, *args):
    words = string.split()
    search_words = args
    frequency_dict = {}
    for i in range(len(words)):
        if words[i][-1] == '?':
            words[i] = words[i][:-1]
    for word in search_words:
        frequency_dict[word] = words.count(word)
    for word, count in frequency_dict.items():
        print(f'{word}, {count}')

可以,

count_words('Does it it it fit fit it?', 'it', 'fit')

输出为

it, 4
fit, 2