Pular para o conteúdo principal

Python - Aprendendo uma linguagem de programação - Retomada

Depois de revisar os vídeos e exercícios iniciais sobre Python que havia assistido entre agosto e setembro de 2020, retomei o estudo do Python a partir da aula 8 do curso. 

05/03/2021

Strings e pacote NLTK (aulas 8.1 e 8.2)

Strings podem também ser vistas como uma lista de caracteres e por isso herdam muitas operações de listas. Operações adicionais:

str.replace(’x’, ’b’)
str.lower()
str.upper()

substr in str

str.split(", ")

autor.strip()

NLTK -> https://www.nltk.org/. Foi necessário realizar pelo jupyter o download de mais pacotes

Tokenização ..................... nltk.word_tokenize(poem, language="portuguese") & nltk.sent_tokenize(poem, language="portuguese")

Análise Morfológica ............. nltk.pos_tag(tokens) {Substantivos, Verbo, Advérbio, ....} Lista completa em -> https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html

Stopwords ....................... nltk.corpus.stopwords.words(’english’)

Lematização ..................... lemmatizer = WordNetLemmatizer() & lemmatizer.lemmatize(palavra.lower())

Dicionários (9.1)

Tipo de variável que armazena uma coleção de pares chave-valores
Funciona como o sumário de um livro: um ou mais valores têm acesso direto pela sua chave.
Também chamado de tabela hash e map.

dict.keys()   ...... Chaves
dict.values() ...... Valores
dict.items()  ...... Par chave-valor

Dicionários são semelhantes ao formato de arquivo JSON ( é fácil a conversão)

import json
# Escrita de um dicionário em JSON
json.dump(dict, open("file.json", "w"))
# Leitura de um JSON para dicionário
dict = json.load(open("file.json"))

LIWC (Linguistic Inquiry and Word Count) -> http://liwc.wpengine.com/ (Aula 9.2)

Conta com o LIWC dictionary, recurso léxico que classifica palavras em diversas categorias (ansiedade, raiva, afetividade, positivo, negativo, etc.) ... Análise de Sentimentos

Brazilian Portuguese LIWC Dictionary -> http://143.107.183.175:21380/portlex/index.php/pt/projetos/liwc

VerbNet.Br: construção semiautomática de um léxico verbal online e independente de domínio para o português do Brasil -> http://143.107.183.175:21380/portlex/index.php/pt/projetos/verbnetbr

Análise de sentimento com LIWC

posemo = positivo
negemo = negativo

Entrada e Saída de arquivos (10.1)

with open("arquivo.txt") as f:
    doc = f.read()
with open("arquivo_saida.txt", "w") as f:
    f.write(doc)

O comando open trabalha apenas com variáveis textuais.

Processamento de arquivos csv -> https://docs.python.org/3/library/csv.html

import csv

Processamento de arquivos a nível de sistema operacional -> https://docs.python.org/3/library/os.html

import os 

os.listdir('.')
os.path.exists("arquivo_saida.txt")
os.remove("arquivo_saida.txt")
os.path.exists("arquivo_saida.txt")
os.mkdir("novo_dir/")

APIs e Módulo requests (Aula 10.2)

Módulo requests (via HTTP) -> https://requests.readthedocs.io/pt_BR/latest/index.html

pip install requests

DBLP API -> https://dblp.org/faq/How+to+use+the+dblp+search+API.html
LinkedIn API -> https://docs.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api
Semantic Scholar API -> https://api.semanticscholar.org/

A python library that aims to retrieve data from Semantic Scholar API
pip install semanticscholar

Lookup por ID do autor ou da publicação (DOI)

Babel API -> https://babelscape.com/wordatlas#api

Tratamento de Erros e Exceções (Aula 11)

try:
    ....
except Exception as err:
    print("Erro Inesperado", err)
finally:
    print("Liberar recursos")

O finally vai ser executado independente de ter acontecido erro ou não !!!

WordNet + NLTK (Aula 12)

Modelos de Linguagem (Aula 13.x)

Em algumas tarefas de Processamento de Língua Natural, é necessário inferir/estimar a probabilidade de certos eventos, conforme abaixo, baseado num córpus com muitas sentenças.

  • Qual a probabilidade de uma determinada palavra (w5) dada uma sequência (w1, w2, w3, w4)? (P(w5|w1, w2, w3, w4)) -> Geração de texto
  • Qual a probabilidade de uma determinada sentença ou sequência de palavras? (P(w1, w2, w3, w4)) -> Melhor Tradução, Correção de Erros Ortográficos

Regra da Cadeia: A probabilidade de uma sentença pode ser estimada através da regra da cadeia, i.e., a multiplicação das probabilidades de cada palavra, estimada com base nas palavras anteriores:
P(w1, w2, w3, w4) = P(w1)×P(w2|w1)×P(w3|w1, w2)×P(w4|w1, w2, w3)

Cadeia de Markov: Popularmente chamada de Ngramas (bigram, trigram), assume que a próxima palavra pode ser inferida com um pequeno conjunto de palavras prévias da sequência.

