我有一个普鲁士报纸语料库涵盖了从1863年到1894年的年份,并希望随着时间的推移绘制使用这个词。语料库包含大约2400 xml文件,每个问题一个文件。如果我将绘制ConditionalFreqDist
,我会在x轴上得到一个包含2400个数据点的图形,这会使图形无法读取。
如何合并同一年的信息,显示搜索列表u_input
中每个单词的平均使用情况?例如:我有1863年的3个文件,寻找单词'König' - king(以及其他搜索词),第一个文件包含1个提及,第2个文件3和第3个文件2.我想要图表到只有一个数据点'1863',值为'2'。
绘图功能:
def _plot_input():
cfd = nltk.ConditionalFreqDist(
(target, fileid[:-4]) # takes first 4 characters as lable names = year
for fileid in reader.fileids() # for all files in directory
for w in reader.words(fileid) # for all words in each file
for target in u_input
if w.lower().startswith(target) # includes words like 'könliglich' if search term was 'König'
)
cfd.plot(title='Word usage over time in Prussian Newspapers')
u_input
是一个包含我正在分析的单词的列表,reader
是我的语料库阅读器对象,文件名称如此yyyy-mm-dd.xml,例如“1867-03-06.xml”。
提前致谢。
编辑: 快速解决方法是循环遍历所有文件,读取同年开始的所有文件,并将内容写入每年一个新文件中。
答案 0 :(得分:1)
要从文件名中提取年份,您必须先写fileid[:4]
,而不是fileid[:-4]
。一旦你这样做,你的 x 位置只有你的语料库中有不同的年份。这完全相当于"快速修复"你建议。
但是, y 值将是年份的总计,而不是您要求的每年内的每个文件平均值。如果这确实是您所需要的,请编辑您的问题以澄清。 (我怀疑你真正需要的是一年中单词总数的平均值;其他任何东西都是无稽之谈,除非你的所有文件大小完全相同。)