通过规则生成句子
2019-04-07 本文已影响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)