【问题标题】:How to find and rank all prefixes in a list of strings?如何在字符串列表中查找和排列所有前缀?
【发布时间】:2016-04-17 09:53:42
【问题描述】:

我有一个字符串列表,我想找到流行的前缀。前缀的特殊之处在于它们在输入列表中以字符串的形式出现。

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

虽然我的问题很相似,但不同之处在于我需要找到所有流行的前缀。或者说得简单一点,将前缀从最常见到最少排列。

例如,考虑以下字符串列表: 在, 印度, 印度人, 印度国旗, 公牛, 恶霸, 废话

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

以下不是有效的前缀: 工业 卜 布尔 ...因为它们没有出现在输入列表中。

我应该查看什么数据结构来为我的解决方案建模?我倾向于在每个节点上使用带有计数器的“trie”,以跟踪在创建 trie 期间该节点被触摸的次数。

欢迎所有建议。 谢谢。

附言- 我喜欢 python,如果有人可以发布一个可以让我入门的快速 sn-p,我会很高兴。

【问题讨论】:

  • 你有什么尝试吗?
  • 这实际上是您链接的问题的副本...。Counter_Instance.most_common(10) 会给您例如最常见的 10 个
  • 诚实承认,直到现在还只是纸上谈兵。没有要显示的代码。下次注意。

标签: python algorithm data-structures prefix trie


【解决方案1】:

如果我们知道前缀的长度(比如 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)

【讨论】:

    【解决方案2】:
    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]
    

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

    【讨论】:

      猜你喜欢
      • 2011-10-01
      • 2011-06-21
      • 2021-02-14
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2019-04-29
      相关资源
      最近更新 更多