Sobre Expressões Regulares

Vamos falar um pouco sobre a prática da linguística computacional?

O tema de hoje é algo fundamental para o processamento de linguagem natural: as expressões regulares!

Mas o que diabos é isso? De novo, vamos partir de uma definição da Wikipedia:

Nas ciências da computação e na teoria das linguagens formais, uma expressão regular é uma sequência de caracteres que definem um padrão de busca, usado principalmente para buscas textuais. O conceito surgiu nos anos 50, quando o matemático americano Stephen Kleene formalizou a descrição de uma linguagem regular que se popularizou  ao ser incorporada no processador de texto do sistema Unix.

Ainda hoje, pequenas variações da linguagem regular descrita por Kleene estão no coração dos principais editores de texto, mecanismos de busca e linguagens de programação.

Sem entrar nos pormenores envolvendo teoria da computação, autômatos ou linguagens formais, quero focar na extrema utilidade e elegância das expressões regulares — No fim do post deixarei alguns  links com explicações mais técnicas, para quem se interessar por esse caminho.

deterministic-finite-state-machine
Hoje não vamos falar de autômatos de estados finitos 😦

Podemos pensar nessa ferramenta (também chamada de “regex”) como uma forma simples e elegante de definir padrões de texto. A partir de uma regex, é possível procurar por esse padrão definido em qualquer documento ou conjunto de documentos.

É bem fácil ver a utilidade de uma ferramenta como essa, certo? A imensa quantidade de texto disponível num mundo pós-internet criou uma necessidade também imensa de métodos para explorar e investigar esses documentos.

Por isso, as regex são fundamentais nas áreas de extração de informação (data mining, em português contemporâneo), big data, processamento de linguagem natural, etiquetagem morfossintática, reconhecimento de entidades nomeadas, entre outras. O princípio é o seguinte: uma regex é uma sequência de caracteres. Alguns desses caracteres têm funções específicas e, a partir do padrão desenhado pela combinação desses caracteres, é possível fazer operações, como copiar as partes importantes de um texto e organizá-las em uma tabela.

Por exemplo, se você tivesse um conjunto grande de e-mails formais e quisesse descobrir o nome do destinatário de todos eles… O que você faria?Para resolver essa questão é necessário usar não só as expressões regulares, mas também algum conhecimento linguístico.

Vamos pensar: o nome do destinatário, por convenção, é sempre posto na primeira linha de um e-mail/carta formal, num formato como ‘Caro senhor X’, ‘Cara senhora X’ ou ainda ‘Prezado senhor X’ ou ‘Prezada senhora X’. Além disso, temos outra convenção importante: os nomes próprios são representados com a primeira letra maiúscula.

Em seguida, as questões dessa abordagem: temos que percorrer os dados uma vez para cada uma dessas variações de Caro/Cara/Prezado/Prezada? Isso é bastante ineficiente! Além disso, os nomes próprios são bem traiçoeiros, nenhuma lista contém todas as variações de todos os nomes possíveis do português brasileiro! Como a gente identifica um nome? Uma palavra também pode começar com letra maiúscula se ela for a primeira depois de um símbolo como “!”, “.”, “?” e isso não significa que ela é um nome, certo?

Por fim,  a nossa questão central: como fazemos para o computador capturar esse valor variável que é o nome? E o sobrenome?

Usando uma expressão regular simples, conseguimos captar o nome de qualquer e-mail que comece com algum dos cabeçalhos indicados acima, a expressão é a seguinte:

((Car(a|o)|Prezad(a|o)) (S|s)enho(ra|r)) ([A-Z][a-z]+( )*)+

Nota: essa solução não é a mais curta possível. Eu foquei mais em obter uma resposta legível do que uma resposta compacta.

O primeiro trecho, “((Car(a|o)|Prezad(a|o)) (S|s)enho(ra|r))”, identifica qualquer uma das variações de cumprimento que eu levei em conta. As expressões regulares são bem eficientes em lidar com a ideia de alternativa e o símbolo “|” expressa essa noção (como um bom operador Booleano): ou o que está à esquerda ou o que está à direita dele. Com isso, as variações são todas contempladas de uma única vez pela expressão.

