IPython Notebook for presentation at Shared Horizons: Data, Biomedicine and the Digital Humanities
@ University of Maryland, 12 April 2013
A. Sean Pue, Tracy K. Teal, C. Titus Brown
Michigan State University
# import some modules
import settings
from meter_graph import MeterGraph
import graph_parser
from graph_parser import GraphParser
from pprint import pprint
import meter_graph
Convert from transliteration to metrical components
ranj se ;xuugar hu))aa insaa;n to mi;t jaataa hai ranj => bcsccbcvbcvcscbcscvbsccvnbcvbcscbcvcvbcvbcscc
b = word break, c = consonant, v = long vowel, s = short vowel, etc.
# loads rules for transcribing text into components of meter
# e.g. b = break, c = consonant, v = long vowel, s = short vowel
# rules can include previous tokens, class of token before previous, following tokens, class of token following tokens
pp = GraphParser('settings/urdu-meter.yaml')
pprint(pp.rules[-5:])
def transcribe(s):
return pp.parse(s)
transcription = transcribe(' ranj se ;xuugar hu))aa insaa;n to mi;t jaataa hai ranj')
transcription.output # output of transcript
# also stores details of matches for later
transcription.matches[0:5]
# Using a graph here
# Constraints on final edge (previous token class, previous tokens, next tokens, next token class)
graph_parser.draw_parser_graph(pp.DG)
Parses and translates into known meters,
e.g
bcsccbcvbcvcscbcscvbsccvnbcvbcscbcvcvbcvbcscc => =-==/=-==/=-==/=-=-
= is long, - is short, / is foot-divider
mg = MeterGraph()
def translate(s):
return mg.graph_scan(s)
example=' ranj se ;xuugar hu))aa insaa;n to mi;t jaataa hai ranj'
translations = translate(example)
for t in translations:
print "scan: ",t.scan, "meter id: ",t.meter_type
print "Also saves matches, e.g.:"
pprint(t.matches[0:5], indent=4)
# Using a graph here
# On the edges between nodes are bad matches, e.g. illegal combos
mg.draw_graph()
import pydot
import networkx
g=mg.DG
labels=dict((n,d['type']) for n,d in g.nodes(data=True))
networkx.drawing.nx_pylab.draw_graphviz(g, labels=labels, node_size=200)