texのPDFに表を作るマン。
表を作った時のやつ。
ちょっと昔過ぎて覚えてないので説明は割愛。
このタイプのやつを表にするプログラムです。
# -*- coding:utf-8 -*-
import os,re,sys
target = re.compile("target=\"[\s\S]+?\"")
rel = re.compile("rel type=\"[\s\S]+?\"")
dash = re.compile("\"[\s\S]*\"")
kotoba = re.compile("[\s\S]*")
word = re.compile("[^\"]*")
infp = open(sys.argv[1])
#{}はディクショナリ型要素はキー:データで表す
mod = {}
word = {}
modifiers = {}
relbno = {}
list2 =
list3 =
targetlist =
for line in infp:
line = line.strip()
#print(line)
##や+があったらその文章ははじく
if line[0] in ['#']: continue
#print(line)
if line[0] == '*':
#print(line)
#[2:]2番目から末尾まで
(bno,dep) = line[2:].split()
#print(bno,dep)
#後ろから一つ目を抜き出す。
dep = dep[:-1]
#print(dep)
#mod[bno] Dの左の数字
mod[bno] = dep
#print(mod[bno])
#modefierの中にdepがなかったらmodifier[dep]を空っぽにする
if not dep in modifiers: modifiers[dep] =
modifiers[dep].append(bno)
#print(modifiers[dep])
word[bno] = ''
continue
if line.split()[0] != "+":
word[bno] += line.split()[0]
if line[0] == "+":
#print(line)
tar = target.findall(line)
#print(tar)
#print(tar[1])
relar = rel.findall(line)
#print(relar)
for a in range(len(tar)):
tardash = dash.findall(tar[a])
reldash = dash.findall(relar[a])
#for c in range(len(tardash)):
#print(tardash[c])
#reldash[c] = reldash[c][1:-1]
#list3.append[reldash[c]]
for b in range(len(reldash)):
if("ノ" in reldash[b]):
for c in range(len(tardash)):
#print(tardash[c])
tardash[c] = tardash[c][1:-1]
list3.append(tardash[c])
list2.append(bno)
if("ガ" in reldash[b]):
for c in range(len(tardash)):
#print(tardash[c])
tardash[c] = tardash[c][1:-1]
list3.append(tardash[c])
list2.append(bno)
if("修飾" in reldash[b]):
for c in range(len(tardash)):
#print(tardash[c])
tardash[c] = tardash[c][1:-1]
list3.append(tardash[c])
list2.append(bno)
#for c in range(len(tardash)):
#tarkotoba = kotoba.findall(tardash[c])
#print(tarkotoba[c])
#print(len(list2))
#print(list3)
#for d in range(len(list2)):
#print(list2[d])
for bno in word:
for d in range(len(list3)):
if(list3[d] in word[bno]):
#print(bno)
#print(word[bno])
targetlist.append(bno)
#print(targetlist)
outfp = open('graph3.tex','w')
print >>outfp, r'\documentclass[dvipdfmx]{article}'
print >>outfp, r'\usepackage{tikz}'
print >>outfp, r'\usetikzlibrary{shapes.geometric}'
print >>outfp, r'\begin{document}'
print >>outfp, r'\begin{tikzpicture}[inner sep=0pt]'
for bno in word:
#modifier[mod[bno]]のリストの中のbnoの位置を返す
x = int(modifiers[mod[bno]].index(bno))
#print(bno)
#print(modifiers[mod[bno]])
#print(x)
#print(word[bno])
print >>outfp, r'\node[ellipse,draw] at (%d, -%s) (B%s) {%s};' % (x,bno,bno,word[bno])
for bno in mod:
if mod[bno] != '-1':
print >>outfp, r'\draw[-latex](B%s) to[bend left] (B%s);' % (bno,mod[bno])
for e in range(len(list2)):
#print(e)
print >>outfp, r'\draw[-latex](B%s) to[bend right] (B%s);' % (targetlist[e],list2[e])
print >>outfp, r'\end{tikzpicture}'
print >>outfp, r'\end{document}'
import os,re,sys
target = re.compile("target=\"[\s\S]+?\"")
rel = re.compile("rel type=\"[\s\S]+?\"")
dash = re.compile("\"[\s\S]*\"")
kotoba = re.compile("[\s\S]*")
word = re.compile("[^\"]*")
infp = open(sys.argv[1])
#{}はディクショナリ型要素はキー:データで表す
mod = {}
word = {}
modifiers = {}
relbno = {}
list2 =
list3 =
targetlist =
for line in infp:
line = line.strip()
#print(line)
##や+があったらその文章ははじく
if line[0] in ['#']: continue
#print(line)
if line[0] == '*':
#print(line)
#[2:]2番目から末尾まで
(bno,dep) = line[2:].split()
#print(bno,dep)
#後ろから一つ目を抜き出す。
dep = dep[:-1]
#print(dep)
#mod[bno] Dの左の数字
mod[bno] = dep
#print(mod[bno])
#modefierの中にdepがなかったらmodifier[dep]を空っぽにする
if not dep in modifiers: modifiers[dep] =
modifiers[dep].append(bno)
#print(modifiers[dep])
word[bno] = ''
continue
if line.split()[0] != "+":
word[bno] += line.split()[0]
if line[0] == "+":
#print(line)
tar = target.findall(line)
#print(tar)
#print(tar[1])
relar = rel.findall(line)
#print(relar)
for a in range(len(tar)):
tardash = dash.findall(tar[a])
reldash = dash.findall(relar[a])
#for c in range(len(tardash)):
#print(tardash[c])
#reldash[c] = reldash[c][1:-1]
#list3.append[reldash[c]]
for b in range(len(reldash)):
if("ノ" in reldash[b]):
for c in range(len(tardash)):
#print(tardash[c])
tardash[c] = tardash[c][1:-1]
list3.append(tardash[c])
list2.append(bno)
if("ガ" in reldash[b]):
for c in range(len(tardash)):
#print(tardash[c])
tardash[c] = tardash[c][1:-1]
list3.append(tardash[c])
list2.append(bno)
if("修飾" in reldash[b]):
for c in range(len(tardash)):
#print(tardash[c])
tardash[c] = tardash[c][1:-1]
list3.append(tardash[c])
list2.append(bno)
#for c in range(len(tardash)):
#tarkotoba = kotoba.findall(tardash[c])
#print(tarkotoba[c])
#print(len(list2))
#print(list3)
#for d in range(len(list2)):
#print(list2[d])
for bno in word:
for d in range(len(list3)):
if(list3[d] in word[bno]):
#print(bno)
#print(word[bno])
targetlist.append(bno)
#print(targetlist)
outfp = open('graph3.tex','w')
print >>outfp, r'\documentclass[dvipdfmx]{article}'
print >>outfp, r'\usepackage{tikz}'
print >>outfp, r'\usetikzlibrary{shapes.geometric}'
print >>outfp, r'\begin{document}'
print >>outfp, r'\begin{tikzpicture}[inner sep=0pt]'
for bno in word:
#modifier[mod[bno]]のリストの中のbnoの位置を返す
x = int(modifiers[mod[bno]].index(bno))
#print(bno)
#print(modifiers[mod[bno]])
#print(x)
#print(word[bno])
print >>outfp, r'\node[ellipse,draw] at (%d, -%s) (B%s) {%s};' % (x,bno,bno,word[bno])
for bno in mod:
if mod[bno] != '-1':
print >>outfp, r'\draw[-latex](B%s) to[bend left] (B%s);' % (bno,mod[bno])
for e in range(len(list2)):
#print(e)
print >>outfp, r'\draw[-latex](B%s) to[bend right] (B%s);' % (targetlist[e],list2[e])
print >>outfp, r'\end{tikzpicture}'
print >>outfp, r'\end{document}'