python 一个基于双面映射生成语言句子的小型原型。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 一个基于双面映射生成语言句子的小型原型。相关的知识,希望对你有一定的参考价值。

import random


class EventGen(object):

	def __init__(self, gen_len=3):
		self.objs = {}
		self.actions = {}
		self.pattern = ""
		self.gen_len = gen_len

	def set_pattern(self, pattern):
		self.pattern = pattern

	def set_len(self, length):
		self.gen_len = length

	def add_object(self, name, *childs):
		if name not in self.objs:
			self.objs[name] = []
		for elem in childs:
			self.objs[name].append(elem)

	def add_action(self, name, *childs):
		if name not in self.actions:
			self.actions[name] = []
		for elem in childs:
			self.actions[name].append(elem)

	def rand_obj(self):
		return random.choice(self.objs.keys())

	def rand_act(self):
		return random.choice(self.actions.keys())


	def gen_obj_act_obj(self):
		picked_obj = self.rand_obj()
		sub_act = random.choice(self.objs[picked_obj])
		term_obj = random.choice(self.actions[sub_act])
		return picked_obj + " " + sub_act + " " + term_obj + "."

"""
jweinstein-MBP-71683:startup jweinstein$ python -i gen.py
>>> test = EventGen()
>>> test
<__main__.EventGen object at 0x1034ba0d0>
>>> test.add_object('An apple', 'shines', 'looks')
>>> test.objs
{'An apple': ['shines', 'looks']}
>>> test.add_action('shines', 'bright', 'bold', 'boldly')
>>> test.add_action('looks', 'red', 'blue', 'reddish')
>>> test.gen_obj_act_obj()
'An apple shines bold.'
>>> test.gen_obj_act_obj()
'An apple looks red.'
>>> test.gen_obj_act_obj()
'An apple shines bold.'
>>> test.gen_obj_act_obj()
'An apple looks red.'
>>> test.gen_obj_act_obj()
'An apple shines boldly.'
>>> test.gen_obj_act_obj()
'An apple looks reddish.'
>>> exit()
"""

以上是关于python 一个基于双面映射生成语言句子的小型原型。的主要内容,如果未能解决你的问题,请参考以下文章

NLP自然语言处理

Python自然语言处理工具包推荐

jieba 分词库(python)

基于上下文无关文法的句子生成算法

实验一:训练Bigram模型并预测句子概率|自然语言

自然语言处理之中文分词器-jieba分词器详解及python实战