iniciação à programação (em humanidades) pablo...

83
Ferramentas PLN Linguakit Introdução à linha de comandos Linux Linguagens de programação Introdução a Perl Tokenizador Iniciação à programação (em Humanidades) Pablo Gamallo Centro de Investigação em Tecnologias da Informação (CITIUS) Universidade de Santiago de Compostela Programa de Doutormento de Linguística Doutoramento Intro

Upload: lamthu

Post on 08-Feb-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Ferramentas PLNLinguakit

Introdução à linha de comandos LinuxLinguagens de programação

Introdução a PerlTokenizador

Iniciação à programação (em Humanidades)

Pablo Gamallo

Centro de Investigação em Tecnologias da Informação (CITIUS)Universidade de Santiago de Compostela

Programa de Doutormento de Linguística

Doutoramento Intro

Page 2: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Ferramentas PLNLinguakit

Introdução à linha de comandos LinuxLinguagens de programação

Introdução a PerlTokenizador

Objectivos

Aproximação ao ecossistema de programação emPLN.Primeiros passos na programação em linguagem descripts.

Doutoramento Intro

Page 3: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Ferramentas PLNLinguakit

Introdução à linha de comandos LinuxLinguagens de programação

Introdução a PerlTokenizador

Breve bibliografia

Levi Lúcio, Vasco Amaral (2001), Programação em PERL, FCA-Editora de Informática.

Hammond, Michael (2003), Programming for linguistics: Perl for language researchers, BlackwellPublishing.

Tanguy, Ludovic (2007), Perl pour les linguistes, Hermès - Lavoisier.http://perl.linguistes.free.fr/

Doutoramento Intro

Page 4: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Ferramentas PLNLinguakit

Introdução à linha de comandos LinuxLinguagens de programação

Introdução a PerlTokenizador

Índice de conteúdos

1 Ferramentas PLN

2 Linguakit

3 Introdução à linha de comandos Linux

4 Linguagens de programação

5 Introdução a Perl

6 Tokenizador

Doutoramento Intro

Page 5: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Ferramentas PLNLinguakit

Introdução à linha de comandos LinuxLinguagens de programação

Introdução a PerlTokenizador

Índice de conteúdos

1 Ferramentas PLN

2 Linguakit

3 Introdução à linha de comandos Linux

4 Linguagens de programação

5 Introdução a Perl

6 Tokenizador

Doutoramento Intro

Page 6: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Ferramentas PLNLinguakit

Introdução à linha de comandos LinuxLinguagens de programação

Introdução a PerlTokenizador

Ferramentas para o Processamento daLinguagem Natural

Análise

morfo-sintáctica(PoS-taggers)

sintáctica (parsers)

concordâncias

Extracção

termos

entidades

relaçõessemânticas

conceitos

opiniões

Utilidades

resumo

erros / correção

(tradução)

Doutoramento Intro

Page 7: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Ferramentas PLNLinguakit

Introdução à linha de comandos LinuxLinguagens de programação

Introdução a PerlTokenizador

Ferramentas para o Processamento daLinguagem Natural

Análise

morfo-sintáctica(PoS-taggers)

sintáctica (parsers)

concordâncias

Extracção

termos

entidades

relaçõessemânticas

conceitos

opiniões

Utilidades

resumo

erros / correção

(tradução)

Doutoramento Intro

Page 8: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Ferramentas PLNLinguakit

Introdução à linha de comandos LinuxLinguagens de programação

Introdução a PerlTokenizador

Ferramentas para o Processamento daLinguagem Natural

Análise

morfo-sintáctica(PoS-taggers)

sintáctica (parsers)

concordâncias

Extracção

termos

entidades

relaçõessemânticas

conceitos

opiniões

Utilidades

resumo

erros / correção

(tradução)

Doutoramento Intro

Page 9: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Ferramentas PLNLinguakit

Introdução à linha de comandos LinuxLinguagens de programação

Introdução a PerlTokenizador

Índice de conteúdos

1 Ferramentas PLN

2 Linguakit

3 Introdução à linha de comandos Linux

4 Linguagens de programação

5 Introdução a Perl

6 Tokenizador

Doutoramento Intro

