using python to compute production rules
#coding=utf8
import logging
import itertools
import re
import sys
logger = logging.getLogger()
root_format = "[%(filename)s:%(lineno)s \t- %(funcName)-10s() ]: %(message)s"
logging.basicConfig(format=root_format)
logger.setLevel(logging.DEBUG)
branch_production_dict = [["pat1",["<suba1><subb1>","<suba2><subb2>"]],
["pat2",["<suba2.1><subb2.1>","<suba2.2><subb2.2>"]],
["pat3",["<suba3.1><subb3.1>","<suba3.2><subb3.2>"]]
]
leaf_production_dict_0 = {"suba1":['a1.1','a1.2'],
'subb1':['b1.1','b1.2'],
'suba2':['a2.1','a2.2'],
'subb2':['b2.1','b2.2'],
"suba2.1":['a1.1','a1.2'],
'subb2.1':['b1.1','b1.2'],
'suba2.2':['a2.1','a2.2'],
'subb2.2':['b2.1','b2.2'],
"suba3.1":['a1.1','a1.2'],
'subb3.1':['b1.1','b1.2'],
'suba3.2':['a2.1','a2.2'],
'subb3.2':['b2.1','b2.2'],
}
leaf_production_dict = {}
for i in leaf_production_dict_0.keys():
val = []
for j in leaf_production_dict_0[i]:
val.append('<'+i+'>'+'('+j+')')
leaf_production_dict[i]= val
dt3 = {}
dt4 = {}
logging.debug(str(branch_production_dict))
def prod_and_link(list_vec):
res = []
for i in itertools.product(*list_vec):
tmp = list(i)
one = ""
for j in tmp:
one += j
#print(one)
res.append(one)
#print(res)
return res
for ii in branch_production_dict:
i=ii[0]
#sys.stdout.write('for ')
#print(i)
logging.debug('for '+str(i))
val = ii[1]
ttt = []
nttt = []
for j in val:
tmp_segs = re.split('>|<',j)
segs=[]
nt_segs=[]
for k in tmp_segs:
if len(k) > 0:
segs.append(leaf_production_dict[k])
nt_segs.append(['<'+k+'>'])
#get a seg
prod_res = prod_and_link(segs)
logging.debug(str(nt_segs))
nt_prod_res = prod_and_link(nt_segs)
ttt += prod_res
nttt += nt_prod_res
logging.debug(str(ttt))
dt3[i]=ttt
dt4[i]=nttt
logging.debug(str(dt3))
dt4 = {}
for i in dt3.keys():
dt4_val= []
for j in dt3[i]:
split_res = re.split('(>\()|(\)<)',j)
split_res = list(split_res)
logging.debug("split_res : "+str(split_res))
#print(split_res)
#print(type(split_res))
n=0
p = ''
q = ''
for k in [kk for kk in split_res if all([kk != None, kk!=')<',kk!='>('])]:
logging.debug("kk in " + str([kk for kk in split_res if all([kk != None, kk!=')<',kk!='>('])]))
if n == 0:
p += '<'+k+'>'
n = 1
elif n == 1:
q += '('+k+')'
n = 0
logging.debug("p:"+p+',q:'+q)
p = p[1:]
q = q[:-1]
dt4_val.append(p+'='+q)
dt4[i] = dt4_val
logging.debug(str(dt4))
link_res = prod_and_link([['a','b'],['c','d']])
#print( link_res )
#[test2.py:110 - <module> () ]: {'pat2': ['<suba2.1><subb2.1>=(a1.1)(b1.1)', '<suba2.1><subb2.1>=(a1.1)(b1.2)', '<suba2.1><subb2.1>=(a1.2)(b1.1)', '<suba2.1><subb2.1>=(a1.2)(b1.2)', '<suba2.2><subb2.2>=(a2.1)(b2.1)', '<suba2.2><subb2.2>=(a2.1)(b2.2)', '<suba2.2><subb2.2>=(a2.2)(b2.1)', '<suba2.2><subb2.2>=(a2.2)(b2.2)'], 'pat1': ['<suba1><subb1>=(a1.1)(b1.1)', '<suba1><subb1>=(a1.1)(b1.2)', '<suba1><subb1>=(a1.2)(b1.1)', '<suba1><subb1>=(a1.2)(b1.2)', '<suba2><subb2>=(a2.1)(b2.1)', '<suba2><subb2>=(a2.1)(b2.2)', '<suba2><subb2>=(a2.2)(b2.1)', '<suba2><subb2>=(a2.2)(b2.2)'], 'pat3': ['<suba3.1><subb3.1>=(a1.1)(b1.1)', '<suba3.1><subb3.1>=(a1.1)(b1.2)', '<suba3.1><subb3.1>=(a1.2)(b1.1)', '<suba3.1><subb3.1>=(a1.2)(b1.2)', '<suba3.2><subb3.2>=(a2.1)(b2.1)', '<suba3.2><subb3.2>=(a2.1)(b2.2)', '<suba3.2><subb3.2>=(a2.2)(b2.1)', '<suba3.2><subb3.2>=(a2.2)(b2.2)']}
using python to compute production rules的更多相关文章
- python爬虫scrapy之rules的基本使用
Link Extractors Link Extractors 是那些目的仅仅是从网页(scrapy.http.Response 对象)中抽取最终将会被follow链接的对象。 Scrapy默认提供2 ...
- Python下划线与命名规范
Python下划线与命名规范 先看结论,节省只想知道答案你的宝贵时间: _xxx 不能用于from module import * 以单下划线开头的表示的是protected类型的变量.即保护类型只能 ...
- Notes for "Python in a Nutshell"
Introduction to Python Wrap C/C++ libraries into Python via Cython and CFFI. Python implementations ...
- python基础===requests学习笔记
这里有一个新的学习requests网站:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html2017/11/30 Requ ...
- (转)PEP 8——Python编码风格指南
PEP 8——Python编码风格指南标签(空格分隔): Python PEP8 编码规范原文:https://lizhe2004.gitbooks.io/code-style-guideline-c ...
- 如何用 Python 和 API 收集与分析网络数据?
摘自 https://www.jianshu.com/p/d52020f0c247 本文以一款阿里云市场历史天气查询产品为例,为你逐步介绍如何用 Python 调用 API 收集.分析与可视化数据.希 ...
- 优秀的PHP开源项目集合
包管理Package Management Package Management Related 框架 框架组件 微框架Micro Frameworks 内容管理系统Content Managemen ...
- PHP框架、库和软件资源大全(整理篇)
php的资料 https://github.com/ziadoz/awesome-php Awesome PHP A curated list of amazingly awesome PHP lib ...
- Checked Exceptions
记得当年在程序员杂志上看出这次访谈,10多年过去了, 这件事儿最近被重提了, 原因是 Kotlin. 1.对Checked Exceptions特性持保留态度 (译者注:在写一段程序时,如果没有用tr ...
随机推荐
- wpf自定义控件中使用自定义事件
wpf自定义控件中使用自定义事件 1 创建自定义控件及自定义事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 ...
- day12-python的类
类的一般形式: 创建类我们一般用class关键字来创建一个类,class后面跟类名字,可以自定义,最后以冒号结尾,如下所示: class ClassName: '''类的说明''' 类的内容 类的内容 ...
- :适配器模式:Adapter
#ifndef __ADAPTER_H__ #define __ADAPTER_H__ #include <iostream> using namespace std; class Duc ...
- Unicode与中文转换工具类方法(转)
/* * 中文转unicode编码 */ public static String gbEncoding(final String gbString) { char[] utfBytes = gbSt ...
- spingmvc 访问静态文件,比如css,img等
这里我来引用一段别人的原话 url-pattern有5种配置模式: (1)/xxx:完全匹配/xxx的路径 (2)/xxx/*:匹配以/xxx开头的路径,请求中必须包含xxx. (3)/*:匹配/下的 ...
- <Java><类与对象><OOP>
Overview 类 封装(encapsulation): 也称为数据隐藏.从形式上看,是将数据与行为组合起来,并对对象的使用者隐藏了数据的实现方式.封装给对象赋予了黑盒特征,提高重用性和可靠性. 继 ...
- day 37-8 关于mysql 的增 删 改 查 及联合列表
1 VARCHAR : 字符串的意思 (括号内的数字代表尾数) 输入的字符串在这个范围内都行 CHAR :字符串的意思(区别就有几位数字 必须写几位) INT 整数(位数) 输入的数字 ...
- Python 基础学习day1
1.计算机的组成 CPU:相当于人的大脑,预算中心. 内存:临时加载数据或者程序. 缺点:断电即消失. 硬盘:存放所有的数据,输入输出设备. 2.什么是操作系统. 调控所有硬件与软件的中间介质. 3. ...
- ios初识UITableView及简单用法一
// // ViewController.m // ZQRTableViewTest // // Created by zzqqrr on 17/8/24. // Copyright (c) 2017 ...
- easyUI datagrid值转义
数据库表里面字段的值想用另一种命名形式展示,如1是 是,2是 否 解决方法: 用到formatter ,{field:'params', title:'参数', width:100, sort ...