如何在字符串列表中查找和排名所有前缀?

时间:2016-01-12 16:56:07

标签: python algorithm data-structures prefix trie

我有一个字符串列表,我想找到流行的前缀。前缀是特殊的,因为它们在输入列表中作为字符串出现。

我在这里找到了类似的问题,但答案是为了找到最常见的前缀: Find *most* common prefix of strings - a better way?

虽然我的问题很相似,但不同之处在于我需要找到所有流行的前缀。或者可能稍微简单地说明一下,从最常见到最少排序前缀。

例如,请考虑以下字符串列表: 在,印度,印度,印度国旗,公牛,欺负,废话

前缀排名: 在 - 4倍 印度 - 3次 公牛 - 3次 ...等等。请注意 - in,bull,india都出现在输入列表中。

以下是无效的前缀: IND BU BUL ...因为它们不会出现在输入列表中。

我应该考虑使用哪种数据结构来建模我的解决方案?我倾向于在每个节点上使用带有计数器的“trie”来跟踪在创建trie期间触摸该节点的次数。

欢迎所有建议。 感谢。

P.S。 - 我喜欢python,如果有人能发布一个可以让我入门的快速片段,我会很高兴。

2 个答案:

答案 0 :(得分:0)

words = [ "in", "india", "indian", "indian", "flag", "bull", "bully", "bullshit"]

Result = sorted([ (sum([ w.startswith(prefix) for w in words ]) , prefix )  for prefix in words])[::-1]

它将每个单词作为前缀进行检查,并检查有多少其他单词以它开头,然后对结果进行排序。 [:: - 1]只是颠倒了那个顺序

答案 1 :(得分:0)

如果我们知道前缀的长度(例如3)

from nltk import FreqDist
suffixDist=FreqDist()
for word in vocabulary:
    suffixDist[word[-3:]] +=1
commonSuffix=[suffix for (suffix,count) in suffixDist.most_common(150) ]
print(commonSuffix)