Page 10: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Ferramentas PLNLinguakit

Introdução à linha de comandos LinuxLinguagens de programação

Introdução a PerlTokenizador

LinguaKit

Uso Web: https://linguakit.comInstalação do código fonte:https://github.com/citiususc/Linguakit

Doutoramento Intro

Page 11: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Ferramentas PLNLinguakit

Introdução à linha de comandos LinuxLinguagens de programação

Introdução a PerlTokenizador

Índice de conteúdos

1 Ferramentas PLN

2 Linguakit

3 Introdução à linha de comandos Linux

4 Linguagens de programação

5 Introdução a Perl

6 Tokenizador

Doutoramento Intro

Page 12: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

3. Introdução à linha de comandosGNU/Linux

Pablo Gamallohttp://gramatica.usc.es/~gamallo/

Page 13: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Titoriais

http://aurelio.net/shell/

http://www.smaldone.com.ar/documentos/misdocs/tutorial-gnu-linux/

Page 14: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXAlguns comandos básicos

- ls (lista os ficheiros e subdirectórios do directório actual)

- pwd (rota actual)

- mkdir (criar um subdirectório)

- cd (câmbio de directório)

- echo “olá” > prova.txt (criar um ficheiro de texto)

- cp, mv (copiar, mover e renomear ficheiros)

- rm (borrar ficheiros)

- cat (ler o conteúdo de um ou vários ficheiros de entrada)

- wc (conta linhas, palavras e caracteres dos ficheiros de entrada)

Page 15: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXPrimeira práctica

- cria o subdirectório “corpus” (mkdir)

- coloca-te no subdirectório “corpus” (cd)

- cria nesse directório um ficheiro “prova.txt” que contenha o texto “isto é uma prova” (echo)

- copia o ficheiro “prova.txt” criando outro chamado “prova2.txt” (cp)

- renomea o ficheiro “prova.txt” como “prova1.txt” (mv)

- lê o conteúdo do ficheiro “prova1.txt” (cat, more)

- conta as linhas, palavras e caracteres de “prova1.txt” (wc)

- apaga o ficheiro “prova1.txt” (rm)

Page 16: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXPrimeira práctica

Fai o mesmo utilizando ferramentas do sistema gráfico e editores de texto como

gedit e OpenOffice

- Para listar, mover-te na hierarquia de directórios e criar novos

subdirectórios, utiliza um navegador.

- Para criar novos ficheiros, utiliza o editor gedit.

- Para contar palavras e caracteres, utiliza OpenOffice.

Page 17: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXSegunda práctica

Objectivo:Procurade “El Quijote” por Internet,

guardade o ficheiro no directório “Corpus”

visualizade o ficheiro na consola

e contade as palavras e caracteres do texto

- busca com Firefox no site http://www.gutenberg.org/

- borra o metatexto que não pertence ao livro de Cervantes

- fai a contagem com OpenOffice e com o comando wc

- fazede o mesmo com cat usando a técnica dos pipes “|”

- provade também o comando more

Page 18: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXSegunda práctica

- visualizade o ficheiro: cat ElQuijote.txt

- visualizade o ficheiro pantalha a pantalha:more ElQuijote.txt

- Contade as linhas, palavras e bytes dum ficheiro:wc ElQuijote.txt

Page 19: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXSegunda práctica

O shell permite a construção de comandos complexos através da combinação de vários comandos simples. O operador "|", conhecido como pipe, ou tubo, permite conectar a saída de um comando à entrada de outro.

cat ElQuijote.txt | more

cat ElQuijote.txt | wc

Page 20: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXSegunda práctica

Como está codificado o ficheiro ElQuijote.txt ?

- lê o ficheiro com o comando cat - comproba a codificação: “file --mime”- a codificação é Latin 1 (ISO-8859-1).

- como o comando cat da shell lê o texto como se estivesse

codificado em Unicode, devemos convertir o texto do ficheiro

ao código Unicode (UTF-8)

cat ElQuijote.txt | iconv -f ISO-8859-1 -t UTF-8 -c

Na seguinte prática, simplificaremos o procedimento

Page 21: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXTerceira práctica

Objectivo:Cria 2 ficheiros executáveis:

