trie树词频统计根据频率排序
时间: 2023-07-06 20:05:07 浏览: 126
对于 trie 树词频统计,我们可以先使用 trie 树将所有的单词插入到树中,并在每个节点上记录该单词出现的次数。然后,我们可以进行一次深度优先搜索,将所有的单词及其出现次数存储到一个列表中。最后,我们可以对这个列表按照出现次数进行排序,从高到低排列,以得到每个单词的词频排名。
以下是一个 Python 实现:
```python
class TrieNode:
def __init__(self):
self.children = {}
self.is_word = False
self.count = 0
class Trie:
def __init__(self):
self.root = TrieNode()
def insert(self, word):
node = self.root
for c in word:
if c not in node.children:
node.children[c] = TrieNode()
node = node.children[c]
node.is_word = True
node.count += 1
def _dfs(self, node, word, res):
if node.is_word:
res.append((word, node.count))
for c in node.children:
self._dfs(node.children[c], word + c, res)
def get_word_count(self):
res = []
self._dfs(self.root, "", res)
res.sort(key=lambda x: x[1], reverse=True)
return res
```
在主程序中,我们可以先构建 trie 树,然后调用 `get_word_count` 方法来获取单词的词频排名:
```python
words = ["apple", "banana", "orange", "pear", "apple", "banana", "banana"]
trie = Trie()
for word in words:
trie.insert(word)
word_count = trie.get_word_count()
for i, (word, count) in enumerate(word_count):
print(f"{i+1}. {word}: {count}")
```
阅读全文