O segundo trecho, muito mais condensado, é o que efetivamente captura o nome. “([A-Z][a-z]+( )*)+” identifica o seguinte padrão:

1- Uma letra maiúscula “[A-Z]” seguida por

2- Uma ou mais letras minúsculas “[a-z]+” seguidas por

3- Zero ou mais espaços  “( )*”.

4 – Repita esse processo enquanto for possível  (representado por aquele “+” no fim).

Isso faz com que a expressão identifique nomes e sobrenomes, se houver.

Note o poder expressivo dessa pequena série de caracteres. Esse é o motivo pelo qual as expressões regulares são absolutamente indispensáveis hoje para diversas áreas.

regular_expressions
XKCD já adianta: regex salvam vidas!

Ficou com vontade de estudar mais? Seguem alguns links úteis!

1 –  Regular Expressions —Wikipedia

Mais uma vez, a página da Wikipedia é um ótimo lugar para se ter um panorama sobre o assunto. É um artigo um tanto quanto técnico, ideal para quem quer entender um pouco melhor como a coisa toda funciona.

2 – Capítulo do livro Speech and Language Processing — Jurafsky & Martin

Ótima explicação, pensando no caso da aplicação na linguística computacional mesmo. Bem técnico, mas tem a vantagem de, ao contrário da Wikipedia, pensar num público alvo específico e destacar as aplicações dessa técnica para a linguística computacional. O melhor? Disponível de graça na internet!

3 – Testador de expressões regulares

Uso bastante esse site para ir construindo uma expressão regular aos poucos. A vantagem é que você escolhe os textos em que quer fazer a busca e, conforme escreve a expressão, dá pra ver ao vivo o que está sendo selecionado no texto. Grande recurso!

 

Bônus — Regex Golf

Na verdade, as regex são praticamente a base de um culto. Existe uma modalidade chamada Regex Golf, que eu conheci através do monstro Peter Norvig, em que o desafio é criar uma expressão que identifique todos os membros de um grupo de palavras e nenhum do outro grupo. Recomendo o link para uma discussão leve e extremamente produtiva sobre esse tópico.

Bônus 2 – Abecedário de regex

Nessa página, temos um resumão contendo todos os comandos de regex! Para imprimir e ter sempre à mão!

 

((A|a)braç(o|os)|(B|b)eij(o|os)\!+)

 

Anúncios

Quando o computador aprende: o que é machine learning?

Machine learning (normalmente traduzido como aprendizado de máquina) é uma área da Inteligência Artificial que trata das técnicas usadas para moldar as ações do um agente com base em determinados dados observados.

O princípio é  melhorar o desempenho de um modelo ou de um programa em uma determinada tarefa a partir de treinamento. Ou seja, mais ou menos como um ser vivo que aprende com a experiência, um determinado programa aprende e melhora seu desempenho em uma tarefa depois de ser treinado nela.

É uma ideia poderosa, certo? E realmente isso é uma coisa impressionante. Hoje você consegue, através da aplicação de técnicas diversas de aprendizado de máquina, fazer um programa que reconhece o que é um rosto em uma foto (porque o programa aprende o que é um rosto), um mecanismo que recomenda os filmes mais interessantes para uma pessoa com um determinado perfil, ou até mesmo um sistema que sabe que um determinado e-mail é um spam, sem que o usuário precise pensar nisso.

Mas, antes de nos aprofundarmos um pouco mais nesse mundo, é necessário fazer uma separação importante: Lembram o exemplo que eu dei no começo desse texto, comparando o aprendizado de máquina com o aprendizado de um ser vivo? Bom, ele funciona para fins ilustrativos, mas, na prática, a coisa é bem mais complicada.

Em primeiro lugar, computadores e seres vivos são coisas muito diferentes, muito diferentes mesmo. É importante lembrar que um ser vivo é fruto de um processo de milhões de anos de evolução e o computador é um objeto criado pelo homem. Todas as comparações entre objetos tão diferentes precisam ser feitas com muito mais cuidado do que normalmente se vê por aí.

