鱼C论坛

 找回密码
 立即注册
查看: 1668|回复: 8

python 生成古诗

[复制链接]
发表于 2019-9-22 15:57:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
原代码如下,main(config=CONF),CONF是怎么传递的?哪位大侠详述一下,谢谢
from gensim.models import Word2Vec  # 词向量
from random import choice
from os.path import exists
import warnings

warnings.filterwarnings('ignore')  # 不打印警告

class CONF:
    path = 'Tpoem2.txt'
    window = 16          # 滑窗大小
    min_count = 60       # 过滤低频字
    size = 125           # 词向量维度
    topn = 14            # 生成诗词的开放度
    model_path = 'word2vec'

class Model:
    def __init__(self, window, topn, model):
        self.window = window
        self.topn = topn
        self.model = model                   # 词向量模型
        self.chr_dict = model.wv.index2word  # 字典

    """模型初始化"""
    @classmethod
    def initialize(cls, config):
        if exists(config.model_path):
            # 模型读取
            model = Word2Vec.load(config.model_path)
        else:
            # 语料读取
            with open(config.path, encoding='utf-8') as f:
                ls_of_ls_of_c = [list(line.strip()) for line in f]
            # 模型训练和保存
            model = Word2Vec(ls_of_ls_of_c, config.size,
                             window=config.window, min_count=config.min_count)
            model.save(config.model_path)
        return cls(config.window, config.topn, model)

    """古诗词生成"""
    def poem_generator(self, title, form):
        filter = lambda lst: [t[0] for t in lst if t[0] not in [',', '。']]
        # 标题补全
        if len(title) < 4:
            if not title:
                title += choice(self.chr_dict)
            for _ in range(4 - len(title)):
                similar_chr = self.model.similar_by_word(title[-1], self.topn // 2)
                similar_chr = filter(similar_chr)
                char = choice([c for c in similar_chr if c not in title])
                title += char
        # 文本生成
        poem = list(title)
        for i in range(form[0]):
            for _ in range(form[1]):
                predict_chr = self.model.predict_output_word(
                    poem[-self.window:], max(self.topn, len(poem) + 1))
                predict_chr = filter(predict_chr)
                char = choice([c for c in predict_chr if c not in poem[len(title):]])
                poem.append(char)
            poem.append(',' if i % 2 == 0 else '。')
        length = form[0] * (form[1] + 1)
        return '《%s》' % ''.join(poem[:-length]) + '\n' + ''.join(poem[-length:])

def main(config=CONF):
    form = {'五言绝句': (4, 5), '七言绝句': (4, 7), '对联': (2, 9)}
    m = Model.initialize(config)
    while True:
        title = input('输入标题:').strip()
        try:
            poem = m.poem_generator(title, form['五言绝句'])
            print('\033[031m%s\033[0m' % poem)             # red
            poem = m.poem_generator(title, form['七言绝句'])
            print('\033[033m%s\033[0m' % poem)             # yellow
            poem = m.poem_generator(title, form['对联'])
            print('\033[036m%s\033[0m' % poem)             # purple
            print()
        except:
            pass

if __name__ == '__main__':
    main()

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-9-22 17:00:43 | 显示全部楼层
默认参数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-22 17:02:09 | 显示全部楼层
没发现别的,发现你的缩进有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-22 18:25:28 | 显示全部楼层
谢谢,类,class,我就不懂了,如果去掉class,改成def ()函数,
代码怎么改?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-22 18:27:15 | 显示全部楼层
这段代码中有类的定义,但似也并不是按对象的编程思路走的,
很容易让人混崤,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-22 19:23:59 | 显示全部楼层
def main(config=CONF) 表示定义一个 main 函数并给一个参数 config,如果不指定 config 参数则默认为 CONF。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-23 07:22:34 | 显示全部楼层
class Model这个定义之后,是在哪里把它实例化了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-24 14:06:09 | 显示全部楼层
py可以做诗啦,真正的人工智能吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-24 16:54:43 | 显示全部楼层
这段代码还有错误,等大神来修改一下,
怎么实例化对象,并在代码中加以引用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-19 12:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表