语言:python(不用库,或者仅用jieba库)
任务:
现有一个《李太白文集》的txt外置文件。
请将其的所有字分成单个字(比如把“云想浮生花想荣”分成云、想、浮、生、花、想、荣)。
可以得到出现频次最高的top100排行榜和出现次数。
可以查询单个字的出现次数。
然后设计一个五言绝句和七言绝句的格式,用标点分隔。
然后让它随机往中间填字,允许单字重复出现,得到诗句。
即 查询词频 和 随机生成诗句 两个功能。
要求:代码量越少、越初级越好。.如果水平太高,请写详细的注释。
语言:python(不用库,或者仅用jieba库)
任务:
现有一个《李太白文集》的txt外置文件。
请将其的所有字分成单个字(比如把“云想浮生花想荣”分成云、想、浮、生、花、想、荣)。
可以得到出现频次最高的top100排行榜和出现次数。
可以查询单个字的出现次数。
然后设计一个五言绝句和七言绝句的格式,用标点分隔。
然后让它随机往中间填字,允许单字重复出现,得到诗句。
即 查询词频 和 随机生成诗句 两个功能。
要求:代码量越少、越初级越好。.如果水平太高,请写详细的注释。
完整代码实现如下:
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)