- de Latin 1 a Unicode

- de Unicode a Latin 1

1. Cria um ficheiro LatinToUnicode.x contendo o seguinte comando:

iconv -f ISO-8859-1 -t UTF-8 -c2. Cria um ficheiro UnicodeToLatin.x contendo o seguinte comando:

iconv -f UTF-8 -t ISO-8859-1 -c

Page 22: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXTerceira práctica

Podemos dar três tipos de permissões aos ficheiros:- Podem ser lidos,- Podem ser escritos- Podem ter código executável

chmod +r ficheiro (permite a leitura)

chmod +w ficheiro (permite a escrita)

chmod +x ficheiro (permite a execução)

Page 23: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXTerceira práctica

Já podemos convertir o ficheiro codificado em Latin 1 a Unicode:

cat ElQuijote.txt | ./LatinToUnicode.x > ElQuijote_Unicode.txt

Page 24: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXQuarta práctica

Objectivo: Conta o número de ocorrências das expressões:“Quijote”, “Don Quijote”, “Sancho”, “Sancho Panza”, “Dulcinea”, “Dulcinea del Toboso”, ...

cat ElQuijote_Unicode.txt | grep “Quijote” | wc

Comando “grep”: selecciona as linhas do texto que contenham uma sequência de caracteres (ou string) específica

Page 25: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUXOutros comandos de interesse

head -N (escreve as primeiras N linhas do texto)

tail -N (escreve as últimas N linhas do texto)

head -N | tail -1 (escreve a N linha)

head -5 (escreve as primeiras 5 linhas do texto)

tail -11 (escreve as últimas 11 linhas do texto)

head -12 | tail -1 (escreve a linha 12)

Page 26: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUX Quinta práctica

Objectivo: Criar um ficheiro executável, chamado “linha.x”, que escreva a linha do texto que lhe digamos.

cat ElQuijote_Unicode.txt | ./linha.x 5 (escreve a linha 5 do texto)

Solução:

head -$1 | tail -1

Page 27: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUX Sexta práctica

Objectivo: Criar um ficheiro executável, chamado “linhas.x”, que escreva as linhas do texto que lhe digamos.

cat ElQuijote_Unicode.txt | ./linhas.x 10 3 escreve as 3 últimas linhas até chegar à linha 10 (de 8 a 10)cat ElQuijote_Unicode.txt | ./linhas.x 33 10 escreve as 10 últimas linhas até chegar à linha 33 (de 24 a 33)

Solução:

head -$1 | tail -$2

Page 28: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUX Séptima práctica

Objectivo: melhorar o “linhas.x” para criar linhas2.x

cat ElQuijote_Unicode.txt | ./linhas2.x 3 10 escreve da linha 3 à linha 10cat ElQuijote_Unicode.txt | ./linhas2.x 10 33 escreve da linha 10 à linha 33

Solução:

((N = $2 - $1 + 1))head -$2 | tail -$N

Page 29: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUX Séptima práctica

Outra maneira de fazer linhas2.x

((N = $2 - $1 + 1))linhas.x $2 $N

Colocade “linhas.x” num directório /bin

Page 30: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUX Mais práticas

Podedes praticar mais em:

http://aurelio.net/shell/apostilha-introducao-shell.pdf

http://es.tldp.org/Manuales-LuCAS/AA_Linux_colegio-

1.1/AA_Linux_colegio-1.1-html/x3772.htm

http://www.ppgia.pucpr.br/~maziero/ensino/sei/shell-bash-basico.html

http://www.openslack.org/~piterpk/artigos/aposhell.ps

Page 31: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

GNU/LINUX Comandos mais interessantes para processamento de texto

cat : concatena diversos arquivos.

tac : idem, mas inverte a ordem das linhas.

more : permite a paginação.

tr : troca de caracteres entre dois conjuntos.

head : seleciona as "n" linhas iniciais.

tail : seleciona as "n" linhas finais.

wc : conta o número de linhas, palavras e bytes.

sort : ordena as linhas segundo critérios ajustáveis.

uniq : elimina linhas repetidas, deixando uma soa linha.

sed : para operações complexas de strings (trocas, etc).

grep : selecciona linhas contendo uma determinada expressão.

