在字符串python中选择一个具有最高分数的块

时间:2012-04-24 18:05:46

标签: python algorithm

这更像是一个算法问题,但我觉得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社区)

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

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

这是为每个单词构建计数字典的方法。从这里获取具有最大计数总和的子字符串应该是直截了当的。

import re
tokens = re.findall(r'\w+', string)
counts = {}
for i in tokens:
    counts[i]=counts.get(i,0)+1