原理(英文为例):
1.把每个单词都拆成单个字母,在单词结尾加上结束符,并标记上这个词出现的频率
2.(以2-gram为例)把连续相邻的2个字母,进行组合,比如a b c-->ab bc ,同样标记上这个词出现的频率
3.统计不同两个字母组合的最大频率,并选出最大字母组合。
4.用选出的最大字母组合替换掉第一步中拆开的 两个字母 比如用ab 去替换掉 每个单词中出现的a b
5.替换结束后。重新从第二步开始进行循环 。得到最后的新词典
code:
import re
def process_raw_words(words, endtag='-'):
'''把英文单词分成每个字母,然后每个单词最后加上结束符,这里结束符-'''
vocabs = {}
for word, count in words.items():
# 加上空格
word = re.sub(r'([a-zA-Z])', r' \1', word)
word += ' ' + endtag
vocabs[word] = count
return vocabs
def get_symbol_pairs(vocabs):
''' 组合连续 相邻的两个字母,并统计出现的频率
Args:
vocabs: 单词dict,(word, count)单词的出现频率。单词已经被分割成字母
Returns:
pairs: dict,{(符号1, 符号