cut : selecciona colunas do fluxo de entrada.

rev : reverte a ordem dos caracteres de cada linha.

Page 32: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

4. Lenguajes de

programación

Page 33: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Criterios de clasificación

según su nivel de abstracción

según la forma de ejecución

según el paradigma de programación

según el propósito u objetivo

Page 34: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Clasificación según:

Nivel de abstracción

lenguajes de bajo nivel

lenguajes de medio nivel

lenguajes de alto nivel

Page 35: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Lenguajes de bajo nivel

Los lenguajes de bajo nivel son lenguajes de programación que se acercan al funcionamiento de una computadora.

El lenguaje de más bajo nivel es el código máquina.

A éste le sigue el lenguaje ensamblador. Al programar en ensamblador se trabajan con los registros de memoria de la computadora de forma directa.

Page 36: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Lenguajes de medio nivel

Un lenguaje de medio nivel (como es el caso del lenguaje C) tiene ciertas características que lo acerca a los lenguajes de bajo nivel: pueden acceder a registros de memoria,

y al mismo tiempo, tiene ciertas cualidades que lo hacen un lenguaje más cercano al humano y, por tanto, de alto nivel.

Page 37: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Lenguajes de alto nivel

Los lenguajes de alto nivel son normalmente fáciles de aprender porque están formados por elementos de lenguajes naturales, como el inglés: IF, ELSE, WHILE, THEN, FOR, etc.

Page 38: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Lenguajes de alto nivel

* Ada

* ALGOL

* Basic

* C++

* Clipper

* COBOL

* Fortran

* Java

* Modula-2

* Pascal

* PHP

* PL/SQL

* Perl

* Prolog

* Python

* Ruby

* Lenguajes funcionales

- Haskell

- Lisp

Page 39: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Clasificación según:

Forma de ejecución

Para ejecutar un programa fuente que se escribe en un lenguaje de alto nivel, tiene que traducirse o interpretarse en un código que pueda utilizar la máquina (código máquina).

lenguajes compilados

lenguajes interpretados

Page 40: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Lenguajes compilados

Un lenguaje compilado traduce todo el programa fuente que se quiere ejecutar en un fichero binario escrito en código máquina. Este fichero tiene carácter permanente.

Los programas que hacen esta traducción se llaman compiladores.

Al usar un lenguaje compilado, el programa fuente desarrollado nunca se ejecuta sino después de haber compilado/traducido el programa correctamente

(lo que se ejecuta es el programa traducido en código máquina)

Page 41: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Lenguajes interpretados

En vez de traducir el programa fuente y grabar en forma permanente el código objeto, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar.

A continuación, un programa intérprete convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el código objeto para utilizarlo posteriormente.

Los lenguages interpretados se suelen llamar lenguajes de script.

Page 42: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Clasificación según:

Paradigma de programación

lenguajes imperativos / procedurales

lenguajes declarativos:- funcionales- lógicos

lenguajes orientados a objetos

Page 43: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Clasificación según:

el propósito u objetivo

lenguajes de propósito general

lenguajes de propósito específico

Page 44: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Propósito general

Son lenguajes que pueden ser usados para varios propósitos:

- acceso a bases de datos,

- comunicación entre computadoras,

- cálculos matemáticos,

- diseño de imágenes o páginas,

- compiladores,

- etc.

Page 45: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Propósito específico

Son lenguajes especializados en tareas concretas. Ejemplos:

- HTML: para Web

- PHP: para mejorar y enriquecer la Web

- Javascript: para mejorar y enriquecer la Web

- SQL: para base de datos

Page 46: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Otras clasificaciones

- lenguajes imperativos:C, BASIC, Pascal, Fortran, ADA, Algol, Clipper, ML, Logo, Lua, Modula, COBOL, ...

- lenguajes de programación orientada a objetos:C++, Java, C#, Smalltalk, Eiffel, Lexico, Oberon, Objective-C, Simula, Sather, ...

- lenguajes de programación funcional:CAML, LISP, J, APL, Haskell, FP, ISWIN, Joy, Ocaml, Scheme, Miranda, ...

