函子蛋糕 2023-01-15 22:43 采纳率: 80.6%
浏览 25
已结题

如何用python写简化版电子诗人?

语言:python(不用库,或者仅用jieba库)
任务:
现有一个《李太白文集》的txt外置文件。
请将其的所有字分成单个字(比如把“云想浮生花想荣”分成云、想、浮、生、花、想、荣)。
可以得到出现频次最高的top100排行榜和出现次数。
可以查询单个字的出现次数。
然后设计一个五言绝句和七言绝句的格式,用标点分隔。
然后让它随机往中间填字,允许单字重复出现,得到诗句。

即 查询词频 和 随机生成诗句 两个功能。

要求:代码量越少、越初级越好。.如果水平太高,请写详细的注释。

  • 写回答

1条回答 默认 最新

  • ShowMeAI 2023-01-15 23:50
    关注

    完整代码实现如下:

    import re
    from collections import Counter
    import random
    
    def read_poem_file(file_path):
        """读取文件中的诗句,并将其转换为一个字符串"""
        with open(file_path, "r") as f:
            poem = f.read()
        return poem
    
    def split_poem_to_words(poem):
        """将诗句分割为单个字"""
        # 使用正则表达式将非中文字符删除
        poem = re.sub(r"[^\u4e00-\u9fa5]", "", poem)
        # 将诗句转换为单个字的列表
        words = list(poem)
        return words
    
    def count_word_frequency(words):
        """统计单词出现的频率"""
        return Counter(words)
    
    def get_top_n_words(word_counts, n):
        """获取出现频率最高的前 n 个单词"""
        return word_counts.most_common(n)
    
    def get_word_count(word_counts, word):
        """获取单词的出现次数"""
        return word_counts[word]
    
    def generate_random_poem(word_counts, pattern):
        """生成随机诗句"""
        # 将格式化字符串中的标点符号替换为占位符
        pattern = pattern.replace(" ", "")
        pattern = pattern.replace(",", "{}")
        pattern = pattern.replace("。", "{}")
        # 根据占位符的数量生成诗句
        words = random.choices(list(word_counts.keys()), k=pattern.count("{}"))
        poem = pattern.format(*words)
        return poem
    
    if __name__ == "__main__":
        # 读取文件
        poem = read_poem_file("li_tai_poem.txt")
        # 分割诗句
        words = split_poem_to_words(poem)
        # 统计词频
        word_counts = count_word_frequency(words)
        # 获取出现频率最高的前 100 个单词
        top_100_words = get_top_n_words(word_counts, 100)
        print("出现频率最高的前 100 个单词:")
        for word, count in top_100_words:
            print(f"{word}: {count}")
        # 查询单词出现次数
        word_to_search = "花"
        word_count = get_word_count(word_counts, word_to_search)
        print(f"{word_to_search} 出现了 {word_count} 次。")
        # 生成随机诗句
        poem_pattern = "长江东流,{}生{}花。白银盘里,{}青{}露。"
        random_poem = generate_random_poem(word_counts, poem_pattern)
        print("随机生成的诗句:")
        print(random_poem)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月24日
  • 已采纳回答 1月16日
  • 创建了问题 1月15日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路