通过规则生成句子

作者: 还有下文 | 来源:发表于2019-04-07 01:35 被阅读2次

    通过列表存储句子逻辑以及句子不同组成成分单元的词库,可以生成以下内容:

    男人安静地看着静静桌子

    漂亮蓝色的猫安静地看着安静地皮球

    男人静静看着安静地桌子

    蓝色好看的男人安静地看着安静地皮球

    女人安静地坐着静静桌子

    蓝色好看的男人静静看着安静地桌子

    蓝色蓝色的猫静静坐着静静皮球

    好看好看的男人静静坐着安静地皮球

    猫静静坐着静静皮球

    代码见:

    # -*- coding:UTF-8 -*-
    grammar = """
    sentence = adj noun verb adv noun2
    adj = adj_single adj_single 的 | null
    adj_single = 漂亮 | 蓝色 | 好看
    adv = 安静地 | 静静
    noun = 猫 | 女人 | 男人
    verb = adv 看着 | adv 坐着
    noun2 = 桌子 | 皮球
    """
    
    import random
    
    
    def build_grammar(grammar_str, split='='):
        grammar_pattern = {}
        for line in grammar_str.split('\n'):
            if line:
                stat, expr = line.split(split)
                grammar_pattern[stat.strip()] = [e.split() for e in expr.split('|')]
        return grammar_pattern
    
    
    def generate(grammar_pattern, target):
        if target not in grammar_pattern: return target
    
        expr = random.choice(grammar_pattern[target])
        tokens = [generate(grammar_pattern, e) for e in expr]
        return ''.join([t for t in tokens if t != 'null'])
    
    for i in range(1,10):
        sentence = generate(build_grammar(grammar), 'sentence')
        print(sentence)
    

    相关文章

      网友评论

        本文标题:通过规则生成句子

        本文链接:https://www.haomeiwen.com/subject/uyyriqtx.html