- lenguajes de shell y scripts:Phyton, Perl, AWK, Ruby, tcl, Bash, sh, Javascript, ActionScript, MaxScript, ...

- lenguajes de programación web:PHP, ASP, ASP.NET, ColdFusion, ...

- lenguajes de etiquetado:HTML, XML, WAP, XHTML, XLS, PostScript, RTF, SMIL, SGML, Latex, XPath, ...

- lenguajes de programación visualVisual Basic, Visual Basic.NET, Delphi (Object Pascal),

Page 47: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Otras clasificaciones(siguiente)

- lenguajes de programación lógicaProlog, Mercury, SAIL, ...

- lenguajes para el manejo de datosSQL, MySQL, dBase, Visual FoxPro, ...

- lenguajes de EnsambladorIntel 80x86, Motorola 680, PowerPC, ARM, StrongARM, ...

Page 48: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Bibliotecas

Existen bibliotecas para facilitar la programación permitiendo la reutilización de código.

Los lenguajes más usados (com más “hablantes”) tienen bibliotecas más ricas y estandarizadas.

Page 49: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

5. Introdução a Perl

Page 50: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Bibliografia

Levi Lúcio, Vasco Amaral (2001), Programação em PERL, FCA-Editora de Informática.

Hammond, Michael (2003), Programming for linguistics: Perl for language researchers, Blackwell Publishing.

Tanguy, Ludovic (2007), Perl pour les linguistes, Hermès - Lavoisier. http://perl.linguistes.free.fr/.

TUTORIAIS ON LINE:

http://br.perlmaven.com/perl-tutorial

Page 51: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Vamos programar um pouco

A linguagem PERL

PERL = Practical Extraction and Report Language.

Primeira versão em 1987, Larry Wall.

Page 52: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Objectivos

• ler o texto introduzido através do teclado

• processar o texto lido:

verificar o texto introduzido

colocar sufixos, prefixos, ...

• escrever os resultados (na consola ou num ficheiro)

Page 53: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Estrutura do Programa “nome.perl”

• O script escreve na consola: “Cómo te chamas?”

• O script lê o nome escrito polo usuário

• O script escreve na consola o nome que foi lido.

Page 54: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Como tornar executável o script “nome.perl” ?

chmod +x nome.perl

Atribuimos ao ficheiro “nome.perl” a propriedade: ser executável

Page 55: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Estrutura do Programa “nome.perl”

• print escreve texto (no terminal, num ficheiro...)

• <STDIN> lê um conjunto de caracteres ou texto, introduzido através do teclado.

• $x = <STDIN> lê um conjunto de caracteres introzidos através do teclado e os coloca na variável $x.

• chop $x corta o carácter de nova linha (\n) que se encontra no valor de $x.

Page 56: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Que é um programa (ou script)?

• Um programa é um conjunto de instruções (print, assignação, leitura, ...)

• As instruções simples sempre acabam com o símbolo ‘;’ (ponto e vírgula)

• Quando executamos o programa, as instruções são executadas sequencialmente.

Page 57: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Tipos de entidades dum programa

• escalares: números, sequências de caracteres

• instruções: simples: print, =, chop, ...complexas: if, while, ...

• listas (arrays)

• tabelas (hashes)

• Descritores Input/Output: STDIN, STDOUT, arquivos de entrada, arq. de saída...

Page 58: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Tipos de variáveis

• escalares: $var

• listas: @var

• tabelas: %var

Page 59: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

• O script escreve na consola: “Introduza um nome em singular:”

• O script lê o nome escrito polo usuário

• O script escreve na consola o nome em plural.

• A partir desse nome e o carácter “s”, criamos uma variável com o nome em plural.

Estrutura do Programa “morfo_numero.perl”

Page 60: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Estrutura do Programa “morfo_numero.perl”

• ENTRADA:$pal = <STDIN> lê um conjunto de caracteres ou texto, introduzido através do teclado e o coloca na variável $pal.

• PROCESSAMENTO: $plural = “$pal . “s”engade o “s” ao texto armazenado na variável $pal. O resultado é armazenado na variável $plural.

• SAÍDA: print escreve o texto processado.

Page 61: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Estrutura do Programa “morfo_numero_generico.perl”

• mesma ENTRADA e SAÍDA que “morfo_numero.perl

