• Nenhum resultado encontrado

Tecnologias de Redes Sociais

N/A
N/A
Protected

Academic year: 2022

Share "Tecnologias de Redes Sociais"

Copied!
53
0
0

Texto

(1)

UBI, Informática Web, 2021/22

Tecnologias de Redes Sociais

Aula 09: Semântica Lexical e associação entre palavras. O thesaurus WordNet;. O “ecossistema Google” e a suas RSV. O YouTube e suas APIs. Exemplos de acesso à informação em Python. Exemplos simples e avançados.

Departamento de Informática

João Cordeiro

(2)

Semântica Lexical

(3)

Semântica Lexical

Considera as relações semânticas existentes entre palavras de uma língua.

Relações concretas e definidas: sinónimos, hiperónimos, etc.

Relações de proximidade mais vagas

Manualmente estabelecidas por linguistas

Computacionalmente descobertas pela estatística

Elevado potencial de aplicação!

(4)

Thesaurus

Consiste numa base de dados lexical com um conjunto de relações semânticas definidas.

No mínimo informação sobre palavras semanticamente relacionadas, por exemplo:

physician:

synonyms: croaker, doc, doctor, MD, medical, mediciner, medico, sawbones.

related: medic, general practitioner, surgeon.

Pode conter a definição de relações mais variadas e mais detalhadamente, e.g. “WordNet”

(5)

O Thesaurus WordNet

Base de dados detalhada de relações semânticas para a língua Inglesa.

Desenvolvido na Universidade de Princeton (EUA) por um psicólogo famoso — George Miler — e uma equipa de vários especialistas, durante década de 1990.

Contém cerca de 144 000 palavras.

Os nomes, verbos, adjetivos e advérbios agrupados 109k clusters de sinónimos — synsets.

(6)

O Thesaurus WordNet

https://wordnet.princeton.edu

(7)

WordNet Synset Relationships

Antonym: front => back

Attribute: benevolence => good (noun to adjective)

Pertainym: alphabetical => alphabet (adjective to noun)

Similar: unquestioning => absolute

Cause: kill => die

Entailment: breathe => inhale

Holonym: chapter => text (part-of)

Meronym: computer => cpu (whole-of)

Hyponym: tree => plant (specialization)

Hypernym: fruit => apple (generalization)

(8)

WordNet na Prática

Recurso online

Para Java existe a biblioteca

JWNL, além de muitas outras.

Contido no NLTK.

(9)

WordNet @ NLTK

from nltk.corpus import wordnet

syns = wordnet.synsets('program') print('SYNSETS:')

print('========')

for (i,s) in enumerate(syns):

print(i, s) print()

print('SYNSET[0]:') print('==========')

# An example of a synset:

print('Name:'.ljust(15,'.'), syns[0].name())

# Just the word:

print('Lemma:'.ljust(15,'.'), syns[0].lemmas()[0].name())

# Definition of that first synset:

print('Definition:'.ljust(15,'.'), syns[0].definition())

# Examples of the word in use in sentences:

print('Examples:'.ljust(15,'.'), syns[0].examples())

SYNSETS:

========

0 Synset('plan.n.01')

1 Synset('program.n.02') 2 Synset('broadcast.n.02') 3 Synset('platform.n.02') 4 Synset('program.n.05')

5 Synset('course_of_study.n.01') 6 Synset('program.n.07')

7 Synset('program.n.08') 8 Synset('program.v.01') 9 Synset('program.v.02')

(10)

WordNet @ NLTK

print('SYNSET[0]:') print('==========')

# An example of a synset:

print('Name:'.ljust(15,'.'), syns[0].name())

# Just the word:

print('Lemma:'.ljust(15,'.'), syns[0].lemmas()[0].name())

# Definition of that first synset:

print('Definition:'.ljust(15,'.'), syns[0].definition())

# Examples of the word in use in sentences:

print('Examples:'.ljust(15,'.'), syns[0].examples())

SYNSET[0]:

==========

Name:... plan.n.01 Lemma:... plan

Definition:.... a series of steps to be carried out or goals to be accomplished

