同步操作将从 编程语言算法集/Python 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#!/usr/bin/env python3"""Implementation of entropy of informationhttps://en.wikipedia.org/wiki/Entropy_(information_theory)"""from __future__ import annotationsimport mathfrom collections import Counterfrom string import ascii_lowercasedef calculate_prob(text: str) -> None:"""This method takes path and two dict as argumentand than calculates entropy of them.:param dict::param dict::return: Prints1) Entropy of information based on 1 alphabet2) Entropy of information based on couples of 2 alphabet3) print Entropy of H(X n∣Xn−1)Text from random books. Also, random quotes.>>> text = ("Behind Winston’s back the voice "... "from the telescreen was still "... "babbling and the overfulfilment")>>> calculate_prob(text)4.06.02.0>>> text = ("The Ministry of Truth—Minitrue, in Newspeak [Newspeak was the official"... "face in elegant lettering, the three")>>> calculate_prob(text)4.05.01.0>>> text = ("Had repulsive dashwoods suspicion sincerity but advantage now him. "... "Remark easily garret nor nay. Civil those mrs enjoy shy fat merry. "... "You greatest jointure saw horrible. He private he on be imagine "... "suppose. Fertile beloved evident through no service elderly is. Blind "... "there if every no so at. Own neglected you preferred way sincerity "... "delivered his attempted. To of message cottage windows do besides "... "against uncivil. Delightful unreserved impossible few estimating "... "men favourable see entreaties. She propriety immediate was improving. "... "He or entrance humoured likewise moderate. Much nor game son say "... "feel. Fat make met can must form into gate. Me we offending prevailed "... "discovery.")>>> calculate_prob(text)4.07.03.0"""single_char_strings, two_char_strings = analyze_text(text)my_alphas = list(" " + ascii_lowercase)# what is our total sum of probabilities.all_sum = sum(single_char_strings.values())# one length stringmy_fir_sum = 0# for each alpha we go in our dict and if it is in it we calculate entropyfor ch in my_alphas:if ch in single_char_strings:my_str = single_char_strings[ch]prob = my_str / all_summy_fir_sum += prob * math.log2(prob) # entropy formula.# print entropyprint(f"{round(-1 * my_fir_sum):.1f}")# two len stringall_sum = sum(two_char_strings.values())my_sec_sum = 0# for each alpha (two in size) calculate entropy.for ch0 in my_alphas:for ch1 in my_alphas:sequence = ch0 + ch1if sequence in two_char_strings:my_str = two_char_strings[sequence]prob = int(my_str) / all_summy_sec_sum += prob * math.log2(prob)# print second entropyprint(f"{round(-1 * my_sec_sum):.1f}")# print the difference between themprint(f"{round((-1 * my_sec_sum) - (-1 * my_fir_sum)):.1f}")def analyze_text(text: str) -> tuple[dict, dict]:"""Convert text input into two dicts of counts.The first dictionary stores the frequency of single character strings.The second dictionary stores the frequency of two character strings."""single_char_strings = Counter() # type: ignoretwo_char_strings = Counter() # type: ignoresingle_char_strings[text[-1]] += 1# first case when we have space at start.two_char_strings[" " + text[0]] += 1for i in range(0, len(text) - 1):single_char_strings[text[i]] += 1two_char_strings[text[i : i + 2]] += 1return single_char_strings, two_char_stringsdef main():import doctestdoctest.testmod()# text = (# "Had repulsive dashwoods suspicion sincerity but advantage now him. Remark "# "easily garret nor nay. Civil those mrs enjoy shy fat merry. You greatest "# "jointure saw horrible. He private he on be imagine suppose. Fertile "# "beloved evident through no service elderly is. Blind there if every no so "# "at. Own neglected you preferred way sincerity delivered his attempted. To "# "of message cottage windows do besides against uncivil. Delightful "# "unreserved impossible few estimating men favourable see entreaties. She "# "propriety immediate was improving. He or entrance humoured likewise "# "moderate. Much nor game son say feel. Fat make met can must form into "# "gate. Me we offending prevailed discovery. "# )# calculate_prob(text)if __name__ == "__main__":main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。