0

这更像是一个算法问题,但我觉得 python 有一种巧妙的方法来做到这一点。

假设我有一个字符串:

      string = " this is how i do is it..is this is how we do it.. this is how everyone do it is"

现在我基本上想从字符串中提取最重要的块。我如何决定“最重要”基本上只是通过查看词频。所以可以说,如果我想要一个长度为 10 个字符/单词(基本上是一个固定窗口)的块,那么基本上我试图找到其术语具有最大术语频率得分的块。

所以在上面的例子中,可能“是”是重复次数最多的词。所以也许最好的块是

                   "is this is" 

或类似的东西。??我如何在 python 中有效地做到这一点(这是给 python 社区的)

有没有更好的方法来解决这个问题(这是针对算法社区的)

4

2 回答 2

1

这是一个尝试:

我给每个字母(包括空格)打分。分数等于元素在字符串中出现的次数。查找元素得分总和最大化的 10 个元素窗口。

string = " this is how i do is it..is this is how we do it.. this is how everyone do it is"

from collections import Counter 

s_count = Counter(string)

def score_count(x):
    return sum(s_count[ele] for ele in x)

most_imp = None
high_val = 0
n = 10   

for i in xrange(0, len(string) - n):

    temp_value = score_count(string[i: i + n])

    if temp_value > high_val:
        high_val = temp_value
        most_imp = string[i : i + n]

结果:

>>> most_imp
' i do is i'
于 2012-04-24T18:47:36.877 回答
0

这就是您为每个单词构建计数字典的方式。从这里获取具有最大计数总和的子字符串应该很简单。

import re
tokens = re.findall(r'\w+', string)
counts = {}
for i in tokens:
    counts[i]=counts.get(i,0)+1
于 2012-04-24T18:34:52.810 回答