Examples:... ['they drew up a six-step plan', 'they discussed plans for a new bond issue']

(11)

WordNet @ NLTK

import nltk

from nltk.corpus import wordnet synonyms = []

antonyms = []

for syn in wordnet.synsets("good"):

for lm in syn.lemmas():

synonyms.append(lm.name()) if lm.antonyms():

antonyms.append(lm.antonyms()[0].name())

print(set(synonyms)) print(set(antonyms))

{'sound', 'honest', 'practiced', 'undecomposed', 'unspoiled', 'thoroughly', 'unspoilt', 'near', 'in_effect', 'dear', 'full', 'soundly', 'honorable', 'beneficial', 'safe', 'adept', 'skillful', 'right', 'upright', 'just', 'expert', 'secure', 'ripe', 'serious', 'in_force', 'effective', 'commodity', 'estimable', 'trade_good', 'proficient', 'respectable', 'goodness', 'well', 'good', 'skilful', 'salutary', 'dependable'}

{'bad', 'badness', 'evilness', 'ill', 'evil'}

(12)

WordNet @ NLTK

import nltk

from nltk.corpus import wordnet

w1 = wordnet.synset('run.v.01')

w2 = wordnet.synset('sprint.v.01') si = w1.wup_similarity(w2)

print("%f = SIM(%s, %s)" % (si, w1, w2) ) w1 = wordnet.synset('ship.n.01')

w2 = wordnet.synset('boat.n.01') si = w1.wup_similarity(w2)

print("%f = SIM(%s, %s)" % (si, w1, w2) )

$ python WN-C.py

0.857143 = SIM( Synset('run.v.01'), Synset(‘sprint.v.01') ) 0.909091 = SIM( Synset('ship.n.01'), Synset(‘boat.n.01') )

(13)

Thesaurus Estatístico

Os thesauri desenvolvidos por humanos são raros em muitas línguas e difíceis de criar.

Os thesuari manuais são limitados no tipo e na

escala da sinonímia e das relações semânticas que eles representam.

Os termos semanticamente relacionados podem ser descobertos a partir da análise estatística de corpora.

(14)

Thesaurus Estatístico

Determina-se a similaridade dos termos através de uma análise estatística pré-computada num corpus.

Cria-se a matriz de associação que quantifica a

correlação de palavras, quanto à frequência de co- ocorrência.

(15)

Matriz de Associação

w1 w2 w3 ………..wn w1

w2 w3

. . wn

c11 c12 c13………c1n c21

c31 . . cn1

cij : Fator de correlação entre a palavra wi e a palavra wj

fik : Frequência da palavra wi no documento dk.

D = {d1, …, dk, …dm}

(16)

Matriz de Associação Normalizada

A correlação baseada exclusivamente na frequência favorece mais as palavras mais frequentes.

Normalização dos valores da matriz:

O valor normalizado é 1.0 se duas palavras ocorrem com a mesma frequência em todos os documentos.

(17)

Matriz de Associação Normalizada

(18)

Uma Novela Chamada Facebook

(19)

Uma Novela Chamada Facebook

(20)

YouTube API

(21)

YouTube = Video + SN

Começou por ser uma plataforma de partilha de vídeo; Criado em 14-02-2005, por Chad Hurley, Steve Chen, e Jawed Karim;

Comprado pela Google em novembro de 2006;

A cada 3 minutos, 48h de vídeo são carregados, segundo Wattenhofer et Al. (2012);

Interliga-se com os outros dois gigantes: Facebook e Twitter;

(22)

YouTube API - Exemplos

Podemos realizar diversas operações de extração de informação, tais como:

Pesquisa de um tópico ou assunto;

Pesquisa de canais;

Pesquisa de utilizadores;

Extração de threads de comentários;

(23)

YouTube API

https://console.developers.google.com/

(24)

https://console.developers.google.com/

(25)

Criação de um Novo Projeto no

Google Developers

(26)

Projetos

existentes

Novo

(27)
(28)

Escolher

Escolher

(29)

Ok

Ok

