Processamento Linguagem Natural com PHP

Palestra do Ivo Nascimento na Latinoware sobre processamento de linguagem natural no PHP, isto não existe, e seu projeto de criar algo semelhante com nltk.org (Python?), no github.com/iannsp/texta, o Text Analizer.

TF-IDF: Term Frequency - Inverse Document Frequency: calcula a importância de um termo em um texto.
 - Tokenizacão: no PHP seria um explode, guarda um array
 - Normalizacao: correcão portugues, maiúsculas e minúsculas, ...
 - Stop-words: e, de, mas, o, a .... tirar palavras que não interessam
 - Aprendizado: % das palavras positivas vs negativas

#Hashtags: semântica

N-GRAM: Conjuntos de termos, tokens. Bigram, Trigram, ...
  - Análise: Filtro Bayesiano, Coef. Dice, Qui-quadrado, Coeficiente de Jaccard, coef. Relacão Pearson, Distância Euclidiana...

Last.fm e Grooveshark usam algumas dessas fórmulas matemáticas como Pearson e Dist. Euclidiana para identificar as pessoas semelhantes e sugerir as músicas que elas gostaram uma para outra.

Problemas! Homógrafos, como: Quem casa quer casa... A mesma palavra com sentidos diferentes.

Ele sugeriu o PIP, Python em PHP caso queira usar PHP com o NLTK, também ficou de levantar os slides no slideshare.net/ivonascimento, vamos aguardar.

TDD - Desenvolvimento dirigido por testes

De volta da Latinoware, agora publicar anotações, começando pela palestra assertTrue($tdd); do Alexandre Gaigalas.

Segundo a Wikipedia: Test Driven Development (TDD) ou em português Desenvolvimento dirigido por testes é uma técnica de desenvolvimento de software que baseia em um ciclo curto de repetições: Primeiramente o desenvolvedor escreve um caso de teste automatizado que define uma melhoria desejada ou uma nova funcionalidade. Então, é produzido código que possa ser validado pelo teste para posteriormente o código ser refatorado para um código sob padrões aceitáveis. Kent Beck, considerado o criador ou o 'descobridor' da técnica, declarou em 2003 que TDD encoraja designs de código simples e inspira confiança[1]. Desenvolvimento dirigido por testes é relacionado a conceitos de programação de Extreme Programming, iniciado em 1999,[2] mas recentemente tem-se criado maior interesse pela mesma em função de seus próprios ideais.[3] Através de TDD, programadores podem aplicar o conceito de melhorar e depurar código legado desenvolvido a partir de técnicas antigas.[4]

Após esta breve definição, vamos as minhas anotações. Como você faz pra testar JS ou PHP? Toda vez abre o navegador, preenche trocentos campos validando CPF, data etc e clica em enviar pra ver está funcionando? Há muita perda de tempo nisso, é muito escroto, programador gosta de programar e não gosta de perder tempo fazendo testes, então, por que não criar um software para testar o software?

Método antigo de teste: var_dump($user);
Agora: // var_dump($user);  :D

Os métodos de teste evoluíram muito nos últimos anos, Breakpoints (usava muito isso no Delphi), Watchers, ... chegando ao TDD.

PHPUnit criado por Sebastian Bergman, uma boa ferramenta.

TDD (Test) + BDD (Behavior) + CI (Integração Contínua) = :D

O TDD foi feito para os desenvolvedores, para facilitar a vida deles e melhorar muito a qualidade do software.

Cuidar com Dependency Injection, não conecta ao banco real para testar.

Abaixo os slides da palestra, veja os gráficos dos tempos sem TDD e com TDD, formas de convencer seu chefe a mudar, etc. Confira também o texto do próprio autor em http://php5.net.br/tdd