Passos no python

  1. Carregar o córpus (open / read)
  2. Tokenizar as sentenças, inserindo os marcadores de início e fim (concatenar string no INICIO e FIM e nltk.word_tokenize)
  3. Colocar todos os tokens do córpus numa única lista (transformar a lista de listas em uma úica lista de treinamento)
  4. Computar o Vocabulário (set para calcular o número de palavras distintas do corpus)
  5. Computar os ngramas (e.g., bigramas, trigramas, etc) utilizando o NLTK (nltk.ngrams)
  6. Contar a frequência dos ngramas (nltk.FreqDist)

AULAS BEM COMPLEXAS !!!!

Aprendizado de Máquina (Aula 14.x)

  1. Definir o problema
  2. Escrever um programa que implemente um algoritmo de AM que aprenda a resolver este problema
  3. Treinar o programa com exemplos solucionados do problema
  4. Testar o programa em novos exemplos do problema para verificar se ele realmente aprendeu como solucioná-lo.

Tarefa de Classificação: conjunto de treinamento com dados rotulados (golden), faz extração de features para montar o modelo de classificação, algoritmos Árvores de Decisão, Regressão Logística,
Naive Bayes.

Naive Bayes em python. 

import nltk
from nltk.corpus import names
from random import shuffle
nltk.download('names')

nomes_etiquetados = []
for name in names.words("male.txt"):
    nomes_etiquetados.append((name, "male"))
for name in names.words("female.txt"):
    nomes_etiquetados.append((name, "female"))
shuffle(nomes_etiquetados)

Classificar gênero por nome, revisão positiva/negativa do filme, ...

Tutorial sobre Classificação -> https://www.nltk.org/book/ch06.html






Comentários

  1. Word Embeddings também podem ser usados para esses problemas de linguagem natural mencionados

    ResponderExcluir
  2. Essa API do Babel também pode ser útil para o Quem@PUC pelo suporte a tradução / multilinguas

    ResponderExcluir

Postar um comentário

Sinta-se a vontade para comentar. Críticas construtivas são sempre bem vindas.

Postagens mais visitadas deste blog

Aprendizado de Máquina Relacional

 Extraído de -> https://www.lncc.br/~ziviani/papers/Texto-MC1-SBBD2019.pdf   Aprendizado de máquina relacional (AMR) destina-se à criação de modelos estatísticos para dados relacionais (seria o mesmo que dados conectados) , isto é, dados cuja a informação relacional é tão ou mais impor tante que a informação individual (atributos) de cada elemento.    Essa classe de aprendizado tem sido utilizada em diversas aplicações, por exemplo, na extração de informação de dados não estruturados [Zhang et al. 2016] e na modelagem de linguagem natural [Vu et al. 2018].   A adoção de técnicas de aprendizado de máquina relacional em tarefas de comple mentação de grafo de conhecimento se baseia na premissa de existência de regularidades semânticas presentes no mesmo . Modelos grafos probabilísticos  Baseada em regras / heurísticas que não podem garantir 100% de precisão no resultado da inferência mas os resultados podem ser explicados. Modelos de características de ...

Defesa de Doutorado de Grettel Monteagudo Garcia

A última atividade presencial que fiz na PUC-Rio foi assistir a defesa de tese da Grettel Monteagudo Garcia , em 13/03/2020 (uma sexta-feira 13 !!!!). O título da tese é “ A Keyword-based Query Processing Method for Datasets with Schemas ” e me interessou por causa do projeto do NIMA. A proposta parte do cenário onde usuários possam consultar dados, armazenados em bancos de dados relacionais e TripleStores, de maneira semelhante ao Google, ou seja, digitando palavras-chave, e deixando para o sistema recuperar os dados que melhor correspondem ao conjunto de palavras-chave.  Na tese estão descritos um algoritmo e um framework projetados para processar consultas baseadas em palavras-chave para bases de dados com esquema, especificamente bancos relacionais e bases de dados em RDF. A primeira etapa do algoritmo é a conversão do conjunto de palavras chaves em uma consulta abstrata explorando um esquema abstrato . Nesta etapa o principal desafio é achar onde a informação está (os matches...

Metodologia Científica II - continuação

No primeiro post  foram detalhados os 6 primeiros vídeos do canal do Youtube do professor Eduardo Ogasawara do CEFET/RJ   Mais 3 vídeos foram disponibilizados e estão comentados a seguir: Gráficos, Figuras e Tabelas (33 minutos) - como apresentar os resultados das avaliações experimentais. Gráficos: associar análises dos resultados a cada gráfico apresentado, problemas comuns na montagem de gráficos (não usar todo eixo X ou Y, não usar área útil com uma escala adequada a ver o comportamento dos números, não marcar os pontos de observação da série, inconsistência no uso de cores ), escala logarítmica x linear, eixo X para a variável independente e Y para a dependente (resposta), escrever boas legendas para os gráficos, observar se diferenças entre variáveis apresentadas em gráficos separados podem atrapalhar a interpretação dos resultados. Diagramas devem ser pensados de acordo com o propósito, trata-se de uma abstração e cada elemento deve ser explicado no texto, rótulos...