【问题标题】:How can I find out the alphabet and alphabetic transition frequency?如何找出字母表和字母转换频率?
【发布时间】:2021-10-03 02:25:45
【问题描述】:

示例:'peter piper 挑选了一小撮泡椒'

首先,计算一个字母的频率。

abc = 'peter piper picked a peck of pickled peppers'
set(abc)
freq = {}
for i in abc:
    freq[i] = abc.count(i)
freq

但是,我找不到如上转换的字母的编号,我怎么才能得到呢?

  1. p>e : 5
  2. e>t : 1
  3. t>e : 1
  4. e>r : 3

【问题讨论】:

    标签: python python-3.x python-2.7


    【解决方案1】:
    1. 使用zip 将相同的字符串移1 以获取当前字符和下一个字符对
    2. 使用collections.Counter 获取计数。它还可以将您的代码简化为一行。
    from collections import Counter
        
    Counter(zip(abc, abc[1:]))
    

    返回:

    Counter({('p', 'e'): 5,
             ('e', 't'): 1,
             ('t', 'e'): 1,
             ('e', 'r'): 3,
             ('r', ' '): 2,
             (' ', 'p'): 5,
             ('p', 'i'): 3,
             ('i', 'p'): 1,
             ('i', 'c'): 2,
             ('c', 'k'): 3,
             ('k', 'e'): 1,
             ('e', 'd'): 2,
             ('d', ' '): 2,
             (' ', 'a'): 1,
             ('a', ' '): 1,
             ('e', 'c'): 1,
             ('k', ' '): 1,
             (' ', 'o'): 1,
             ('o', 'f'): 1,
             ('f', ' '): 1,
             ('k', 'l'): 1,
             ('l', 'e'): 1,
             ('e', 'p'): 1,
             ('p', 'p'): 1,
             ('r', 's'): 1})
    

    【讨论】:

    • 哇,它可以表示为一个简单的 zip 函数。谢谢你。我学到了很多东西。
    【解决方案2】:

    collections.Counter是你的朋友:

    from collections import Counter
    
    sentence = 'peter piper picked a peck of pickled peppers'
    letter_pairs = [sentence[i:i+2] for i in range(len(sentence) - 1)]
    pair_freq = Counter(letter_pairs)
    

    给予

    Counter({'pe': 5, ' p': 5, 'er': 3, 'pi': 3, 'ck': 3, 'r ': 2, 'ic': 2, 'ed': 2, 'd ': 2, 'et': 1, 'te': 1, 'ip': 1, 'ke': 1, ' a': 1, 'a ': 1, 'ec': 1, 'k ': 1, ' o': 1, 'of': 1, 'f ': 1, 'kl': 1, 'le': 1, 'ep': 1, 'pp': 1, 'rs': 1})
    

    您可以像这样过滤掉带有空格的对:

    internal_pair_freq = {k: v for k, v in pair_freq.items() if ' ' not in k}
    

    当然,这也适用于单个字母:

    letter_freq = Counter(sentence)
    

    给予

    Counter({'p': 9, 'e': 8, ' ': 7, 'r': 3, 'i': 3, 'c': 3, 'k': 3, 'd': 2, 't': 1, 'a': 1, 'o': 1, 'f': 1, 'l': 1, 's': 1})
    

    【讨论】:

    • 感谢重复的简单解释。您可以简单地以上述字典以外的方式实现一个字母表。我学到了很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2012-10-24
    • 1970-01-01
    • 2019-07-09
    • 2015-07-20
    • 1970-01-01
    • 2015-01-26
    相关资源
    最近更新 更多