Ainda não sabemos exatamente como os seres vivos aprendem: não chegamos na fórmula matemática que descreve o funcionamento dos processos cognitivos envolvidos com exatidão e sem ambiguidades; o problema é que um computador precisa justamente de uma fórmula matemática exata e sem ambiguidades para funcionar, então o que chamamos de aprendizado de máquina é nada mais do que uma metáfora do processo cognitivo.

Chamamos de aprendizado, mas isso não significa que o seu computador vai começar a aprender a pensar, ou que ele vai aprender a dar a patinha.

large-icon
Infelizmente, isso não é  Machine learning.

O aprendizado de máquina que estamos falando na verdade está muito mais para estatística inferencial e modelos  probabilísticos do que qualquer outra coisa.

O aprendizado de máquina do qual estamos falando, como visto por exemplo no sistema de recomendação da Netflix, na verdade está muito mais próximo do que chamamos de estatística inferencial e do conceito de modelos probabilísticos do que disso.

toptal-blog-image-1407513802706
Isso é machine learning no mundo real.

A ideia é que um determinado agente, a partir de um determinado treinamento e de um determinado modelo de aprendizagem, irá executar uma ação. Para isso, precisamos de alguns objetos que vão configurar o cenário de aprendizado de máquina:

1 – Agente: esse é o objeto que executa alguma ação.

2 – Dados para treinamento: Para que o mecanismo funcione, é importante ter uma coleção (de modo geral, quanto maior, melhor) de dados que servirão como um gabarito para o nosso agente. Ele irá se basear nos dados de treinamento para executar a tarefa de forma aprimorada.

3-  Modelo de aprendizagem: Esse objeto é o que transforma os dados usados para o treino em alguma coisa útil para o agente. O que temos aqui é algum modelo probabilístico que, a partir do que foi oferecido no treino, irá atribuir probabilidade para novas observações.

Isso pode ser esquematizado assim:

machine-learning-for-dummies-4-638
Aqui é possível ver todos os envolvidos num processo de aprendizagem de máquina.

Repare: é possível fazer infinitos tipos de modelos de aprendizagem, por isso existem aplicações tão diversas desse tópico no mundo de hoje. O curioso é que o princípio de funcionamento de todas as aplicações mostradas estão contidos neste esquema.

Espero que o panorama apresentado aqui seja o suficiente para uma discussão introdutória sobre o assunto. No próximo post, irei apresentar alguns bons materiais para quem quer começar a estudar esse tópico.

 

Como eu aprendi Python – compartilhando ferramentas

Aprender a programar foi uma das experiências acadêmicas mais legais que eu já tive. Comecei a estudar mais sistematicamente há quatro anos e, desde então, encontrei diversos materiais que me ajudaram a sair de um estágio de completo leigo para alguém que programa diariamente.

python-logo
A linguagem dos campeões!

A linguagem de programação que me indicaram para começar a aprender foi Python, que é, ao mesmo tempo, muito amigável com iniciantes, e bastante poderosa e versátil para quem já tem algum domínio. Ainda farei um post só sobre essas vantagens, com foco no que a linguagem tem de melhor para nós linguistas!

A quantidade de material de Python que se consegue encontrar na internet é enlouquecedora. Em parte, isso se deve não só ao sucesso da linguagem, mas também ao fato de que a comunidade de programadores Python é conhecida pela colaboração e pela defesa ferrenha da troca livre de ideias. Justamente pelo excesso de material, a ideia desse post é dar uma ajuda na hora de escolher o caminho que você vai seguir.

Em primeiro lugar, uma lista antes da lista:

A- Essa lista é voltada para pessoas que são novas no mundo da programação.

B- A quantidade de coisas que dá pra aprender sobre Python é muito grande!

C- Essa não é uma daquelas listas de “Aprenda Python em 24 horas” ou ”Ganhe dinheiro aprendendo a programar”. Minha intenção é compartilhar ferramentas que foram extremamente produtivas no meu caminho do aprendizado de programação.

D- Aprender a programar é pura diversão, mas as aplicações são MUITAS e as áreas são muito diferentes. Então, antes de começar, que tal pensar qual é realmente o seu objetivo e qual será a aplicação da programação para você? Assim, fica mais fácil escolher qual livro começar ou para qual curso você deve se dedicar mais.

