学校网站建设自查报告用模板做网站的方法
学校网站建设自查报告,用模板做网站的方法,网页传奇游戏排行榜前十名端游,域名 不做网站1. 从莎翁经典到数据洞察#xff1a;为什么用Python分析《哈姆雷特》#xff1f;
你可能读过《哈姆雷特》#xff0c;或者至少听说过那句著名的“To be, or not to be”。但你想过用代码的视角来重新审视这部文学巨著吗#xff1f;这听起来有点跨界#xff0c;但相信我?[\\]^_{|}~ for char in punctuation: raw_text raw_text.replace(char, ) # 3. 将整个文本转换为小写 # 这是关键一步确保‘The’和‘the’被算作同一个词 clean_text raw_text.lower() return clean_text我来解释一下这个函数里的几个关键点。with open(...) as f:这种写法是Python的“上下文管理器”它能确保文件在使用后被正确关闭即使中间出错了也不会导致文件被占用这是一种好习惯。encodingutf-8对应我们之前检查的编码必须一致。清洗标点时我们用空格替换而不是直接删除是为了避免把两个单词错误地粘在一起比如“world.Thus”变成“worldThus”。最后转换成小写是英文文本分析的常规操作。3.2 分词把句子拆成单词清洗后的文本是一个长长的字符串。接下来我们需要把它切割成一个一个独立的单词这个过程叫“分词”。英文分词很简单因为单词之间通常用空格隔开。我们可以直接用字符串的split()方法。# 接续上面的代码假设我们已经得到了 clean_text word_list clean_text.split() print(f文本总共包含 {len(word_list)} 个单词。) print(前20个单词是, word_list[:20])运行一下你会看到输出类似于[‘the’, ‘tragedy’, ‘of’, ‘hamlet’, ‘prince’, ‘of’, ‘denmark’, …]。这时候文本已经从一个整体变成了一个由单词组成的列表 ready for counting4. 词频统计谁才是真正的“主角”分词之后就进入了核心环节——统计每个单词出现的次数。这就像选举计票我们要找出得票数出现频率最高的那些“单词候选人”。4.1 使用字典进行计数Python的字典dict是完成这个任务的绝佳工具。我们可以把每个单词当作字典的“键”key把这个单词出现的次数当作对应的“值”value。遍历整个单词列表遇到一个词就在字典里给它的计数加1。def get_word_frequency(word_list): 统计单词列表中每个单词的出现频率。 参数 word_list: 经过清洗和分词的单词列表。 返回值: 一个字典键为单词值为出现次数。 freq_dict {} for word in word_list: # 如果字典里已经有这个单词次数加1如果没有就设置初始值为0再加1 freq_dict[word] freq_dict.get(word, 0) 1 return freq_dict # 使用函数 clean_text get_clean_text(‘hamlet.txt’) words clean_text.split() frequency get_word_frequency(words)freq_dict.get(word, 0)这个小技巧非常实用。它的意思是尝试从freq_dict字典里获取键为word的值如果这个键不存在就返回一个默认值0。这样我们就不需要用复杂的if-else来判断单词是否是第一次出现了。4.2 排序与展示TOP 30 排行榜统计完的字典是无序的。我们想知道哪些词最常出现就需要排序。Python的sorted函数配合lambda表达式可以轻松实现按值出现次数降序排列。def get_top_words(freq_dict, top_n30): 获取出现频率最高的前N个单词。 参数 freq_dict: 词频字典。 参数 top_n: 想要查看的前N个高频词默认为30。 返回值: 一个由(单词, 频率)元组组成的列表按频率从高到低排序。 # 将字典项键值对转换为列表每个元素是一个元组(word, frequency) items_list list(freq_dict.items()) # 使用sorted排序key参数指定按每个元组的第二个元素索引1即频率排序reverseTrue表示降序 sorted_items sorted(items_list, keylambda x: x[1], reverseTrue) # 返回前top_n个 return sorted_items[:top_n] # 获取并打印TOP 30 top_30_words get_top_words(frequency, 30) print(“《哈姆雷特》词频TOP 30”) print(“-” * 40) for i, (word, count) in enumerate(top_30_words, 1): print(f”{i:2}. {word:15} — 出现 {count:4} 次”)运行这段代码你就能得到一份清晰的排行榜。不出意外的话排在前列的很可能是the,and,to,of这类“停用词”。它们虽然频率极高但对理解文本内容几乎没有意义。这就引出了下一个关键步骤过滤停用词。4.3 过滤停用词让分析更有意义停用词就像语言里的“填充物” everywhere but meaningless。为了看到真正有内容价值的词我们需要把它们过滤掉。我们可以自己定义一个常见的英文停用词列表。# 一个基础的英文停用词列表 stopwords_basic {‘the’, ‘and’, ‘to’, ‘of’, ‘i’, ‘you’, ‘a’, ‘my’, ‘in’, ‘it’, ‘that’, ‘is’, ‘not’, ‘with’, ‘me’, ‘for’, ‘your’, ‘this’, ‘but’, ‘be’, ‘he’, ‘as’, ‘have’, ‘him’, ‘will’, ‘what’, ‘so’, ‘all’, ‘are’, ‘we’} def filter_stopwords(freq_dict, stopwords_set): 从词频字典中过滤掉停用词。 参数 freq_dict: 原始词频字典。 参数 stopwords_set: 停用词的集合set查找效率更高。 返回值: 过滤后的新词频字典。 filtered_dict {word: count for word, count in freq_dict.items() if word not in stopwords_set} return filtered_dict # 应用过滤 meaningful_freq filter_stopwords(frequency, stopwords_basic) top_30_meaningful get_top_words(meaningful_freq, 30) print(“\n过滤停用词后《哈姆雷特》词频TOP 30”) print(“-” * 40) for i, (word, count) in enumerate(top_30_meaningful, 1): print(f”{i:2}. {word:15} — 出现 {count:4} 次”)现在再看排行榜味道就对了你会看到hamlet,king,lord,queen,good,love,man,father,death这些真正与剧情、人物、主题紧密相关的词汇脱颖而出。这个列表才是我们生成词云图的最佳原料。5. 生成词云图让数据“绽放”为视觉艺术词频统计的列表虽然精确但不够直观。词云图能将数据转化为视觉艺术频率越高的词在图中显示得越大、越突出。我们用wordcloud库来实现这魔法般的一步。5.1 基础词云快速生成你的第一张图首先我们需要将过滤后的词频数据转换成WordCloud库能接受的格式。最简单的方式是直接传递一个“空格连接的文本字符串”给它。我们可以从过滤后的字典中根据词频重复单词构造这样一个字符串。from wordcloud import WordCloud import matplotlib.pyplot as plt def generate_wordcloud_from_freq(word_freq_dict): 根据词频字典生成词云图。 参数 word_freq_dict: 过滤停用词后的词频字典。 # 将词频字典直接传递给WordCloud这是更推荐的方法 wc WordCloud( width1200, # 图片宽度 height800, # 图片高度 background_color‘white’, # 背景色白色最常用 max_words200, # 最多显示多少个词 max_font_size150, # 最大字体大小 random_state42, # 随机种子保证每次生成的布局一致 contour_width1, # 轮廓线宽度 contour_color‘steelblue’ # 轮廓线颜色 ).generate_from_frequencies(word_freq_dict) # 关键从词频生成 # 使用matplotlib显示图片 plt.figure(figsize(15, 10)) plt.imshow(wc, interpolation‘bilinear’) # 使用双线性插值让图像更平滑 plt.axis(‘off’) # 关闭坐标轴 plt.show() # 保存图片到文件 wc.to_file(‘hamlet_wordcloud_basic.png’) print(“基础词云图已保存为 ‘hamlet_wordcloud_basic.png’”) # 调用函数 generate_wordcloud_from_freq(meaningful_freq)运行这段代码一个白底黑字、词汇大小错落有致的词云图就会弹出来。你会立刻发现“Hamlet”这个词最大其次是“king”、“lord”等。generate_from_frequencies这个方法比用原始文本生成更准确因为它直接使用了我们精心统计和过滤后的词频数据。5.2 高级定制打造专属视觉风格基础词云有点朴素我们可以玩点花样。比如使用自定义形状、配色方案或者添加中文字体支持如果你想让标题是中文。1. 使用自定义形状蒙版你需要准备一张背景透明的PNG图片比如一个莎士比亚的剪影、一个皇冠或者丹麦的地图轮廓。from PIL import Image import numpy as np # 加载形状图片并将其转换为黑白蒙版数组 mask_image np.array(Image.open(“crown_mask.png”)) # 请确保你有这个图片文件 # 检查蒙版白色部分255将显示词云黑色部分0将透明。 # 有时需要反转取决于你的图片。 # mask 255 - mask_image # 如果需要反转 wc_shaped WordCloud( width1200, height800, background_color‘white’, max_words200, maskmask_image, # 应用蒙版 contour_width2, contour_color‘gold’, colormap‘viridis’ # 使用viridis配色方案 ).generate_from_frequencies(meaningful_freq) plt.figure(figsize(15,10)) plt.imshow(wc_shaped, interpolation‘bilinear’) plt.axis(‘off’) plt.show() wc_shaped.to_file(‘hamlet_wordcloud_shaped.png’)2. 使用更丰富的配色colormap参数可以引用Matplotlib的所有配色方案如‘plasma’,‘summer’,‘wistia’。你可以多试几个找到最符合你主题感觉的。3. 处理中文标签如果你的分析报告需要用中文展示可以为词云添加中文标题或说明。这时需要确保Matplotlib能显示中文。import matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif’] [‘SimHei’, ‘Microsoft YaHei’] # 用来正常显示中文标签 plt.rcParams[‘axes.unicode_minus’] False # 用来正常显示负号 # … 生成词云的代码 … plt.figure(figsize(15,10)) plt.imshow(wc, interpolation‘bilinear’) plt.axis(‘off’) plt.title(‘《哈姆雷特》核心词汇词云图’, fontsize24, pad20) # 添加中文标题 plt.show()5.3 常见问题与调试技巧在生成词云时你可能会遇到一些小麻烦。这里分享几个我踩过的坑和解决办法问题1生成的图里全是方框□□□。原因系统没有找到指定的字体文件。解决在WordCloud参数中明确指定一个系统存在的字体路径。例如在Windows上可以尝试font_path‘C:/Windows/Fonts/simhei.ttf’黑体。更通用的方法是把字体文件.ttf放在项目文件夹里然后使用相对路径font_path‘./YourFont.ttf’。问题2词云形状不对还是长方形。原因蒙版图片没有正确加载或处理。mask参数需要的是一个二维的NumPy数组且白色255区域为有效区域。解决检查图片路径并用print(mask_image.shape)查看数组维度。确保你打开的是背景透明的PNG并且颜色模式正确。问题3有些重要的词没显示出来或者大小不符合预期。原因可能被max_words参数限制了或者停用词过滤得太狠。解决适当增加max_words比如500并复查你的停用词列表确保没有误伤“关键词”。也可以尝试调整generate_from_frequencies的max_font_size和relative_scaling参数来改变大小比例。6. 解读与拓展从词云中读出故事生成一张漂亮的词云图并不是终点而是起点。现在我们要像侦探一样从这幅“数据肖像”中解读出《哈姆雷特》的故事脉络和主题焦点。核心人物与关系毫无疑问“Hamlet”是视觉中心这印证了其主人公地位。“King”、“Lord”、“Queen”的突出立刻勾勒出故事发生的宫廷权力背景。而“Father”的出现则直接指向了全剧的核心驱动力——哈姆雷特为父复仇的主线。核心主题“Love”与“Good”的显著存在揭示了作品对人性、道德和情感的深刻探讨。而“Death”、“Dead”等词的高频出现则与剧中大量的死亡情节和哈姆雷特关于生存与毁灭的哲思完美呼应。你会发现词云图以一种惊人的直观方式复现了文学评论家们反复讨论的主题。如何超越《哈姆雷特》掌握了这套方法你就拥有了一把万能钥匙。对比分析你可以下载《麦克白》或《奥赛罗》的文本生成词云与《哈姆雷特》进行对比。看看“blood”血在《麦克白》中是否更突出“jealousy”嫉妒在《奥赛罗》中是否更显眼这种跨作品的量化比较非常有趣。分析任意文本把你正在研究的行业白皮书、某位作家的全部作品集、甚至是爬取下来的产品评论数据丢进这个流程里。你可以在预处理阶段加入更复杂的步骤比如词形还原使用nltk库的WordNetLemmatizer把“running”, “ran”, “runs”都还原为“run”让统计更精确。动态词云如果你想展示词汇随时间或章节的变化可以分别统计不同部分如每幕戏的词频生成一系列词云做成动画或并列展示这能揭示剧情重心的转移。最后我想说技术工具的价值在于为我们打开新的感知维度。这次用Python分析《哈姆雷特》与其说是一次编程练习不如说是一次“阅读实验”。它让我们看到冰冷的代码和统计也能与温热的文学经典碰撞出火花提供一种既理性又直观的理解路径。当你下次面对一份长篇报告或一堆杂乱无章的文本数据时不妨试试这个“三板斧”获取、清洗、统计、可视化。很多时候答案就藏在那张自动生成的、五彩斑斓的词云图里。