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.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.htmlLinkedIn 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
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
- Carregar o córpus (open / read)
- Tokenizar as sentenças, inserindo os marcadores de início e fim (concatenar string no INICIO e FIM e nltk.word_tokenize)
- Colocar todos os tokens do córpus numa única lista (transformar a lista de listas em uma úica lista de treinamento)
- Computar o Vocabulário (set para calcular o número de palavras distintas do corpus)
- Computar os ngramas (e.g., bigramas, trigramas, etc) utilizando o NLTK (nltk.ngrams)
- Contar a frequência dos ngramas (nltk.FreqDist)
AULAS BEM COMPLEXAS !!!!
Aprendizado de Máquina (Aula 14.x)
- Definir o problema
- Escrever um programa que implemente um algoritmo de AM que aprenda a resolver este problema
- Treinar o programa com exemplos solucionados do problema
- 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 nltkfrom 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
Word Embeddings também podem ser usados para esses problemas de linguagem natural mencionados
ResponderExcluirEssa API do Babel também pode ser útil para o Quem@PUC pelo suporte a tradução / multilinguas
ResponderExcluirMas pelo site parece ser um produto pago e não free
Excluir