Agora, ao trabalho! Eu separei os materiais que usei para aprender Python e que me foram indicados por professores, amigos e pela gloriosa internet. Falo um pouco de cada um e quero deixar bem claro: a lista é aberta! Meus estudos em Python não estão nem perto do fim!

As Ferramentas:

81lkwoe38tl

Livro: Think Python – How to think like a computer scientist – Allen B. Downey (O’reilly Media, 2012)

Meu primeiro contato bem-sucedido com programação e Python veio com esse livro. É uma ótima introdução à linguagem, ao mesmo tempo que é gentil (em oposição a ser assustador) pra te mostrar conceitos fundamentais de lógica de programação.

Ah, tem uma versão em português também disponível aqui! Além de uma tradução nova, que coloco aqui assim que estiver disponível.

 

logo_blue_dark

Curso: Python – codecademy

Esse curso do codecademy é muito bacana e amigável com iniciantes, é interativo e faz você trabalhar com muitos conceitos fundamentais através de exercícios. É um recurso complementar leve e extremamente didático ao Think Python.

 

9780262519632

Curso e livro: Introduction to Computer Science and Programming (MIT OpenCourseWare) e Introduction to Computation and Programming using Python – John B. Guttag (MIT Press, 2013)

Estou fazendo esse curso agora. Eu cheguei a fazer uma introdução às ciências da computação na USP, usando C (poucas saudades do C, mas o curso foi muito bom!), mas recomendo esse curso no lugar. Além além de aprender Python aqui, você vai aprender a ciência por trás, os conceitos fundamentais que te transformam não em alguém capaz de seguir receitas, mas em alguém que consegue pensar computacionalmente. Além dos vídeos disponíveis gratuitamente, tem o livro que é base do curso. Estou achando bem interessante!

iipp_icon

Curso: Interactive Programming with Python (Coursera)

Esse curso ensina diversos conceitos fundamentais de Python e programação através das aulas bem descontraídas (mas não é brincadeira, o curso é bem puxado) com projetos semanais que são um baita diferencial: fazer um jogo por semana como exercício. Então você aprende a programar e tem ali um resultado bem palpável, seja um jogo de adivinhar números ou de atirar em cometas.


 

Além dessas ferramentas que me diverti usando, ainda é possível encontrar inúmeras outras. Eu recomendo que o programador iniciante dê uma procurada nos seguintes lugares:

1 – Wiki da comunidade Python Brasil – Aqui tem tudo o que você vai precisar! Além disso, mostra um dos pontos mais fortes dessa linguagem de programação: a comunidade.

2-  O grupo Python Brasil no Facebook – Já que todo mundo passa tanto tempo na rede social, por que não aproveitar para dar uma olhada em artigos, discussões e sugestões reunidas nesse grupo bem ativo?

3- Fórum da comunidade Python Brasil – Para quem prefere o formato de fórum, aqui também se tem acesso aos mais diversos conteúdos sobre Python.

4- A documentação da linguagem Python – Todas as informações específicas que você poderia querer do funcionamento básico da linguagem Python estão aqui.

5 – Stackoverflow – Os acentos do texto que você está tentando abrir no Python saíram todos desconfigurados? Quer saber como ordenar as chaves de um dicionário de acordo com o valor em ordem numérica decrescente? Aqui é o lugar onde você vai achar todas as respostas às suas dúvidas específicas, uma meca digital onde todos os programadores do mundo se ajudam.

Espero que esses materiais ajudem!

print(‘Ni!’)

giphy-facebook_s

Sobre ser autodidata

Impossível começar a falar sobre o assunto sem ser brutalmente honesto: é muito difícil ser autodidata.

Hoje, basta um computador com internet para poder se enfiar nos self-studies, mesmo com todo o material do mundo disponível (seja através dos MOOCs [CourseraedX] que te dão acesso à aulas das melhores universidades do mundo ou dos reservatórios russos de livros com um potencial praticamente ilimitado) eu ainda sustento que é muito difícil ser autodidata.

O problema não é a falta de conteúdo. Hoje, claramente as dificuldades são incomparáveis com as dificuldades de 30 anos atrás, eu mal consigo imaginar como alguém conseguia bancar a ideia de ser autodidata antes da internet, tendo que ir garimpar materiais em bibliotecas, livrarias e sebos.

