- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
齐普夫定律是许多现实生活中的一种模式,齐普夫定律最常见的情况是在文本段落中,其中最常用的单词的数量是第二个最常用单词的两倍。
我一直在学习 Python 中的字典,并尝试自己做这件事,但对它们的一些方面感到困惑。
第一步应该首先从字符串中删除标点符号(这是为了防止下一步出现“to”或“said-”等单词),然后将 .split
转换为列表。然后,创建一个字典,其中键是单词,值是它们的出现次数,这可以使用 for
循环来完成。然后,我怀疑最困难的部分可能是按降序打印所有键和值。
如果不是完整的代码,您能告诉我如何完成每一步,以便我可以自己完成吗?谢谢你!
import operator, pprint
punctuater = ['`','~','!','@','#','$','%','*','(',')','-', \
'_','+','=','[','\]','{','}','|','\\','\"','\'', \
':',';','<',',','>','.','/','?','^','&']
numbers = [1,2,3,4,5,6,7,8,9,0]
def convertForZipf(string):
string = (string.lower())
for i in punctuater:
if i in string:
string = string.replace(i, '')
return string.split()
text = 'Lorem Ipsum Ipsum Ipsum Meow h h h h h n n n n n dolor dolor'
words = convertForZipf(text)
wordsRanked = {}
for i in words:
wordsRanked.setdefault(i, 0)
wordsRanked[i] += 1
wordsRanked = (str((sorted(wordsRanked.items(), key=operator.itemgetter(1), reverse=True))))
for i in wordsRanked:
try:
int(i)
wordsRanked = wordsRanked.replace(str(i), str(i)+'\n')
except ValueError:
pass
print((wordsRanked.replace('[','')
.replace('(','')
.replace(')','')
.replace(']','')
.replace(',',' : ')))
在正式完成这个项目之前,我只需要最后一件事的帮助,我在输出显示方面遇到问题,我的代码高度不一致,并且我愿意接受建议。
最佳答案
这应该符合您的标准 - 我不确定您在代码末尾的 for 循环做了什么 - 您是否试图替换数字?如果是这样,您可以更改我使用的正则表达式模式。
import re
from collections import OrderedDict
pattern = re.compile('[\W_]+')
def convertForZipf(string):
string = string.lower()
pattern.sub('', string)
return string.split()
text = 'Lorem Ipsum Ipsum Ipsum Meow h h h h h n n n n n dolor dolor'
words = convertForZipf(text)
wordsRanked = {}
for i in words:
if i not in wordsRanked:
wordsRanked[i] = 1
else:
wordsRanked[i] += 1
wordsRanked = OrderedDict(sorted(wordsRanked.items(), key=lambda t: t[1], reverse=True))
for k, v in wordsRanked.items():
print(f"{k} appears {v} times.")
输出:
h appears 5 times.
n appears 5 times.
ipsum appears 3 times.
dolor appears 2 times.
lorem appears 1 times.
meow appears 1 times.
关于python - 如何制作一个 Python 程序来演示 Zipf 定律?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58933614/
如何测量或找到 Zipf 分布?例如,我有一个英语单词语料库。我如何找到 Zipf 分布?我需要找到 Zipf 分布,然后绘制它的图形。但我卡在了第一步,即找到 Zipf 分布。 编辑:从每个单词的频
我有一个大约 700 行的文件(比如说 corpus.txt),每行包含由 - 分隔的数字。例如: 86-55-267-99-121-72-336-89-211 59-127-245-343-75-2
我想为一个小数据集生成一个流行度分布,它应该遵循 Zipf法律。 可用参数有: 观众总数:100万 视频总数:36 我想根据 Zipf 将观众总数与每个视频相关联法律。例如,有多少观众会观看视频 1、
我正在寻找构造一个返回随机元素但基于 Zipf 分布曲线的 JavaScript 函数: https://en.wikipedia.org/wiki/Zipf%27s_law 我看过这个: http:
对于家庭作业,我必须绘制文本的词频并将其与最佳 zipf 分布进行比较。 根据对数对数图中的排名绘制文本的词频计数似乎效果很好。 但是我在计算最佳 zipf 分布时遇到了麻烦。结果应该如下所示: 我不
我需要一个自定义的类似 Zipf 的数字生成器,因为 numpy.random.zipf 函数不能满足我的需要。首先,它的 alpha 必须大于 1.0 而我需要 0.5 的 alpha。其次,它的基
我想从有界域的“zipf”分布中采样。 也就是说,假设域是 {1,...,N},我希望域 i 中的每个元素都以与 i ** -a 成比例的概率被选中。 , 其中a是分布的一个参数。 numpy提供了一
来自docs The probability mass function for zipf is: zipf.pmf(k, a) = 1/(zeta(a) * k**a)for k >= 1. zip
我尝试将下面的图(红点)与 Python 中的 Zipf 分布 PDF 拟合,F~x^(-a)。我只是选择了a=0.56并绘制了y = x^(-0.56),我得到了如下所示的曲线。 曲线显然是错误的。
我有一个给定的价格范围,并且我使用随机制服来从中获得随机生成的随机结果。我如何引入 np.random.zipf 来执行相同的操作? 我尝试了以下方法: a = np.random.zipf((ran
齐普夫定律是许多现实生活中的一种模式,齐普夫定律最常见的情况是在文本段落中,其中最常用的单词的数量是第二个最常用单词的两倍。 我一直在学习 Python 中的字典,并尝试自己做这件事,但对它们的一些方
嘿,我正在开发一个文本生成器,它应该可以生成数百万种不同的文本。为了使每篇文章的内容更真实,我使用了 Zipf 定律它运行良好,单词分布正确。 但是下面的 next() 函数执行得非常慢,因为我想生成
我有一个段落列表,我想在它们的组合上运行 zipf 分发。 我的代码如下: from itertools import * from pylab import * from collections i
我是一名优秀的程序员,十分优秀!