08448380779 Call Girls In Civil Lines Women Seeking Men
pa-pe-pi-po-pure Python Text Processing
1. pa-pe-pi-po-
Pure Python
Text Processing
Rodrigo Senra
rsenra@acm.org
PythonBrasil[7] - São Paulo
2. Anatomia do Blá
• Eu, Vocês e Python
• retrospectiva PythonBrasil[7] anos!
• pa-pe-pi-po-pure python text processing
• referências
• 1 palavra dos patrocinadores
3. Quem está aí ?
✓Profissionais de
Informática
✓Desenvolvedores
✓Estudantes
✓Professores
✓1ª vez na PyConBrasil
✓Membros APyBr
• Nenhuma resposta acima!
4. Cenas dos últimos capítulos...
[1] 2005 - BigKahuna
[2] 2006 - Show Pyrotécnico
Iteradores, Geradores,Hooks,Decoradores
[3] 2007 - Show Pyrotécnico II
Routing, RTSP, Twisted, GIS
[4] 2008 - ISIS-NBP
Bibliotecas Digitais
[5] 2009 - Rest, Gtw e Compiladores
SFC(Rede Petri) + ST(Pascal) > Ladder
[5] 2010 - Potter vs Voldemort:
Lições ofidiglotas da prática pythonica
6. >>> " deu branco no prefixo e no sufixo, limpa com strip ".strip()
'deu branco no prefixo e no sufixo, limpa com strip'
>>> _.startswith("deu")
True
>>> "o rato roeu a roupa do rei de roma".partition("r")
('o ', 'r', 'ato roeu a roupa do rei de roma')
>>> "o rato roeu a roupa do rei de roma".split("r")
['o ', 'ato ', 'oeu a ', 'oupa do ', 'ei de ', 'oma']
>>> "o rato roeu a roupa do rei de roma".split()
['o', 'rato', 'roeu', 'a', 'roupa', 'do', 'rei', 'de', 'roma']
7. >>> r"W:naoprecisadeescape"
'W:naoprecisadeescape'
>>> type(r"W:naoprecisadeescape")
<type 'str'>
>>> type(u"Unicode")
<type 'unicode'>
>>> print(u"xc3xa2")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
>>> print(unicode('xc3xa1','iso-8859-1').encode('iso-8859-1'))
á
>>> import codecs, sys
>>> sys.stdout = codecs.lookup('iso-8859-1')[-1](sys.stdout)
>>> print(u"xc3xa1")
á
11. >>> def t(x,y): return string.translate(x,string.maketrans('',''),y)
...
>>> t("O rato roeu. O que? A roupa! De quem? Do rei, de roma;",
string.punctuation)
'O rato roeu O que A roupa De quem Do rei de roma'
>>> class Bla(object):
... def __str__(self):
... return "Belex"
... def __repr__(self):
... return "Bla()"
...
>>> b = Bla()
>>> for i in [b, eval(repr(b))]:
... print(i, end='t')
...
Belex Belex >>>
12. >>> class istr(str):
... pass
>>> for name in 'eq lt le gt ge ne cmp contains'.split():
... meth = getattr(str, '__%s__' % name)
... def new_meth(self, param, *args):
... return meth(self.lower(), param.lower(), *args)
... setattr(istr, '__%s__'% name, new_meth)
...
>>> istr("SomeCamelCase") == istr("sOmeCaMeLcase")
True
>>> 'Ec' in istr("SomeCamel")
True
Adapted from Python Cookbook
13. >>> import re
>>> pat = re.compile(re.escape("<strong>"))
>>> re.escape("<strong>")
'<strong>'
>>> pat.sub("_","<strong>Hasta la vista<strong> baby")
'_Hasta la vista_ baby'
>>> date = re.compile(r"(dddd-dd-dd)s(w+)")
>>> date.findall("Em 2011-09-29 PythonBrasil na parada. Em 2010-10-21
curitiba hospedou")
[('2011-09-29', 'PythonBrasil'), ('2010-10-21', 'curitiba')]
14. $ python -mtimeit -s "import re; n=re.compile(r'abra')" "n.search
('abracadabra')"
1000000 loops, best of 3: 0.306 usec per loop
$ python -mtimeit -s "import re; n=r'abra'" "n in 'abracadabra'"
10000000 loops, best of 3: 0.0591 usec per loop
$ python -mtimeit -s "import re; n=re.compile(r'd+$')" "n.match
('0123456789')"
1000000 loops, best of 3: 0.511 usec per loop
$ python -mtimeit -s "import re" "'0123456789'.isdigit()"10000000
loops, best of 3: 0.0945 usec per loop
Extracted from PyMag Jan 2008
15. $ python -mtimeit -s
"import re;r=re.compile('pa|pe|pi|po|pu');h='patapetapitapotapuxa'”
"r.search(h)"
1000000 loops, best of 3: 0.383 usec per loop
$ python -mtimeit -s
"import re;n=['pa','pe','pi','po','pu'];h='patapetapitapotapuxa'"
"any(x in h for x in n)"
1000000 loops, best of 3: 0.914 usec per loop
Extracted from PyMag Jan 2008
18. import ply.yacc as yacc
def p_expression_plus(p):
'expression : expression PLUS expression'
p[0] = p[1] + p[3]
def p_factor_num(p):
'expression : NUMBER'
p[0] = p[1]
def p_error(p):
print "Syntax error in input!"
parser = yacc.yacc()
Adapted from http://www.dabeaz.com
19. >>> parser.parse("1+2 + 45 n + 10")
58
>>> parser.parse("Quanto vale 2 + 7")
9
>>> parser.parse("A soma 2 + 7 resulta em 9")
Syntax error in input!
>>> parser.parse("2 + 7 9")
Syntax error in input!
Adapted from http://www.dabeaz.com
20. >>> parser.parse("1+2 + 45 n + 10")
58
>>> parser.parse("Quanto vale 2 + 7")
9
>>> parser.parse("A soma 2 + 7 resulta em 9")
Syntax error in input!
>>> parser.parse("2 + 7 9")
Syntax error in input!
Adapted from http://www.dabeaz.com
21. from nltk.tokenize import sent_tokenize, word_tokenize
msg = “Congratulations to Erico and his team. PythonBrasil gets better
every year. You are now the BiggestKahuna.”
>>> sent_tokenize(msg)
['Congratulations to Erico and his team.', 'PythonBrasil gets better every
year.', 'You are now the BiggestKahuna.']
>>> word_tokenize(msg)
['Congratulations', 'to', 'Erico', 'and', 'his', 'team.', 'PythonBrasil', 'gets',
'better', 'every', 'year.', 'You', 'are', 'now', 'the', 'BiggestKahuna', '.']
Extracted from NLP with Python
22. >>> def gender_features(word):
... return {"last_letter": word[-1]}
...
>>> from nltk.corpus import names
>>> len(names.words("male.txt"))
2943
>>> names = ([(name,'male') for name in names.words('male.txt')] +
... [(name,'female') for name in names.words('female.txt')])
>>> import random
>>> random.shuffle(names)
>>> featuresets = [(gender_features(n),g) for n,g in names]
>>> train_set, test_set = featuresets[500:], featuresets[:500]
>>> classifier = nltk.naiveBayesClassifier.train(train_set)
>>> classifier.classify(gender_features("Dorneles"))
'male'
>>> classifier.classify(gender_features("Magali"))
'female'
Extracted from NLP with Python
25. Obrigado a todos
pela atenção.
Rodrigo Dias Arruda Senra
http://rodrigo.senra.nom.br
rsenra@acm.org
As opiniões e conclusões expressas nesta apresentação são de exclusiva responsabilidade de Rodrigo Senra.
Não é necessário requisitar permissão do autor para o uso de partes ou do todo desta apresentação, desde que
não sejam feitas alterações no conteúdo reutilizado e que esta nota esteja presente na íntegra no material
resultante.
Imagens e referências para outros trabalhos nesta apresentação permanecem propriedade daqueles que detêm
seus direitos de copyright.