cabe num pen-drive
é assim que as pessoas faziam?

Além disso, cabe uma reflexão: na faculdade, tudo o que você aprendeu veio estritamente daquilo visto em aulas expositivas e bibliografia? A experiência de aprender também tem um aspecto de socialização que é inegável: conhecer colegas, conversar a respeito das matérias, ouvir as dúvidas que outras pessoas tiveram assim como as respostas. Tudo isso é essencial para o aprendizado. Na verdade, é tão importante que as plataformas de ensino online tentam simular alguns desses aspectos com os fóruns de discussão.

Provas, grades horárias definidas por especialistas e titulações são (ainda que nem sempre) ferramentas que auxiliam muito o aluno. A falta de coesão curricular e de objetivo (que eu quero explorar um pouco mais nas dicas) podem jogar meses de estudo fora e frustrar completamente alguém que está a fim de estudar uma coisa nova. Mas ao mesmo tempo, o engessamento do ensino institucionalizado também pode matar todo o seu tesão por estudar alguma coisa.

quem acredita em citações da internet?

Ser autodidata é difícil porque não existe diploma (apesar de existirem certificados), não existe uma garantia de que você está estudando aquilo que vai ser útil para você, e também não existe a mentalidade do mínimo esforço pelo certificado, o que você aprendeu você aprendeu.

Minha intenção não é defender um tipo de aprendizado no lugar do outro. Acho que o ensino presencial e institucionalizado e o auto-ensino feito à distância podem e devem complementar um ao outro. Eu acredito tanto nisso que eu levo a minha formação nas duas frentes, ao mesmo tempo. Minha formação em linguística foi bastante formal, na faculdade de letras, mas meus estudos em estatística, lógica e programação foram tocados de modo bastante (mas não totalmente) autônomo.

A importância do autodidatismo vai crescer muito nos próximos anos. Acredito que seja fundamental começar a se preparar pra isso: escolher um tópico legal e ir atrás de cursos.

Dito isso, vou listar algumas dicas que eu gostaria de ter lido quando eu fui começar a estudar coisas por conta.

  • Tenha um foco: se é um concurso, uma prova, um projeto ou um trampo, foque os estudos. A variedade de material é tanta que se você adentrar sem algum foco, é bem capaz de ficar patinando. Descobrir coisas novas, mas ser ir a fundo em nenhuma delas, pode ser interessante, mas a chance de você se frustrar e não conseguir levar nada adiante é muito grande.
  • Tenha tempo e ritmo: lembra de todas aquelas dicas que te davam na escola sobre como estudar pro vestibular? Elas se aplicam aqui – ao quadrado! Não adianta tocar os self-studies de qualquer jeito, Concentração é fundamental. Reserve umas horas só para estudar. Se os certificados de cursos online ainda não valem muita coisa no mundo profissional (mas isso deve mudar!) o que tem que ficar claro é isso: o importante é dominar o conteúdo. Para isso não dá pra correr: Não dá pra fazer um curso em uma maratona de um dia de estudo, tem que ter um bom ritmo, aprendendo e treinando um pouco ao longo de semanas.
  • Tenha curiosidade: Acho que a parte mais legal de conduzir os self-studies é que se um assunto te interessa, você pausa a aula, vai atrás da bibliografia, compra/baixa 3 livros sobre o assunto, abre 6 abas com definições, artigos e matérias. O poder disso é impressionante, o controle sobre a sua própria formação finalmente está com você.
  • Tenha um cronograma: Os cursos bem estruturados já oferecem um cronograma sugerido, mas sempre é bom você ter o seu, encaixado na sua própria rotina, se impondo o tempo para terminar um curso e partir pro próximo.

Nos próximos posts, vou exemplificar melhor como estudo cada um dos temas, com links e comentários para ajudar em específico quem quer estudar linguística computacional e programação.

Como começar a estudar Linguística Computacional?

Bom, como eu disse no último post, agora é a hora de fazer algumas indicações sobre como começar a estudar linguística computacional.

Os caminhos são muitos. O que eu posso e quero fazer aqui é compartilhar o que eu fiz, o que achei mais difícil e, principalmente, o que funcionou pra mim e recomendo.