• PROCESSAMENTO: $ConsoanteFinal = “[dlnrs]”if ($Palavra =~ /$ConsoanteFinal$/) { $Plural = $Palavra . "es" ;}elsif ($Palavra =~ /$Zfinal$/) { $Palavra =~ s/z$/c/; $Plural = $Palavra . "es" ; $Palavra =~ s/c$/z/;}else { $Plural = $Palavra . "s" ;}

Se a palavra acaba em consoante final(dlnrs), o plural fai-se com -es.Senão, se a palavra acaba em -z, substituimos o -z final por -c e engadimos -es.Senão, engadimos -s.

Page 62: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

a instrução IF

if (expressão) { bloco do if }else { bloco do else }Se a expressão é verdade, executam-se as instruções contidas no bloco do if. Caso contrário, executa-se o bloco de instruções do else.

Expressões falsas:1 > 2 ; 0 ; “”, 1-1

Expressões verdadeiras:1 < 2 ; os números excepto o 0; as strings excepto “”

Page 63: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Expressões Regulares: exemplos 1

if ($x =~ m/s$/) { print “é um plural!”;}Se a sequência de caracteres associada à variável $x contém um -s final, então escrevemos: “é um plural!”.

$x =~ s/ble$/bel/;Se a sequência de caracteres associada à variável $x contém a subsequência final -ble, então é substituída por -bel.

Page 64: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Expressões Regulares: exemplos 2

if ($x =~ m/ca[sz]ar/) { print $x;}Se a sequência de caracteres associada à variável $x contém uma subsequência “casar” ou “cazar”, então escrevemos toda a sequência (que é o valor de $x).

if ($x =~ m/^[Qq]uijote$/) { print $x;}Se a sequência de caracteres associada à variável $x é exactamente 'Quijote' ou “quijote”, então escrevemos essa sequência.

Page 65: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Expressões Regulares: exemplos 3

if ($x =~ m/^Paulo$|^Pau$|^Paolo$/) { print $x;}Se a sequência de caracteres associada à variável $x é exactamente “Paulo”, “Pau” ou “Paolo”, então escrevemos o valor de $x.

if ($x =~ m/^in[a-z]+ble$/) { print “é um adjectivo!”;}Se a sequência de caracteres associada à variável $x começa polo prefixo “in”, seguido de um número indeterminado de caracteres, e finaliza por “ble”, então a cadea $x é um adjectivo.

Page 66: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Instruções iterativas

while (expressão) { bloco } O bloco será executado até que a expressão se torne falsa:

while ($cont < 5) { print “$cont \n”; $cont++;}

Page 67: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Estrutura do Programa “morfo_numero_iterativo.perl”

• Iterações de entrada e saídas: Uma vez produzida a saída, o sistema solicita uma nova entrada. Só vai finalizar o processo se o usuário lhe di que pare.

•PROCESSAMENTO: while( $Palavra ne "q" ) { print "Escreve um novo nome ou adjectivo (ou q pour finalizar): "; $Palavra = <STDIN>; chomp $Palavra; if ($Palavra eq "q") { print "gracinhas e adeus!! \n"; } else { $Plural = $Palavra . "s" ; print "O plural de \"$Palavra\" e o seguinte: \n"; print "$Plural\n\n"; }}

Mentres a palavra introduzida não seja o carácter “q”, então o script escreve o plural dessa palavra e volta a pedir que o usuário introduza uma nova palavra.

Page 68: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

6. Programando um tokenizador

Page 69: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Objectivos

• ler o texto dum ficheiro linha a linha.

• processar o texto lido: tokenizer: quebrar o texto em palavras ou carácteres (letras). contagem de frequências: ocurrências de letras, palavras, formas, pares de palavras, etc.

• escrever num ficheiro os resultados.

Page 70: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Estrutura do tokenizer

• Lê linha a linha o texto de entrada.

• Escreve noutro ficheiro (ou na consola) as palavras do texto de entrada.Cada palavra aparece numa linha.

Page 71: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Resultado do tokenizer

“ A nena tem uma chupeta azul.”

Anenatemumachupetaazul.

Page 72: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Estrutura do separador de caracteres

