Tag: Python

  • Google App Engine

    Tinha uma instalação de Django no Google App Engine do Google Cloud Plataform, mas com a descontinuação do Python 2.5, o ambiente se tornou indisponivel.

    Algum dia retornarei a este ambiente.

    1. prejudicado para os casos que usar Banco de Dados. Eles querem cobrar os recursos de bancos de dados. Será que dá para usar como recurso estático??

    Referencias

    1. Why Google – entender o serviço e ambiente para ver como usá-lo.
    2. Running Django on App Engine Standard Environment
    3. CLOUD SDK
  • Ordenar tabela com PinYin em ordem natural.

    PythonO Chinês é uma lingua muito peculiar. Uma língua monosilábica, tonal (alteração de tons na pronúnica da silaba diferencia o signicado das palavras). Para representar os sons das palavras chinesas padronizou-se o uso do PinYin (transliteração oficial) representando os 4 tons através de sinais diacriticos sobre as vogais. Veja um pequeno exemplo :

    A mesma silaba "Ma" apresentada nos diversos tons, apresenta significados bem distintos.

    Neste momento, eu me defronto com o problema de ordenar um glossário (planilha) de tres colunas : Ideograma, PinYin, e significado. Para facilitar aa consulta de um tal Glossário, digamos com mil expressões, gostaríamos de ordenar em ordem alfabética da coluna PinYin. Está é uma ordem natural uma vez que as letras A com ou sem os sinais diacriticos estão na ordem numérica convencionada para os tons. Mas, quando ordenamos pela coluna PinYin (B), numa planilha (Calc do LibreOffice, ou Excel do Office Microsoft) obtemos :

    Isso porque as vogais com diacriticos foram dispostos na tabela de caracteres em espaços disponíveis não de considerando este nosso possivel interesse.

    Esperar que a tabela de condificação dos caracteres diacríticos seja revista para contemplar a ordem natural das palavras chinesas parece estar fora de questão. Vamos a uma solução local e particular.

    Criaremos uma coluna adicional, somente para a classificação em ordem natural das palavras chinesas aproveitando a estrutura atual de condificação dos caracteres com diacriticos.

    Usaremos o recurso string.translate(str.maketrans(raw, coded)) do Python convertendo as vogar "āáǎàaēéěèeīíǐìiōóǒòoǖǘǚǜüūúǔùu" para "aáàǎāeéèěēiíìǐīoóòǒōuúùǔüǘǜǚǖū" obtendo a coluna auxiliar para a classificação.
     

    Como a ordenação do pinyin considera cada um dos tons de cada vogal diferentemente na ordenação, tivemos que subtituir cada vogal para a configuração vn onde v é a vogal sem o diacritico seguido pelo n do tom na sequencia desejada. Por exemplo, considerando o tom neutro como 5 para ficar depois dos 4 outros tons na ordenação. Alem disso, tomamos o cuidado de ordenar corretamente o u com o ü! Usamos a metodo s.replace dos strings do python para fazer as substuições.

    Dado uma lista de expressões contendo palavras em PinYin tentarei ordenar em sua ordem natural. Esclarecendo, a ordem dos caracteres diacriticos não é natural.

    Referências:

    • http://gomputor.wordpress.com/2008/09/27/search-replace-multiple-words-or-characters-with-python/ – aqui uma forma de substituição de caracteres.
    • str.translate(table[, deletechars]) – parece ser mais adequado para o nosso caso.
  • macros OpenOffice em Python….

    PythonOpenOffice

    Bom…. sempre ouvimos falar sobre macros OpenOffice escritas em Python… Estas são as minhas notas sobre o assunto

    Referências:

    • http://wiki.services.openoffice.org/wiki/Python_as_a_macro_language – tudo o que você poderia querer saber, "da boca do próprio cavalo"!
  • Expressões Regulares… RegEx

    regex
    regex

    Isso sempre parece mesmo obra do demonio!!! Mas, o fato é que sempre podemos aprender um pouco mais sobre as expressões regulares e conseguir bons resultados com eles.
    Referências:

  • Python 3.2….

    Python3.2
    Python3.2

    Isso pode ser “colocar o carro á frente dos bois”, mas como cai neste problema, vou procurar registrar aqui as minhas notas para futuras referencias.

    O Robot de catalogação de livros em nossa biblioteca foi desenvolvido pelo DN para python3, e funciona bem no Python3.1

    $ python3.1

    Python 3.1.3 (r313:86834, Mar 25 2011, 20:54:26)

    [GCC 4.5.2] on linux2

    Type “help”, “copyright”, “credits” or “license” for more information.

    >>>

    mas, para o Python 3.2 ele não funciona

    $ python3.2

    Python 3.2 (r32:88445, Mar 25 2011, 19:56:22)

    [GCC 4.5.2] on linux2

    Type “help”, “copyright”, “credits” or “license” for more information.

    >>>

    Dando um erro :

    $ python3.2 form20d.pyw

    Exception in Tkinter callback

    Traceback (most recent call last):

    File “/usr/lib/python3.2/tkinter/__init__.py”, line 1402, in __call__

    return self.func(*args)

    File “form20d.pyw”, line 420, in salvarEdicao

    cedom.salvarEdicao(self)

    File “/home/omy/cedom/robot/robot20d/cedom.py”, line 424, in salvarEdicao

    bibid = re.findall(r’new_form.php\?bibid=(\d+)&reset=’, result)[0]

    IndexError: list index out of range

    A solução óbvia, continuar usando o Python 3.1, funciona! Mas… “no inferno, abrace o diabo!”
    O problema está nas diferenciações do tipo str do tipo byte. Na versão 3.2, as funções da urllib passaram a exigir parametros byte, não aceitando mais o formato str.