Tive a sorte de fazer parte de um grupo de estudos que se mantém já há uns 4 anos na ativa. Dito isso, fica a primeira dica para quem quer começar a estudar linguística computacional: junte-se com outras pessoas que querem estudar.

Por ser uma área que une campos de estudo que não têm muito contato por aqui, seu aprendizado com certeza vai ser mais proveitoso se compartilhado com colegas que possuem seus próprios backgrounds, experiências e visões.

Nesse aspecto, é importante ressaltar: a Internet e as redes sociais podem ser ótimas ferramentas! Apesar disso, eu sou partidário de começar com o uso de um método de estudo mais antigo: ler.

Nessa primeira incursão, indico alguns livros (e um curso) que falam um pouco de tudo isso: linguística, estatística, computação e linguística computacional. No entanto, esses livros assumem conhecimentos prévios mais específicos ou menos.

1 – Language and Computers – Markus Dickinson, Chris Brew e Detmar Meurers (Wiley-Blackwell, 2012)

ehep002779
Esse livro é a introdução mais amigável ao assunto para quem não possui conhecimentos específicos em ciência da computação ou em linguística.
É uma boa forma de começar a pensar e conhecer as principais questões e aplicações do campo.Os autores apresentam os tópicos pensando em mostrar um panorama geral, com algumas sessões do livro apresentando o que realmente está acontecendo “por baixo dos panos” (ou seja, a parte mais técnica da discussão).
Esse era o livro que eu queria ter lido quando comecei a estudar linguística computacional, minha vida teria sido bem mais fácil!
2- Natural Language Processing with Python – Steven Bird, Ewan Klein e Edward Loper (O’Reilly Media, 2009)
51j6jcrbd-l-_sx258_bo1204203200_
Esse foi o primeiro livro sobre linguística computacional com o qual eu trabalhei. É muito bacana, pois logo no primeiro capítulo você já está com a mão na massa, fazendo a lista de palavras mais frequentes em Moby Dick (alguém chuta qual é a número 1?) e brincando com processamento de linguagem em Python. É um livro de receitas que traz boas explicações.
Mas, peraí! Eu já sabia Python quando peguei esse livro?
 Não! E acho que esse foi o meu maior problema. Começar já colocando a mão na massa é muito divertido, mas eu, por ser linguista de formação e não saber patavinas de programação antes de ir pra essa área, acabei achando muito difícil entender de verdade o que eu estava fazendo, o que o computador estava fazendo e quais eram os meus objetivos a longo prazo.
Se você já conhece Python com alguma segurança e já tem alguma noção de linguística, esse livro vai te levar longe, e você realmente vai se divertir com os exercícios. Mas se esse não for o caso, eu recomendo usar esse livro como um apoio (principalmente por causa dos exercícios) e ir atrás de outras fontes para aprender mais sobre linguística, programação e estatística.
3 – Speech and Language Processing – Daniel Jurafsky e James H. Martin (Prentice Hall, 2008)
41m9fu8xtvl-_sx258_bo1204203200_
Não sou religioso, mas aqui está a sua bíblia.
Esse livro descreve para cientistas da computação toda a área dalinguística computacional.
Primeiro apresenta como esse campo de estudo lida com todas as áreas clássicas da linguística formal (fonética, fonologia, morfologia, sintaxe e semântica), apresentando também os tipos de modelos matemáticos e estatísticos mais usados.
Depois, o livro foca em apresentar como funcionam os princípios por trás dos mecanismos mais bem-sucedidos de todas as áreas da linguística computacional: tradução automática, extração automática de informação, sumarização e outras.
É a principal referência na área. Só não é para iniciantes completos (se você nunca programou na vida, por ex.), então pode acabar gerando dor de cabeça e dar a sensação de que a linguística computacional é inacessível.
Se você já está calejado com a matemática e a programação (na verdade esse livro é menos sobre implementações do que sobre explicar o funcionamento dos algoritmos), esse daqui é o livro certo para se agarrar.
Além disso, o curso de Stanford de Processamento de linguagem natural do Coursera é bastante apoiado nas noções apresentadas nesse livro. É material muito bom mesmo!
4 – Foundations of Statistical Natural Language Processing – Christopher Manning e Hinrich Schütze (MIT Press, 1999)
fsnlp-bigger
O outro livro fundamental da área. Junto com o item 3, compõe o grande repositório de teoria da linguística computacional.
Mais ainda do que o item 3, esse livro não é recomendado para um público leitor leigo:  Apesar de ser um material para o qual eu volto constantemente se preciso entender alguma fórmula, procurar algum conceito ou resolver algum problema, é um livro bastante árido.
É impossível não colocar ele numa lista de livros sobre processamento de linguagem natural, porque ele tem muito conteúdo de qualidade para a área. Mas não é um livro que eu recomendaria para alguém que está entrando em contato com linguística computacional. Se você não é formado em ciências da computação, com uma boa base de estatística, cálculo e teoria da informação, vai ser uma leitura muito complicada.
————————————————————————
Como vocês devem ter notado, infelizmente esses materiais só estão disponíveis em inglês. Por falar nisso, que tal ver por aqui algumas traduções do que vem sendo publicado por aí? Vamos aumentar a quantidade de material dessa área disponível de graça e em português!
Nos próximos posts, eu também vou tentar reunir alguns materiais bons para o estudo de Programação (além de pregar o uso de Python para isso!), de estatística e de linguística. Infelizmente não é fácil encontrar materiais sobre todas essas áreas reunidos num lugar só.
Até lá!
PS: A palavra mais comum em Moby Dick é… ‘the’. Mais sobre isso num futuro próximo!