• Lê linha a linha o texto de entrada.

• Escreve noutro ficheiro (ou na consola) os caracteres do texto de entrada.Cada carácter aparece numa linha.

Page 73: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Resultado do separador de caracteres

“ A nena.”

A

nena.

Page 74: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Como executar o tokenizer?

cat arquivo_entrada.txt | ./tokenizer.perl

cat arquivo_entrada.txt | ./tokenizer.perl > arquivo_saída.txt

Page 75: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Instruções do tokenizer

while ($linha = <STDIN>) { instrução1; instrução2; ... }

Lê uma a uma as linhas do ficheiro, e cada linha é colocada na variável $linha. Após a leitura de uma linha, executa-se o bloco de instruções (entre chaves). Isto é repetido até chegar à última linha do ficheiro

Page 76: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Instruções do tokenizer

@pals = split (“ ”, $linha);Divide-se a cadeia $linha cada vez que aparece um espaço em branco. As sucessivas divisões são colocadas na lista @pals.

foreach $pal (@pals) { instrução1; instrução2... } Uma vez tomado um elemento da lista @pals e colocado na variável $pal, executam-se as instruções do bloco. Isto é repetido com todos os elementos da lista.

Page 77: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Instruções iterativas

foreach $var @lista { bloco } O bloco de instruções será executado um número de vezes correspondente ao número de elementos na lista, sendo que para cada iteração uma variável conterá o valor do elemento da lista.

while (expressão) { bloco } O bloco será executado até que a expressão se torne falsa:

while ($cont < 5) { print “$cont \n”; $cont++;}

Page 78: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

a instrução IF

if (expressão) { bloco do if }else { bloco do else }Se a expressão é verdade, executam-se as instruções contidas no bloco do if. Caso contrário, executa-se o bloco de instruções do else.

Expressões falsas:1 > 2 ; 0 ; “”, 1-1

Expressões verdadeiras:1 < 2 ; os números excepto o 0; as strings excepto “”

Page 79: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Pattern-Matching

if ($line =~ m/Maria/) { print $line;}Se a subcadeia “Maria” se encontra dentro da cadeia $line, então afichamos a cadeia $line.

$line =~ s/\,/ \,/;Se aparece o caracter “,” na cadeia $line, então substituimos esse caracter pelos dois caracteres “ ,” (i.e. introduzimos um espaço antes da vírgula).

Page 80: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Estrutura de “freq.perl”

• Lê linha a linha o ficheiro tokenizado :

• Escreve num ficheiro (ou no terminal) os resultados das contagens.

• Realiza as contagens: - conta as ocorrências de cada token (palavras e marcas), - conta o número total de ocorrências de palavras,

- conta as ocorrências da cadeia “relac”,

- conta o número total de formas de palavras.

Page 81: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Instruções de contagem.perl

while ($token = <STDIN>) { $contar{$token}++;} Lê-se linha a linha o arquivo e construe-se uma tabela: %contar.

Cada elemento duma tabela é uma estrutura “chave -> valor”.

Cada chave da tabela é um token. O valor para cada chave é o número de vezes que o token é lido:

$contar{“livro”} = 2$contar{“Maria”} = 3$contar{“,”} = 8

Page 82: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Listas e Tabelas

@notas = (“pedro”, 5, “maria”, 8)

$notas[0] = “pedro”$notas[1] = 5$notas[2] = “maria” $notas[3] = 8

%notas = (“pedro” => 5, “maria” => 8)

$notas{“pedro”} = 5$notas{“maria”} = 8

Page 83: Iniciação à programação (em Humanidades) Pablo Gamallogamallo/aulas/SeminarioLinguistica/... · Primeiros passos na programação em linguagem de scripts. Doutoramento Intro

Instruções de contagem.perl

foreach $tokenDiff (keys %contar) { $contarTokensDiff++; print "$tokenDiff\t$contar{$tokenDiff}\n" } Iteração: Percorremos a lista de chaves (keys) do hash %contar. Cada elemento é colocado na variável $tokenDiff.

Bloco de Instrucções:- contamos os tokens diferentes (formas de palavras)

- escrevemos o token (chave de %contar) e a frequência do token (valor de %contar)