在NLTK的ConditionalFreqDist

时间:2017-02-17 09:06:57

标签: python-3.x plot nltk

我有一个普鲁士报纸语料库涵盖了从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”。

提前致谢。

编辑: 快速解决方法是循环遍历所有文件,读取同年开始的所有文件,并将内容写入每年一个新文件中。

1 个答案:

答案 0 :(得分:1)

要从文件名中提取年份,您必须先写fileid[:4],而不是fileid[:-4]。一旦你这样做,你的 x 位置只有你的语料库中有不同的年份。这完全相当于"快速修复"你建议。

但是, y 值将是年份的总计,而不是您要求的每年内的每个文件平均值。如果这确实是您所需要的,请编辑您的问题以澄清。 (我怀疑你真正需要的是一年中单词总数的平均值;其他任何东西都是无稽之谈,除非你的所有文件大小完全相同。)