(30)

Falta ainda definir os consentimentos associados ao Projeto

(31)
(32)
(33)

Escolher

(34)

Escolher

(35)
(36)
(37)

Credencial com Chave de API

Aqui

(38)

Credencial tipo OAuth

Escolher

(39)

Exemplo de simples de pesquisa

SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl']

API_SERVICE_NAME = 'youtube' API_VERSION = 'v3'

from googleapiclient.discovery import build from YouTube.Keys import DEVELOPER_KEY

youtube = build(API_SERVICE_NAME, API_VERSION, developerKey=DEVELOPER_KEY) def youtube_search(query="news", max_results=10):

search_response = youtube.search().list(

q=query,

part='id,snippet',

maxResults=max_results ).execute()

videos = []

for search_result in search_response.get('items', []):

if search_result['id']['kind'] == 'youtube#video':

videos.append('%s --> %s (%s)' % (search_result['snippet']['publishedAt'], search_result['snippet']['title'],

search_result['id']['videoId'])) print('Videos:'); print(10 * "=")

for i, x in enumerate(videos): print("%03d | %s" % (i, x)) print('\n')

youtube_search(query="Donald Trump", max_results=10)

Chave de acesso à API

Função de pesquisa, aqui abreviada

(40)

Video ID & URL “video id”

(41)

“video id”

Video ID & URL

(42)

Estrutura JSON (como saber+?)

https://developers.google.com/youtube/v3/docs/videos

(43)

Credencial tipo OAuth

(44)

Credencial tipo OAuth

Escolher

(45)
(46)

Fazer download do ficheiro

*.json com as credenciais de acesso ao YouTube

Integrar numa aplicação ou projeto PyCharm

Exemplo: client_secret.json

(47)
(48)

Escolher

(49)
(50)
(51)

Código Gerado Copy

(52)

Aplicação pronta para rolar:

(53)

CLIENT_SECRETS_FILE = "ytcodes2.json"

SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl']

API_SERVICE_NAME = 'youtube' API_VERSION = 'v3'

from googleapiclient.discovery import build

from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request

import os

import pickle

def get_authenticated_service():

pickle_file = 'token3.pickle' credentials = None

if os.path.exists(pickle_file):

with open(pickle_file, 'rb') as token:

credentials = pickle.load(token)

# Check if the credentials are invalid or do not exist if not credentials or not credentials.valid:

# Check if the credentials have expired

if credentials and credentials.expired and credentials.refresh_token:

credentials.refresh(Request()) else:

flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES) credentials = flow.run_console()

# Save the credentials for the next run with open(pickle_file, 'wb') as token:

pickle.dump(credentials, token)

return build(API_SERVICE_NAME, API_VERSION, credentials=credentials)

Vamos ver uns exemplos mais “advanced”

Referências

Documentos relacionados

No 2T18, o segmento apresentou uma pequena redução da receita líquida (desconsiderando receita de longa distância) em relação ao 2T17 e um crescimento de 0,9% na comparação com

Ao dar ênfase ao chamado “mundo vivido do terreiro”, Miriam Rabelo vai se inspirar na fenomenologia de Merleau-Ponty e Heidegger – além de outras perspectivas teóricas como

Neste artigo apresentamos o PAPEL, um recurso lexical para o portuguˆes, constitu´ıdo por rela¸c˜oes entre palavras, extra´ıdas de forma autom´atica de um dicion´ario da

Orações subordinadas adverbiais causais consecutivas condicionais comparativas concessivas conformativas proporcionais temporais finais. Classificação das Orações

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Nesse sentido, assumimos que para os discursos hegemônicos tais zonas de não leitura constituem-se também como zonas de não saber, tanto no que tange as narrativas

Também ocorreu visita ao Hotel Senac Barreira Roxa, bem como discussões sobre o Programa Estadual de Turismo e sinergias com o Projeto, reuniões com empresários do

O dplyr é o pacote mais útil para realizar manipulação de dados, pois possui funções para fazer virtualmente qualquer tipo de transformação nas linhas e colunas da base..