我应该在语料库中计算n-gram并创建一个点图,将单词的行列及其计数显示为验证Zipf's law的练习。最终结果应该是这样的:
我使用nltk这样提取了分布(这里仅用于unigrams):
import nltk
with open(r'./1.txt', 'r') as file:
text = file.read()
file.close()
tokens = nltk.word_tokenize(text)
tokens = [token.lower() for token in tokens if len(token) > 1]
fdist = nltk.FreqDist(tokens)
ranks = fdist.most_common()
这给了我一长串所有单词的2元组列表,并且从最常见到最不重要的顺序排列。
我想知道如何从这里开始。我只需要将它绘制在一个双轴平面上。我没有安装matpotlib / numpy,也没有任何经验。但是我有Microsoft Excel,所以我想知道我是否可以以Excel可读的格式以某种方式导出这些数据并将其绘制在那里。
答案 0 :(得分:2)
以下几行将根据您使用matplotlib请求的方式绘制数据:
import matplotlib.pyplot as plt
plt.plot(range(len(ranks)), [r[1] for r in ranks], 'ro')
plt.ylim([0,12])
plt.xlim([0,10])
plt.show()
安装matplotlib很简单。有关您的操作系统的说明,请参阅此处:http://matplotlib.org/users/installing.html
答案 1 :(得分:1)
如果您要使用python进行绘图,请安装matplotlib。将您的数据分为两个向量x
和y
。相应的条目是x
和y
值。
然后只需做
import pylab
pylab.plot(x, y, '.')
pylab.savefig('myfilename.pdf')
'。'告诉它绘制点。
您可以保存.pdf以外的大量格式要以其他格式保存,只需将.pdf扩展名更改为您想要的格式。如果它是可接受的格式,它就会这样做。
答案 2 :(得分:1)
您可以创建Excel scatter plot using XlsxWriter: