#!/usr/bin/python
# -*- coding: UTF-8 -*-
import nltk
from dop import Dop
#from eomorph import analyse

class UDop():
	def __init__(self, corpus, lex=True):
		self.corpus, self.lex = [], lex
		def s(a): 
			return nltk.Tree('S', [b for b in a])
		for a in corpus:
			self.corpus.extend([s(a) for a in self.possibletrees(a)])
		self.dop = Dop(self.corpus)
	
	def parse(self, sentence):
		return self.dop.parse(sentence)

	def possibletrees(self, sentence):
		#generate all possible binary trees with sentence as leaves
		if len(sentence) == 1: 
			if self.lex: yield sentence[0]
			else: yield nltk.Tree('Y', sentence)
		else:
			for a in range(1, len(sentence)):
				for b in self.possibletrees(sentence[:a]):
					for c in self.possibletrees(sentence[a:]):
						yield nltk.Tree('X', [b, c])

corpus = 'la hund|o boj|as. rigard|u la hund|o. rigard|u la vir|o'
corpus = u"""li sola estas la grandulo, la potenculo, la sinjoro de la anĝeloj
kaj de la homoj. sur liaj lipoj estas la vero; la lumo de la sunoj, kiuj
brilas super la montegoj, venas de liaj okuloj. unu el liaj fingroj
guvernas la maŝinon de la mondoj. la bloveto de lia buŝo estas la
vento, kiu pelas la sablojn de la dezerto.""".replace(',', '').replace(';','').lower()
udop = UDop(a.split() for a in corpus.split('.'))
#udop = UDop((b.split('|') for b in a.split()) for a in corpus.split('.'))
#udop = UDop((a.split() for a in 'investors suffered heavy losses'.split('.')))
for a in udop.dop.corpus.values():
	for b in a: print b

for a in udop.parse('rigard|u la hund|o'.split()): 
	print a[0], a[1]
for a in udop.parse('la hund|o boj|as'.split()): 
	print a[0], a[1]
