• 2022年认证杯SPSSPRO杯数学建模B题(第二阶段)唐宋诗的定量分析与比较研究求解全过程文档及程序


    2022年认证杯SPSSPRO杯数学建模

    B题 唐宋诗的定量分析与比较研究

    原题再现:

      唐诗和宋诗在文学风格上有较为明显的区别,这一点在古代文学研究中早有定论。所以唐诗和宋诗有时甚至会直接指代两类不同的诗作风格。历史学家缪钺在《论宋诗》一文中说:“唐诗以韵胜,故浑雅,而贵蕴藉空灵;宋诗以意胜,故精能,而贵深折透辟。唐诗之美在情辞,故丰腴;宋诗之美在气骨,故瘦劲。唐诗如芍药海棠,秾华繁采;宋诗如寒梅秋菊,幽韵冷香。……譬诸游山水,唐诗则如高峰远望,意气浩然;宋诗则如曲漳寻幽,情境冷峭。唐诗之弊为肤廓平滑,宋诗之弊为生涩枯淡。虽唐诗之中,亦有下开宋诗派者,宋诗之中,亦有酷肖唐人者;然论其大较,固如此矣。”在钱钟书的《谈艺录》中也谈到“诗分唐宋”的问题:“唐诗、宋诗,亦非仅朝代之别,乃体格性分之殊。天下有两种人,斯分两种诗。唐诗多以丰神情韵擅长,宋诗多以筋骨思理见胜。严仪卿首倡断代言诗,《沧浪诗话》即谓‘本朝人尚理,唐人尚意兴’云云。曰唐曰宋,特举大概而言,为称谓之便,非曰唐诗必出唐人,宋诗必出宋人也。故唐之少陵、昌黎、香山、东野,实唐人之开宋调者;宋之柯山、白石、九僧、四灵,则宋人之有唐音者。”他们的观点都认为唐诗和宋诗并非只有年代上的区分,而且在文学风格上也代表着完全不同的类型,甚至有个别唐朝诗人的诗作是宋诗的风格,而个别宋朝诗人的诗作更接近唐诗。
      我们试图使用定量分析的手段来研究唐宋诗之差异。附件中包含了《全唐诗》收录的 5 万余首诗,《全宋诗》收录的约 26 万首诗。为了研究唐诗与宋诗在风格上的差异,请你建立合理的数学模型,研究如下问题:
      第二阶段问题:
      1. 我们按照前人的文论观点,将唐诗和宋诗视为两种主要出现在唐朝和宋朝诗作中的典型风格。我们假设一个诗人的主要风格一定会归属于两者之一。请建立合适的数学模型,通过一个诗人的若干首作品(没有其他信息),来确定此人的风格归属。请说明你的模型的合理性和有效程度。
      2. 请建立合理的数学模型,研究唐诗和宋诗的风格是否可以进一步详细划分为子类,请确切说明每个子类的划分依据。
      3. 请为每种风格子类选择出若干最有代表性的诗作和诗人(暂不讨论文学成就的高低)。

    整体求解过程概述(摘要)

      唐诗和宋词是我国古代文化艺术的结晶,在汉语语言中占据着重要地位。它们处于不同的时代,诞生于不同的文化环境当中,唐诗和宋词之间必然会存在差异。并且诗人的风格也会有自己的独特的风格,但总体来说会和诗人所在的朝代有着较为相近的风格。本文主要建立合理的数学模型和确定合适的指标对不同的诗人的风格经行分析,以及对唐诗宋词的风格进行进一步的规划。
      在问题一中,我们通过 jeba 算法对所给的文章中的常见字(词)进行了获取排序,同时将获取后字词的频率进行了归一化。经过一系列的处理后,我们计算出字(词)的突变率从而得出了唐诗和宋词的高频词,中频词和低频词,再取出频数较高的字(词)作为核心词。之后,我们建立了 Topsis 综合评价模型来对唐诗宋词的诗人风格进行区分,首先对指标的正向化处理,我们将唐诗风格为正向化目标,如果该诗得分越高就越可能是唐诗。接着我们将评价得分作为指标进行 0-1 逻辑回归以此对诗人的风格进行分类。为防止过度拟合的问题,我们将数据分为训练组和实验组,以增强模型的稳健性。
      问题二中,我们分别针对唐诗和宋词制定新指标。唐诗主要由可分为大致 3 类,乐府诗、古体诗、近代诗。乐府诗的标题和内容产含有“曲、辞、歌、行、调”这些特征词,且对仗工整,朗朗上口;而近体诗格律十分严格,诗词每句的字数大都相等;而古体诗就比较复杂,它的诗作没有固定的风格,而且不拘于形式,比较随意。而宋词从长度可以分为小令,中调和长调,而从感情上可分为花间派和豪放派。基于以上的特点,我们可以制定相应的指标来反应诗词的特征。因为异常数据的影响,而且数据呈现簇状分布,所以我们最终采用了 DBSCAN 聚类算法进行聚类,然后划分子类。
      对于问题三,因为我们用聚类模型划分了唐诗和宋词的子类,所以我们可以更据聚类中心的样本作为最具有代表性的子类作品,然而 DBSCAN 聚类是比较特殊的聚类方法,并没有确定的聚类中心,我们借鉴其他聚类方法聚类中心的确定,利用距离来寻找聚类中心。即当距离最小时,样本越具有代表性。最终我们确定了每一个子类的最具代表性的作品和作者。

    模型假设:

      1. 一个诗人风格是固定,不会受到任何事情对作词风格的影响。
      2. 宋朝中大部分诗人的作词风格属于宋词,唐朝中大部分诗人的作词风格属于唐诗。
      3. 当风格不一样的相同字词的频数相差过大时,则认为频数大的字是该风格的特有核心字词
      4. 诗词特别长的标题,特别短的内容为异常数据

    问题分析

      问题一要求我们构建合适的数学模型,以诗人的作品为依据,对唐宋两代的诗人的风格进行分类。首先题干明确唐诗和宋词分别为两种不同的风格,为能够准确描述两者的差异,我们需要一些指标来反映诗人的诗作风格以及偏向唐诗或者宋词的程度。每个朝代朝代因为人文、政治、经济等多方面的原因,会产生意象,情感,格式的不同,而诗词字词频率就会产生差异。所以我们对每个诗人以字词的频数此为指标,构建一个评价系统,来反映诗人的诗作风格以及偏向唐诗或者宋词的程度。由于样本数量巨大,我们以统计的方法为首要方法分别统计唐诗和宋词常见字词的频数。为筛选出核心常见字词,我们对非核心常见字词进行排除。之后根据核心常见字词建立核心指标;用数学方法 Topsis 综合评价,以每个诗人为样本进行评价。然后运用二元逻辑回归等分类模型进行分类。为提高模型的有效性以及检测模型受否存在过度拟合问题,对评价结果进行处理,将评价结果分为实验组和测试组。运用模型预测实验组的类型再与其真实结果进行对比,若结果比较理想则认为数学模型比较有效。
      问题二要求我们建立合理的数学模型,去研究唐诗和宋词的风格能否可以进一步详细的划分为子类,并且确切说明每个子类的划分标准。经过观察后以及资料的查找,发现唐诗和宋词在题目的名称,工整度,内容字数存在明显的,例如白居易的《长恨歌》大约有 840 字,而宋词里字数最多的一首是汪元量的《莺啼序》只有 240 字。对于工整度,宋词的句子常常使用长短交错,变化多端的句子,而唐诗则恢宏大气,句子工整,每句话的字数相同的较多。所以我们使用工整度,题目名称,内容字数作为指标去建立相关的数学模型。用聚类算法去求解。
      问题三要求我们为每种风格子类选择出若干最有代表性的诗作和诗人。我们用聚类模型划分了唐诗和宋词的子类,所以我们可以更据聚类中心的样本作为最具有代表性的子类作品,然而 DBSCAN 聚类是比较特殊的聚类方法,并没有确定的聚类中心,我们借鉴其他聚类方法聚类中心的确定,利用距离来寻找聚类中心。即当距离最小时,样本越具有代表性。

    模型的建立与求解

    确定诗人的风格归属

      为获得常见字词的频数,我们利用 Python 的 jeba 库对所有的诗词的字词进行统计。字词的重要性随着它在诗词中出现的次数成正比增大[1]。若某一常见字词在一篇诗词作品出现频数显著异于其他诗词,则可以通过频数将不同诗词分辨出来。
      统计分析字词的频数并排序,我们一共需要分析研究 4 部分数据。即唐诗常用词、唐诗常用字、宋词常用词、宋词常用字。分别抓取相应的数据进行研究,最后获得核心常见词。
      首先对对唐诗常见词进行统计分析,对于频数太低的字词我们直接排除,我们成功抓取 1694 条唐诗常见词。在这里我们用序号代替常见字词,序号越小,频数越大。如图 1 为唐诗库中的常见词的肘部图。由图 2 可知。唐诗常见词在序号为 100 左右时发生突变。这是因为突变前的常见词的频数显著大于突变后的,突变程度为 3.19%。
    在这里插入图片描述
      为明确序号前 100 的词频发生突变,我们继续绘制图 3;由图可以显然发现在序号10 左右发生明显突变。突变程度为 7.38%。为了细致研究高频唐诗词的分布情况,我们继续绘制序号前 25 的频数图,见图 3。图 3 在序号 2、5、22 分别发生突变,突变程度分别为 19.8%,5.03%,2.72%。
    在这里插入图片描述
      为了明确准确的明确的突变条件和唐诗高频词的重复程度,我们依次绘制总体序号频数图、序号前 100 频数图、序号前 25 频数图,借助突变点,我们成功把唐诗常见词分成了 3 大类:高频词(序号前 25),中频词(序号 25-100),低频词(序号后 100)。由于我们抓取的唐诗常见词指标过多,在这里我们仅保留核心关键词。借助图 3,我们决定以靠近序号 25 的突变点 22 截至,抽取序号前 22 为唐诗常见词的核心指标。为了更直观理解唐诗序号前 22 的核心常见词的频数,我们绘制图 4。
    在这里插入图片描述
      通过图 4 我们发现序号为 22 的“平生”的频数为 621,由此可见保留的核心关键词频数大,有很强的代表性。接下来统计分析宋词常见词、宋词常见字、唐诗常见字。因为通过前面的唐诗核心词的分析研究,我们发现核心字词的范围在 1至25 左右,所以在接下的绘图频数范围控制在 1~25 左右。将宋词常见词、宋词常见字、唐诗常见字的序号前 25 左右的频数绘制在图 5、图 6、图 7 上。
    在这里插入图片描述

      通过图 7 可知,宋词常见词频数图在序号 2、7、24 发生突变,突变率分别为 14.32%、10.63%、2.32%,为了保证指标的数量我们选择序号前 24。唐诗常见字频数图在 2、5、9、22 发生突变,突变率分别为 35.64%、1.39%、14.11%、6.74%;宋词常见字频数图分别在 2、5、16、24 发生较大突变,突变率分别为 46.70%、10.55%、3.01%、5.25%。为了。因为指标的数量不一致,而且上述 3 表序号 24 的数量的最小值的频数为 2725。这说明序号 24 的频数也能准确反映诗词的风格。所以将宋词常见词、宋词常见字、唐诗常见字的序号保留至 24。接着对保留的关键词进行描述性统计,具体结果见表 1。
    在这里插入图片描述
      接下来,分别对唐诗、宋词常见词,唐诗、宋词常见字进行对比。保留不同的指标,筛去相同的指标。这是因为,不同的指标的能能够反映诗词的风格,保留的指标及频数表 2,3。

    在这里插入图片描述
      用表一,表二的指标检索唐诗宋词的诗人的引用指标频数。在这里我们运用 Topsis综合评价模型来根据指标的数据的差异,经过数据处理,并得出总分,然后根据总分对诗人的风格进行评价,具体流程如图 8 所示。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
      我们利用 Topsis 数学方法得出一组可以反应出诗人诗词风格的得分,我们利用其得分作为一项指标,然后利用分类模型进行分类。因为分类的结果只有两种,而且我们拥有大量的样本。所以我们尝试先用 0-1 逻辑回归进行分类。回归值落在区间[0,1]上,我们创建样本是否为唐诗这一项为虚拟变量。在这里我们规定回归越靠近 1 是唐诗的可能性越大;反之,越靠近 0 则是宋词的可能性越大。为了更加准确分辨唐诗和宋词。我们制定一个分辨标准,见公式 8。
    在这里插入图片描述
      结合公式 9,我们就能对样本进行分类。为了测试模型的准确性和有效性。我们把节选 600 份样本随机分成两份。一份为实验组,一份为测试组,经过计算,测试组的预测结果见表 6。
    在这里插入图片描述
      在测试组中,宋词的正确率达到 89.7%,唐诗的正确率为 48.8%,总体正确率为 69.2%,结果不是太好。接着我们测试了实验组的预测情况。选取 15 个样本为测试组进行预测。预测结果见表 7。

    在这里插入图片描述
      预测成功的概率为 93.3%,没有出项过度拟合的现象。又因为预测成功的概率只有69.2%。为提高预测的准确性,我们决定增加交互项以来提高预测成功率。因为得分偏小,交互项选用在原得分的基础上选取算术平方根。在此基础我们进行回归。得出回归的公式,见公式 10。

    在这里插入图片描述
    在这里插入图片描述
      为防止过拟合的现象出现,我们将原始数据随机分为两组,分别是训练组和实验组。我们用训练组的数据来调试回归方程,用实验组的数据来测试模型有效程度。实验组结果见表 10。预测的成功率为 70%。过拟合现象较轻。

    在这里插入图片描述
      首先我们需要随机选取一个样本作为第一个聚类中心;然后再计算每个样本与当前已有聚类中心的最短距离。若这个值越大,则表示被选取作为聚类中心的概率较大;最后,用轮盘法(依据概率大小来进行抽选)选出下一个聚类中心。重复上述的步骤直到所有聚类中心被选出来。用 SPSS 操作,我们得到了聚类后的结果,部分结果见表 11。由表中数据可知,聚类的效果符合我们的预期,即大部分唐朝诗人被聚类为唐朝诗人
    在这里插入图片描述
      结果表示在总体数据前 15.33%中,正确率达到 90.21%。这说明我们选取的指标,在较大程度能够体现不同诗人的风格。这说明能够比较常见字词频的差异来区分不同诗人的风格。

      唐诗和宋词都是世界文化的瑰宝。唐诗主要由可分为大致 3 类,乐府诗、古体诗、近代诗。乐府诗的标题和内容产含有“曲、辞、歌、行、调”这些特征词,且对仗工整,朗朗上口;而近体诗格律十分严格,诗词每句的字数大都相等;而古体诗就比较复杂,它的诗作没有固定的风格,而且不拘于形式,比较随意。而宋词从长度可以分为小令,中调和长调,而从感情上可分为花间派和豪放派。基于以上的特点,我们可以制定相应的指标来反应诗词的特征。详细分类可见图 10。

    在这里插入图片描述
      宋词从长度可以分为小令,中调和长调,而从感情上可分为花间派和豪放派,而且花间派通常使用词牌名比较长。基于以上的特点我们搭建了两个指标。分别为内容的长度,标题的长度。然后利用这两个指标进行聚类。首先利用 K-means++进行聚类。详细过程见图 11。
    在这里插入图片描述
      首先我们需要随机选取一个样本作为第一个聚类中心;然后再计算每个样本与当前已有聚类中心的最短距离。若这个值越大,则表示被选取作为聚类中心的概率较大;最后,用轮盘法(依据概率大小来进行抽选)选出下一个聚类中心。重复上述的步骤直到所有聚类中心被选出来。聚类效果如表 12,结果表示,效果很不明显。在 K 值不断增加效果不明显。我们决定使用层次聚类模型。
    在这里插入图片描述
    在这里插入图片描述
      聚类的效果和 K-meas++聚类效果一致,聚类的效果都不好。这时我们猜想,数据可能存在异常数据,而且我们设定的指标二维指标,可能数据在空间中是一簇一簇分布的。我们决定使用 DBSACN 聚类方法。DBSCAN(Density-based spatial clustering of applications with noise)是 Martin Ester, Hans-PeterKriegel 等人于 1996 年提出 的一种基于密度的聚类方法,聚类前不需要预先指定聚类的 个数,生成的簇的个数不定(和数据有关)。该算法利用基 于密度的聚类的概念,即要求聚类空间中的一定区域内所包 含对象(点或其他空间对象)的数目不小于某一给定阈值。 该方法能在具有噪声的空间数据库中发现任意形状的簇,可 将密度足够大的相邻区域连接,能有效处理异常数据。所以这个方法比较适合处理当前聚类问题。根据 DBSAND 聚类方法在邻域为 6,最小点为 5的情况下我们得到 4 组分类。聚类效果图,见图 14。

    在这里插入图片描述
      通过 DBSCAN 聚类,我们发现了 8 个异常数据,这也解释了为什么 K-meas++,与层次聚类的效果不理想的原因了。这是因为异常数据的影响。最终我们将宋词划分为 4 个子类。

      唐诗分类有三类,分别为乐府诗、古体诗、近代诗。乐府诗的标题和内容产含有“曲、辞、歌、行、调”这些特征词,而且乐府诗、近代诗都有严格的形式。所以我们定义了3 个指标,分别为工整度,特征词,诗词内容三个指标。我们定义工整度为公式 11。
    在这里插入图片描述
    在这里插入图片描述
      因为我们利用聚类的方法进行分类,而处在相应类别中的中间位置是聚类的中心点,此点代表的诗词为当前分类最具代表性诗词和作者。我们利用公式 12 来计算样本的距离,距离越小越具有代表性。

    在这里插入图片描述

    论文缩略图:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    程序代码:

    import csv
    import os
    from openccpy.opencc import Opencc
    import jieba
    import jieba.analyse
    import json
    import matplotlib.pyplot as plt
    from matplotlib import colors
    ls = []
    
    ls1 = []
    word = []
    counts = []
    sword = []
    scount = []
    t_author = []
    s = []
    t = []
    list3 = []
    def sfile_name(file_dir):
     L = []
     for root, dirs, files in os.walk(file_dir):
     for file in files:
     if os.path.splitext(file)[1] == '.json' and 'poet.song' in os.path.splitext(file)[0]:
     L.append(os.path.join(root, file))
     return L
    def tfile_name(file_dir):
     L = []
     for root, dirs, files in os.walk(file_dir):
     for file in files:
     if os.path.splitext(file)[1] == '.json' and 'poet.tang' in os.path.splitext(file)[0]:
     L.append(os.path.join(root, file))
     return L
    def sfile():
     file_name1 = [text for text in sfile_name("D:\\B 题附件")]
     return file_name1
    def tfile():
     file_name1 = [text for text in tfile_name("D:\\B 题附件")]
     return file_name1
    def countword(datafile):
     txt = open(datafile, 'r', encoding='utf-8').read()
     words = jieba.lcut(txt)
     counts1 = {}
     for word0 in words:
     """if len(word0) == 1:
     continue
     else:"""
     counts1[word0] = counts1.get(word0,0) + 1
     items = list(counts1.items())
     items.sort(key = lambda x:x[1], reverse = True)
     for i in range(len(items)):
     word1, count1 = items[i]
     if word1 not in ['。', ',', '《', '》', '(', ')', '「', '」', '、', ':', '?', '『', '』', '[', ']', 
    '〖', '〗', '□']:
     word.append(word1)
     counts.append(count1)
     return items
    def scountword(datafile):
     txt = open(datafile, 'r', encoding='utf-8').read()
     words = jieba.lcut(txt)
     counts1 = {}
     for word0 in words:
     """if len(word0) == 1:
     continue
     else:"""
     counts1[word0] = counts1.get(word0, 0) + 1
     items = list(counts1.items())
     items.sort(key = lambda x:x[1], reverse = True)
     for i in range(len(items)):
     word1, count1 = items[i]
     if word1 not in ['。', ',', '《', '》', '(', ')', '「', '」', '、', ':', '?', '『', '』', '[', ']', 
    '〖', '〗', '□']:
     sword.append(word1)
     scount.append(count1)
     return items
    def writedata(paragraphs):
     data_file = "D:\Cache.txt"
     with open(data_file, 'a', encoding='utf-8') as fp:
     for i in paragraphs:
     fp.write(i)
     fp.close()
    def swritedata(paragraphs):
     data_file = "D:\Cache1.txt"
     with open(data_file, 'a', encoding='utf-8') as fp:
     for i in paragraphs:
     fp.write(i)
     fp.close()
    def readdata():
     data_file = "D:\Cache.txt"
     text = ""
     with open(data_file, 'r', encoding='utf-8') as fp:
     for line in fp.readlines():
     text += line
     fp.close()
     return text
    def writetang():
     file_name1 = tfile()
     list2 = []
     for i in range(len(file_name1)):
     with open(file_name1[i], 'r', encoding='utf-8') as f:
     list2 = json.load(f)
     for j in range(len(list2)):
     for key, value in list2[j].items():
     if key == "paragraphs":
     writedata(value)
     break
     else:
     continue
     return "写入成功"
    def writesong():
     file_name1 = sfile()
     list2 = []
     for i in range(len(file_name1)):
     with open(file_name1[i], 'r', encoding='utf-8') as f:
     list2 = json.load(f)
     for j in range(len(list2)):
     for key, value in list2[j].items():
     if key == "paragraphs":
     swritedata(value)
     break
     else:
     continue
     return "写入成功"
    def cleantxt():
     data_file = "D:\Cache.txt"
     with open(data_file, 'a') as fp:
     fp.truncate(0)
     fp.close()
    #确定关键词的频数以 word 和 count 两个列表保存
    def indextang():
     return countword("D:\Cache.txt")
    def indexsong():
     return scountword("D:\Cache1.txt")
    def cleanmin(word,count):
     i = count.index(3)
     j = len(count)
     del word[i:j]
     del count[i:j]
    #热词引用次数分类,建立词库
    def sort1(word, count):
     word1 = word
     s = set(count)
     word1 = []
     ls = []
     count1 = list(s)
     for i in count1:
     for j in range(len(count)):
     if count[j] == i:
     word1.append(word[j])
     else:
     continue
     ls.append([i, word1])
     return ls
    def fcount(count2):
     a = []
     x = []
     y = []
     flag = 1
     key = count2[-1]
     for i in count2:
     if i != key:
     a.append((key, flag))
     flag = 1
     key = i
     else:
     flag += 1
     a = dict(a)
     a = sorted(a.items(), key=lambda x: x[1], reverse=True)
     for i in range(len(a)):
     key, value = a[i]
     x.append(key)
     y.append(value)
     return x, y, a
    #def draw(word,counts):
    def readwr():
     sname_file = "D:\B 题附件\\authors.tang.json"
     with open(sname_file,'rb') as f1:
     list1 = json.load(f1)
     i = 0
     try:
     while True:
     for x, y in list1[i].items():
     if (x == 'name'):
     t_author.append(y)
     i += 1
     except IndexError:
     print("宋词作者读取成功")
     f1.close()
    def tf(author,ls):
     keywords = []
     flag = 0
     for j in range(flag, len(list3)):
     for key, value in list3[j].items():
     if value == author:
     for key, value in list3[j].items():
     if key == "paragraphs":
     writedata(value)
    break
     else:
     continue
     else:
     break
     text = readdata()
     keywords = anl(author, text, ls)
     cleantxt()
     print(keywords)
     return keywords
    def anl(author,text,ls):
     flag = 0
     ls1 = [author]
     for i in range(len(ls)):
     for j in range(len(ls[1])):
     if ls[1][j] in text:
     flag += 1
     else:
     continue
     ls1.append(flag)
     return ls1
    def writetotext(s,t):
     sname_file = "D:\B 题附件\\song.txt"
     tname_file = "D:\B 题附件\\tang.txt"
     with open(sname_file, 'w', encoding='utf-8') as f1:
     for line in s:
     str1 = str(line)+'\n'
     f1.write(str1)
     with open(tname_file, 'w', encoding='utf-8') as f1:
     for line in t:
     str1 = str(line)+'\n'
     f1.write(str1)
    def writetocsv(word,count):
     f = open('文件名.csv', 'w', encoding='utf-8')
     csv_writer = csv.writer(f)
     csv_writer.writerow(word)
     csv_writer.writerow(count)
     f.close()
    def draw(y,y1):
     x = []
     for i in range(len(y)):
     x.append(i+1)
     plt.figure()
     plt.plot(x, y)
     plt.figure()
     plt.plot(x,y1)
     plt.show()
    #writesong()
    t = indextang()
    s = indexsong()
    cleanmin(word, counts)
    cleanmin(sword, scount)
    x, y, a = fcount(counts)
    sx, sy, sa = fcount(scount)
    word10 = word[0:100]
    counts10 = counts[0:100]
    sword10 = sword[0:100]
    scount10 = scount[0:100]
    draw(scount10,counts10)
    a1 = list(zip(word10, counts10))
    a2 = list(zip(sword10, scount10))
    ls = sort1(word, counts)
    ls10 = sort1(sword, scount)
    writetotext(a2,a1)
    #writetocsv(word, counts)
    """kw1 = []
    list3 = []
    file_name2 = [path for path in tfile_name("D:\\B 题附件")]
    for i in range(0, len(file_name2)):
     with open(file_name2[i], 'rb') as f2:
     list3 +=json.load(f2)
    for i in range(len(t_author)):
     kw1.append(tf(t_author[i]))
    print(kw1)"""
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
  • 相关阅读:
    【设计模式】装饰者模式
    spring源码干货分享-对象创建详细解析(set注入和初始化)
    19 css 选择器用类名、节点名、id来获取节点内容
    10 Deployment:让应用永不宕机
    【博弈论】基础知识
    java计算机毕业设计社区人员管理系统源码+系统+mysql数据库+lw文档+部署
    使用Caffeine实现帖子的缓存来优化网站的运行速度
    PTA: 字符串的模式匹配
    Halo-Theme-Hao文档:如何设置导航栏?
    DDR4硬件原理图设计详解
  • 原文地址:https://blog.csdn.net/weixin_43292788/article/details/127846828