如何查找字符串列表中的所有前缀并对其进行排序?
How to find and rank all prefixes in a list of strings?
我有一个字符串列表,我想找到流行的前缀。前缀的特殊之处在于它们在输入列表中作为字符串出现。
我在这里发现了一个类似的问题,但答案是为了找到一个最常见的前缀:
Find *most* common prefix of strings - a better way?
虽然我的问题很相似,但不同之处在于我需要找到所有流行的前缀。或者简单地说,将前缀从最常见到最不常见排列。
例如,考虑以下字符串列表:
在,印度,印第安人,印度国旗,公牛,恶霸,废话
前缀排名:
在 - 4 次
印度 - 3次
公牛 - 3次
...等等。请注意 - in、bull、india 都出现在输入列表中。
以下是无效的前缀:
工业
卜
布尔
...因为它们没有出现在输入列表中。
我应该查看什么数据结构来为我的解决方案建模?我倾向于在每个节点上使用带有计数器的 "trie" 来跟踪在创建 trie 期间该节点被触及的次数。
欢迎所有建议。
谢谢
p.s。 - 我喜欢 python,如果有人可以 post 一个可以让我入门的快速片段,我会很高兴。
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] 只是颠倒了顺序
如果我们知道前缀的长度(比如 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)
我有一个字符串列表,我想找到流行的前缀。前缀的特殊之处在于它们在输入列表中作为字符串出现。
我在这里发现了一个类似的问题,但答案是为了找到一个最常见的前缀: Find *most* common prefix of strings - a better way?
虽然我的问题很相似,但不同之处在于我需要找到所有流行的前缀。或者简单地说,将前缀从最常见到最不常见排列。
例如,考虑以下字符串列表: 在,印度,印第安人,印度国旗,公牛,恶霸,废话
前缀排名: 在 - 4 次 印度 - 3次 公牛 - 3次 ...等等。请注意 - in、bull、india 都出现在输入列表中。
以下是无效的前缀: 工业 卜 布尔 ...因为它们没有出现在输入列表中。
我应该查看什么数据结构来为我的解决方案建模?我倾向于在每个节点上使用带有计数器的 "trie" 来跟踪在创建 trie 期间该节点被触及的次数。
欢迎所有建议。 谢谢
p.s。 - 我喜欢 python,如果有人可以 post 一个可以让我入门的快速片段,我会很高兴。
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] 只是颠倒了顺序
如果我们知道前缀的长度(比如 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)