Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

convertido para utf-8

  • Loading branch information...
commit ea46c7aa203d10b1fcab30c15292ca4e3633121d 1 parent 599c117
Pedro Werneck authored
Showing with 73 additions and 65 deletions.
  1. +73 −65 embromador.py
138 embromador.py
View
@@ -1,5 +1,12 @@
-#!/usr/local/bin/python2.6
-# -*- coding: ISO8859-1 -*-
+#!/usr/bin/env python2.6
+# -*- coding: utf-8 -*-
+
+# tudo bem, sei que isso é horrível, mas precisei de uma solução
+# rápida para consertar tudo e funcionou...
+import sys
+reload(sys)
+sys.setdefaultencoding('utf-8')
+
import random
import re
@@ -7,16 +14,16 @@
### Constantes
# Letras
-VOGAIS = 'aeiou'
-CONSOANTES = 'bcdfghjklmnpqrstvwxyz'
+VOGAIS = u'aeiou'
+CONSOANTES = u'bcdfghjklmnpqrstvwxyz'
-# Gênero
+# Gênero
FEMININO = F = "f" # feminino
MASCULINO = M = "m" # masculino
NEUTRO = N = "n" # neutro
IGENERO = {'n':0, 'm':1, 'f':2}
-# Número
+# Número
SINGULAR = S = "s" # singular
PLURAL = P ="p" # plural
# Grau
@@ -26,24 +33,24 @@
# 0: pronome 'nenhum', substantivo no singular
# 1: artigo no singular, substantivo no singular
# 2: artigo no plural, substantivo no singular
-# 3: plural, "vários"/"alguns"
+# 3: plural, "vários"/"alguns"
# 4: plural, "muitos"
# artigos e pronomes
-ARTIGOS = {M+D:["nenhum", "o", "os", "vários", "muitos"],
- M+I:["nenhum", "um", "uns", "alguns", "muitos"],
- F+D:["nenhuma", "a", "as", "várias", "muitas"],
- F+I:["nenhuma", "uma", "umas", "algumas", "muitas"],
+ARTIGOS = {M+D:[u"nenhum", u"o", u"os", u"vários", u"muitos"],
+ M+I:[u"nenhum", u"um", u"uns", u"alguns", u"muitos"],
+ F+D:[u"nenhuma", u"a", u"as", u"várias", u"muitas"],
+ F+I:[u"nenhuma", u"uma", u"umas", u"algumas", u"muitas"],
}
-### flexão de plural para adjetivo e substantivo
+### flexão de plural para adjetivo e substantivo
# FIXME: melhorar isso
def plural_substantivo_adjetivo(palavra):
- # terminação em r, s, z, acrescenta 'es'
+ # terminação em r, s, z, acrescenta 'es'
if re.match('.*[rsz]$', palavra):
return palavra+'es'
- # terminação em x, faz nada
+ # terminação em x, faz nada
if re.match('.*x$', palavra):
return palavra
@@ -51,7 +58,7 @@ def plural_substantivo_adjetivo(palavra):
def genero_adjetivo(palavra, genero):
- # se masculino, provavelmente não precisará fazer nada
+ # se masculino, provavelmente não precisará fazer nada
if genero == M:
if re.match('.*a$', palavra):
palavra = re.sub('a$', 'o', palavra)
@@ -83,7 +90,7 @@ def __init__(cls, name, bases, dict):
class MetaPalavraAleatoria(MetaPalavra):
def escolhe_subclasse(cls):
- # caso não tenha classes base, escolha uma entre as subclasses
+ # caso não tenha classes base, escolha uma entre as subclasses
# dela, recursivamente
cls = random.choice(cls.__subcls__)
if not hasattr(cls, '_base'):
@@ -94,8 +101,8 @@ def __call__(cls, *args, **kwds):
cls = cls.escolhe_subclasse()
if not kwds:
- # garante que o mesmo termo nunca será repetido em seguida
- # quando há mais de uma opção
+ # garante que o mesmo termo nunca será repetido em seguida
+ # quando há mais de uma opção
if len(cls._base) > 1:
if not cls._log:
x = random.choice(cls._base)
@@ -120,12 +127,13 @@ def __call__(cls, *args, **kwds):
-### classe genérica para palavra
+### classe genérica para palavra
class Palavra(object):
__metaclass__ = MetaPalavra
def __init__(self, palavra=None, outra=None):
self.palavra = palavra
self.outra = outra
+
class PalavraAleatoria(Palavra):
@@ -146,15 +154,15 @@ def __enter__(self):
def __exit(self, exc_type, exc_value, traceback):
pass
- def __str__(self):
+ def __unicode__(self):
todas = []
todas.append(self.flexao_numero())
if self.outra is not None:
- todas.append(str(self.outra))
+ todas.append(unicode(self.outra))
return ' '.join(todas)
def __add__(self, outra):
- # 'outra' aqui é provavelmente adjetivo
+ # 'outra' aqui é provavelmente adjetivo
outra = copy.copy(outra)
raiz = atual = copy.deepcopy(self)
while atual.outra is not None:
@@ -179,7 +187,7 @@ def flexao_numero(self):
return plural_substantivo_adjetivo(self.palavra)
-### classe base para artigos, artigos não são aleatórios, tem a
+### classe base para artigos, artigos não são aleatórios, tem a
### proxima palavra atribuida com a operacao, e comportamento somente
### na impressao
class Artigo(Palavra):
@@ -193,7 +201,7 @@ def __str__(self):
return '<ARTIGO DESCONECTADO>'
artigo = ARTIGOS[self.outra.genero+D][self.outra.numero]
todas = [artigo]
- todas.append(str(self.outra))
+ todas.append(unicode(self.outra))
return ' '.join(todas)
class ArtigoIndefinido(Artigo):
@@ -202,17 +210,17 @@ def __str__(self):
return '<ARTIGO DESCONECTADO>'
artigo = ARTIGOS[self.outra.genero+D][self.outra.numero]
todas = [artigo]
- todas.append(str(self.outra))
+ todas.append(unicode(self.outra))
return ' '.join(todas)
-### Classe base para adjetivos, têm seus atributos definidos pelo
+### Classe base para adjetivos, têm seus atributos definidos pelo
### substantivo ao fazer a operacao
class Adjetivo(PalavraAleatoria):
_keys=('palavra',)
def __init__(self, palavra=None, genero=None, numero=1, outra=None):
# 'palavra' em adjetivos pode ser um dicionario com as
- # variações
+ # variações
super(Adjetivo, self).__init__(palavra=palavra, outra=outra)
self.genero = genero
self.numero = numero
@@ -222,12 +230,12 @@ def __str__(self):
todas.append(self.flexao_genero_numero())
atual = self.outra
while atual is not None:
- todas.append(str(atual))
+ todas.append(unicode(atual))
atual = atual.outra
return '-'.join(todas)
def __add__(self, outra):
- # caminha recursivamente até encontrar um adjetivo sem outro
+ # caminha recursivamente até encontrar um adjetivo sem outro
raiz = atual = copy.deepcopy(self)
outra = copy.copy(outra)
while atual.outra is not None:
@@ -244,12 +252,12 @@ def flexao_genero(self):
return self.palavra['n']
except KeyError:
pass
- # então tenta com o gênero devido
+ # então tenta com o gênero devido
try:
return self.palavra[self.genero]
except KeyError:
pass
- # e então faz a conversão com o primeiro que encontrar
+ # e então faz a conversão com o primeiro que encontrar
return genero_adjetivo(self.palavra.values()[0], self.genero)
def flexao_numero(self, palavra):
@@ -262,63 +270,63 @@ def flexao_numero(self, palavra):
class AdjetivoNegativo(Adjetivo):
- _base = [{'m':"inapto"},
- {'n':"incapaz"},
+ _base = [{'m':u"inapto"},
+ {'n':u"incapaz"},
]
class AdjetivoPolitico(Adjetivo):
pass
-# Adjetivos negativos políticos
+# Adjetivos negativos políticos
class AdjetivoNegativoPolitico(AdjetivoNegativo, AdjetivoPolitico):
- _base = [{'n':"sexista"},
- {'n':"colonialista"},
- {'n':"elitista"},
- {'n':"segregacionista"},
+ _base = [{'n':u"sexista"},
+ {'n':u"colonialista"},
+ {'n':u"elitista"},
+ {'n':u"segregacionista"},
]
# Substantivos concretos
class SubstantivoConcreto(Substantivo):
- _base = [('porta', F),
- ('fruta', F),
- ('chave', F),
- ('céu', M),
- ('mar', M),
- ('casa', F),
- ('muro', M),
- ('ramo', M),
+ _base = [(u'porta', F),
+ (u'fruta', F),
+ (u'chave', F),
+ (u'céu', M),
+ (u'mar', M),
+ (u'casa', F),
+ (u'muro', M),
+ (u'ramo', M),
]
class SubstantivoAbstrato(Substantivo):
- _base = [('teoria', F),
- ('discurso', M),
- ('narrativa', F),
- ('idéia', F),
+ _base = [(u'teoria', F),
+ (u'discurso', M),
+ (u'narrativa', F),
+ (u'idéia', F),
]
class ObjetoAbstratoImportante(Substantivo):
- _base = [('cultura', F),
- ('linguagem', F),
- ('arte', F),
- ('realidade', F),
- ('verdade', F),
- ('sexualidade', F),
+ _base = [(u'cultura', F),
+ (u'linguagem', F),
+ (u'arte', F),
+ (u'realidade', F),
+ (u'verdade', F),
+ (u'sexualidade', F),
]
class Ideologia(Substantivo):
- _base = [('capitalismo', M),
- ('Marxismo', M),
- ('socialismo', M),
- ('feminismo', M),
- ('nacionalismo', M),
- ('niilismo', M),
+ _base = [(u'capitalismo', M),
+ (u'Marxismo', M),
+ (u'socialismo', M),
+ (u'feminismo', M),
+ (u'nacionalismo', M),
+ (u'niilismo', M),
]
@@ -351,18 +359,18 @@ def fexpr2(self):
def expr3(self):
"*substantivo-abstrato* *adjetivo*"
- sub = SubstantivoAbstrato(palavra='teoria', genero=F)
+ sub = SubstantivoAbstrato(palavra=u'teoria', genero=F)
return ArtigoDefinido() + (sub*2 + Adjetivo() + Adjetivo() + Adjetivo())
def test():
print Substantivo() + Adjetivo()
+
for x in range(5):
for y in range(5):
print ArtigoDefinido() + (Substantivo()*x + Adjetivo())
-
-
+
print Expressao()
if __name__ == '__main__':
Please sign in to comment.
Something went wrong with that request. Please try again.