Linguística computacional – o que é?

Começando esse post com um pouco de Wikipedia:

“A Linguística Computacional ou Processamento de língua natural (PLN, em inglês Natural Language Processing, sigla NLP) é um campo multidisciplinar que envolve a Inteligência Artificial, a Informática, a Estatística e a Linguística e que se utiliza de processos computacionais para manipulação da linguagem humana. Os linguistas computacionais almejam desenvolver, através de modelos lógico-formais ou estatísticos de línguas naturais, sistemas com capacidade de reconhecer e produzir informação apresentada em linguagem natural.”

Bom, no geral é bem isso mesmo. Mas, calma, a gente pode ir um pouco além!

Estudar a linguagem humana é uma empreitada e tanto. Uma consequência da complexidade dessa empreitada é a miríade de abordagens diferentes que temos na linguística: você pode explicar fatos da língua olhando para a sociedade, para o indivíduo, para a relação entre indivíduo e sociedade ou para a espécie do indivíduo (entre outras visões). Todas essas abordagens têm razões, objetivos, sucessos e, também, problemas próprios.

O processamento de linguagem natural é fruto do encontro de inovações tecnológicas (grandes quantidades de dados de língua disponíveis, associadas ao processamento cada vez mais barato e poderoso) com questionamentos (como funciona a língua?) e possibilidades (podemos construir algo que entenda língua?) que já existiam.

Cabe ao linguista computacional fazer essa ponte.

Essa ligação passa justamente por modelar a língua e por, a partir desses modelos, desenvolver aplicações e tecnologias.

As aplicações são muitas, e com certeza você topa com elas diariamente. Tradução automática, correção automática de erros de digitação, pesquisa de documentos na internet, reconhecimento e síntese de voz… A lista é longa, e justifica o destaque que a área tem recebido nos últimos anos.

objavljen-program-ovogodisnjebabel-fish-konferencije-valicon-knowledge-club
Babel Fish – Tradutor automático universal: um sonho antigo!

Os linguistas computacionais nem sempre são linguistas. Na verdade, atualmente grande parte dos pesquisadores da área são cientistas da computação. Só mais recentemente que apareceram alguns esforços por parte dos linguistas de tentar participar das discussões.

Por mais interessante que seja, a composição histórica do campo é assunto para outro post.

A linguística computacional é uma área científica com aplicações amplas e variadas. As disciplinas envolvidas são uma mostra de como essa é uma vertente que ainda tem muita coisa pra ser explorada. No próximo post, vou indicar alguns materiais bacanas para linguistas, programadores e leigos começarem a se divertir com esse universo.

Até lá!