How to use obter_atributo method in SeleniumBase

Best Python code snippet using SeleniumBase

Alvaro.py

Source:Alvaro.py Github

copy

Full Screen

...227 sins_lema1.remove(lema1)228 if lema2 in sins_lema2:229 sins_lema2.remove(lema2)230 for sin_iter1 in sins_lema1:231 for ex_iter in BaseOx.obter_atributo(BaseOx.INSTANCE, lema2, pos, def2, 'exemplos'):232 if lema2 in ex_iter:233 ex_def2 = ex_iter.replace(lema2, sin_iter1)234 sc_wmd = wmd(235 RepVetorial.INSTANCE, ex_iter, ex_def2)236 # lema, def, pos, sin, lema, def, pos, ex237 padrao_cmd = "%s@@@@%s@@@@%s@@@@@%s@@@@%s@@@@%s@@@@%s@@@@%f"238 padrao_cmd = padrao_cmd % (239 lema1, def1, pos, sin_iter1, lema2, def2, ex_def2, sc_wmd)240 os.system(241 'echo \"%s\" >> ../Bases/linhas.txt' % padrao_cmd)242 for sin_iter2 in sins_lema2:243 for ex_iter in BaseOx.obter_atributo(BaseOx.INSTANCE, lema1, pos, def1, 'exemplos'):244 if lema1 in ex_iter:245 ex_def1 = ex_iter.replace(lema1, sin_iter2)246 sc_wmd = wmd(247 RepVetorial.INSTANCE, ex_iter, ex_def1)248 # lema, def, pos, sin, lema, def, pos, ex249 padrao_cmd = "%s@@@@%s@@@@%s@@@@@%s@@@@%s@@@@%s@@@@%s@@@@%f"250 padrao_cmd = padrao_cmd % (251 lema2, def2, pos, sin_iter2, lema1, def1, ex_def1, sc_wmd)252 os.system(253 'echo \"%s\" >> ../Bases/linhas.txt' % padrao_cmd)254 sc = None255 Alvaro.PONDERACAO_DEFINICOES[str(chave)] = 1256 return None257 # Obtem a palavra mais usual para o significado mais usual para uma palavra258 def sugestao_contigencial(self, palavra,259 pos, fontes_def='oxford',260 metodo='definicao_usual',261 ctx=None, med_sim='cosine'):262 if metodo == 'definicao_usual':263 if pos == 'r':264 sins = wn.synsets(palavra, pos)[0].lemma_names()265 try:266 sins.remove(palavra)267 except:268 pass269 return sins270 if fontes_def == 'wordnet':271 for syn in wn.synsets(palavra, pos):272 for lema in syn.lemma_names():273 if not Util.e_mpalavra(lema) and lema != palavra:274 return [lema]275 elif fontes_def == 'oxford':276 try:277 pos_ox = Util.cvsr_pos_semeval_ox(pos)278 todas_definicoes = BaseOx.obter_definicoes(palavra, pos_ox)279 def_prin = todas_definicoes[0]280 sins = BaseOx.obter_sins(palavra, def_prin)281 return sins282 except Exception, e:283 print(e)284 pass285 elif metodo == 'desambiguador':286 if fontes_def == 'wordnet':287 raise("\n\nFuncao nao implementada!\n\n")288 elif fontes_def == 'oxford':289 des_ox = DesOx(self.cfgs, self.base_ox,290 rep_vetorial=self.rep_vetorial)291 try:292 label, definicao, exemplos = DesOx.desambiguar(293 des_ox, ctx, palavra, pos, nbest=True, med_sim=med_sim)[0][0]294 sins_preditos = BaseOx.obter_sins(palavra, definicao, pos)295 return sins_preditos296 except Exception, e:297 pass298 else:299 raise("\nOpcao invalida para o metodo de SUGESTAO CONTIGENCIAL!\n")300 return [""]301 # Gabarito no formato [[palavra, voto], ...]302 def possui_moda(self, gabarito):303 todos_votos = sorted([v[1] for v in gabarito], reverse=True)304 try:305 return todos_votos[0] > todos_votos[1]306 except IndexError:307 return True308 return False309 """310 Recebe uma lista de pares <palavra, definicao> e311 retorna sinonimos para cada par. Vale lembrar: sinonimos312 compartilhados entre os pares nao sao permitidos no313 conjunto-resposta. O intuito é fazer da lista de sinônimos314 um importante fator discriminante entre "sinonimos de 1a ordem".315 """316 @staticmethod317 def obter_sinonimos_filtrados(lista_definicoes, pos, remover_sinonimos_replicados=True):318 conjunto_universo_sinonimos = {}319 # Estrutura com pares <(palavra, definicao>: sinonimo)>320 definicoes_sinonimos = {}321 for palavra, definicao in lista_definicoes:322 lista_sinonimos = BaseOx.obter_sins(323 BaseOx.INSTANCE, palavra, definicao, pos, remover_sinonimos_replicados=True)324 for s in lista_sinonimos:325 if not s in conjunto_universo_sinonimos:326 conjunto_universo_sinonimos[s] = []327 conjunto_universo_sinonimos[s].append(328 str((palavra, definicao)))329 definicoes_sinonimos[str((palavra, definicao))] = []330 for palavra, definicao in lista_definicoes:331 lista_sinonimos = BaseOx.obter_sins(332 BaseOx.INSTANCE, palavra, definicao, pos, remover_sinonimos_replicados=True)333 for s in lista_sinonimos:334 # Se Sinonimo esta vinculado a somente um par <palavra, definicao>335 if conjunto_universo_sinonimos[s].__len__() == 1:336 definicoes_sinonimos[str((palavra, definicao))].append(s)337 return definicoes_sinonimos338 @staticmethod339 def gerar_ngrams_exemplos(candidato, pos):340 for def_iter in BaseOx.obter_definicoes(BaseOx.INSTANCE, candidato, pos=pos):341 for ex in BaseOx.obter_atributo(BaseOx.INSTANCE, candidato, pos, def_iter, 'exemplos'):342 ex_blob = textblob.TextBlob(ex)343 for ng in ex_blob.ngrams(n=Util.CONFIGS['ngram']['max']):344 ng_str = " ".join(ng)345 #ng_tags = str(nltk.pos_tag(nltk.word_tokenize(ng_str)))346 chave_reg = "%s:::%s" % (candidato, def_iter)347 if not chave_reg in Alvaro.INDEXES_REGID:348 Alvaro.INDEXES_REGID[chave_reg] = len(349 Alvaro.INDEXES_REGID)350 Alvaro.INDEXES_IDREG[len(351 Alvaro.INDEXES_REGID)-1] = chave_reg352 if not ng_str in Alvaro.NGRAMS_EXOX_PLAIN:353 Alvaro.NGRAMS_EXOX_PLAIN[ng_str] = set(354 [Alvaro.INDEXES_REGID[chave_reg]])355 else:356 Alvaro.NGRAMS_EXOX_PLAIN[ng_str].add(357 Alvaro.INDEXES_REGID[chave_reg])358 ex_blob = None359 @staticmethod360 def indexar_exemplos(cand_iter, pos, fonte='oxford'):361 from Indexador import Whoosh362 singleton = BaseOx.INSTANCE363 if not cand_iter in Alvaro.PALAVRAS_EXEMPLOS_INDEXADOS:364 documentos = []365 for def_iter in BaseOx.obter_definicoes(BaseOx.INSTANCE, cand_iter, pos):366 titulo = cand_iter + ":::" + def_iter367 dir_doc = "%s-%s.json" % (cand_iter, pos)368 exemplos = BaseOx.obter_atributo(369 singleton, cand_iter, pos, def_iter, 'exemplos')370 exemplos = ":::".join(exemplos)371 documentos.append((titulo, dir_doc, exemplos))372 Whoosh.iniciar_indexacao_exemplos(documentos)373 Alvaro.PALAVRAS_EXEMPLOS_INDEXADOS.add(cand_iter)374 def selec_ngrams(self, palavra, frase, cands):375 cfgs = self.cfgs376 min_ngram = cfgs['ngram']['min']377 max_ngram = cfgs['ngram']['max']378 pont_ngram = dict([(p, 0.00) for p in cands])379 ngrams_coca = Alvaro.NGRAMS_COCA380 ngrams_signalmedia = Alvaro.NGRAMS_SIGNALMEDIA381 for cand_iter in cands:382 nova_frase = frase.replace(palavra, cand_iter)383 ngrams_derivados_frase = Alvaro.gerar_ngrams_tagueados(384 nova_frase, min_ngram,385 max_ngram, cand_iter)386 ngrams_leipzig = {}387 # Carregando N-grams de Leipzig e derivando N-grams para N = 2, 3, 4 e 5388 if True:389 if "leipzig" in self.cfgs['ngram']['fontes']:390 ngrams_leipzig = Alvaro.carregar_ngrams_leipzig(391 palavra, cand_iter)392 # derivando demais n-grams393 dir_ngrams_derivados = cfgs['ngram']['dir_derivado'] % cand_iter394 if os.path.exists(dir_ngrams_derivados) == False:395 min_ng, max_ng = cfgs['ngram']['min'], cfgs['ngram']['max']396 ngrams_derivados_leipzig = Alvaro.derivar_ngrams(397 ngrams_leipzig, min_ng, max_ng)398 Util.salvar_json(dir_ngrams_derivados,399 ngrams_derivados_leipzig)400 else:401 ngrams_derivados_leipzig = Util.abrir_json(402 dir_ngrams_derivados)403 for ng_str in ngrams_derivados_leipzig:404 ngrams_leipzig[ng_str] = ngrams_derivados_leipzig[ng_str]405 ngrams_derivados_leipzig = None406 for __ng_iter__ in ngrams_derivados_frase:407 ng_iter = [(unicode(p), pt) for (p, pt) in __ng_iter__]408 ng_iter_sm = " ".join([p for (p, pt) in __ng_iter__])409 freq_ngram = 0410 nova_pont = 0411 corpus_ngrams = {412 "coca": {"ngrams": ngrams_coca, "ng_chave": unicode(ng_iter)},413 "leipzig": {"ngrams": ngrams_leipzig, "ng_chave": unicode(__ng_iter__)},414 "signalmedia": {"ngrams": ngrams_signalmedia, "ng_chave": unicode(ng_iter_sm)}415 }416 for nome_corpus in set(corpus_ngrams.keys()) & set(self.cfgs['ngram']['fontes']):417 ngrams = corpus_ngrams[nome_corpus]['ngrams']418 ng_chave = corpus_ngrams[nome_corpus]['ng_chave']419 if ng_chave in ngrams:420 freq_ngram = int(ngrams[ng_chave])421 nova_pont = Alvaro.pont_colocacao(422 freq_ngram, len(__ng_iter__), max_ngram)423 pont_ngram[cand_iter] += nova_pont424 ngrams_leipzig = None425 ngrams_derivados_frase = None426 top_ngrams = [(p, pont_ngram[p]) for p in cands]427 return top_ngrams428 @staticmethod429 def derivar_ngrams(ngrams, _min_, _max_):430 novos_ngrams = {}431 for ng_str in ngrams:432 try:433 ng = eval(ng_str)434 for n in range(_min_, _max_):435 for i in range(_max_-n):436 try:437 novo_ng = str(ng[i:i+n])438 if not novo_ng in novos_ngrams:439 novos_ngrams[novo_ng] = ngrams[ng_str]440 else:441 novos_ngrams[novo_ng] += ngrams[ng_str]442 except:443 pass444 except Exception, e:445 print("\nErro para ngram: %s\n" % str(ng))446 print(e)447 return novos_ngrams448 @staticmethod449 def derivar_ngrams_string(ngrams, _min_, _max_):450 novos_ngrams = {}451 for ng_str in ngrams:452 try:453 ng = ng_str.split(" ")454 for n in range(_min_, _max_):455 for i in range(_max_-n):456 try:457 novo_ng = " ".join(ng[i:i+n])458 if not novo_ng in novos_ngrams:459 novos_ngrams[novo_ng] = ngrams[ng_str]460 else:461 novos_ngrams[novo_ng] += ngrams[ng_str]462 except:463 pass464 except Exception, e:465 print("\nErro para ngram: %s\n" % str(ng))466 print(e)467 return novos_ngrams468 def selec_candidatos(self, palavra, pos, fontes=['wordnet'], indice_definicao=-1):469 maxpordef_wn = Util.CONFIGS['alvaro']['mxspdef_wn']470 maxpordef_ox = Util.CONFIGS['alvaro']['mxspdef_ox']471 candidatos_best = set()472 candidatos_oot = set()473 comprimento = None474 if fontes in [[], None]:475 raise Exception("Fontes nao foram informadas!")476 if indice_definicao != -1 and fontes != ['oxford']:477 msg = "\nVoce nao pode selecionar um unico indice para mais de duas fontes! "478 msg += "O casamento de definicoes nao existe implementado!\n"479 raise Exception(msg)480 if 'wordnet' in fontes:481 for s in wn.synsets(palavra, pos):482 for l in list(set(s.lemma_names()) - set(candidatos_oot))[:maxpordef_wn]:483 candidatos_oot.update([l])484 candidatos_best.update([l])485 try:486 if pos in ['n']:487 for h in s.hypernyms():488 candidatos_oot.update(489 h.lemma_names()[:maxpordef_wn])490 for h in s.hyponyms():491 candidatos_oot.update(492 h.lemma_names()[:maxpordef_wn])493 elif pos in ['a', 'r', 'v']:494 for similar in s.similar_tos():495 candidatos_oot.update(496 similar.lemma_names()[:maxpordef_wn])497 except Exception, e:498 pass499 if 'oxford' in fontes:500 todas_definicoes = BaseOx.obter_definicoes(501 BaseOx.INSTANCE, palavra, pos)502 for definicao in todas_definicoes:503 try:504 cands_iter = []505 todos_sinonimos = BaseOx.obter_sins(506 BaseOx.INSTANCE, palavra, definicao, pos)507 for c in todos_sinonimos:508 if not c in cands_iter and len(cands_iter) < maxpordef_ox:509 cands_iter.append(c)510 candidatos_tmp = cands_iter511 #candidatos_tmp = BaseOx.obter_sins(BaseOx.INSTANCE, palavra, definicao, pos)[:maxpordef_ox]512 except:513 candidatos_tmp = []514 candidatos_best.update(515 [] if candidatos_tmp == None else candidatos_tmp)516 candidatos_oot.update(517 [] if candidatos_tmp == None else candidatos_tmp)518 comprimento = len(candidatos_oot)519 if set(['wordembbedings', 'embbedings']).intersection(set(fontes)):520 obter_palavras_relacionadas = self.rep_vetorial.obter_palavras_relacionadas521 ptmp = [p[0] for p in obter_palavras_relacionadas(positivos=[palavra],522 pos=pos, topn=comprimento)]523 candidatos_oot.update(ptmp)524 if palavra in candidatos_oot:525 candidatos_oot.remove(palavra)526 cands = [p for p in list(candidatos_oot) if len(p) > 1]527 cands = [p for p in cands if p.istitle() == False]528 cands = [p for p in cands if not Util.e_mpalavra(p)]529 retorno = {}530 retorno['uniao'] = list(candidatos_best.union(candidatos_oot))531 retorno['best'] = candidatos_best532 retorno['oot'] = candidatos_oot533 return retorno534 # Retirado de https://stevenloria.com/tf-idf/535 @staticmethod536 def tf(word, text_blob):537 return float(text_blob.words.count(word))538 # return float(blob.words.count(word)) / float(len(blob.words))539 @staticmethod540 def n_containing(word, bloblist):541 return sum(1 for blob in bloblist if word in blob.words)542 @staticmethod543 def idf(word, bloblist):544 # return math.log(len(bloblist) / len((1 + self.n_containing(word, bloblist))))545 x = Alvaro.n_containing(word, bloblist)546 return math.log(len(bloblist) / (x if x else 1))547 @staticmethod548 def tfidf(word, blob, bloblist):549 return Alvaro.tf(word, blob) * Alvaro.idf(word, bloblist)550 551 # https://corpus.byu.edu/mutualInformation.asp552 # https://corpustools.readthedocs.io/en/latest/mutual_information.html553 # https://stackoverflow.com/questions/13488817/pointwise-mutual-information-on-text554 # https://medium.com/@nicharuch/collocations-identifying-phrases-that-act-like-individual-words-in-nlp-f58a93a2f84a555 @staticmethod556 def pontuar_pmi(freq_x, freq_y, freq_xy, indexes):557 searcher = Whoosh.searcher(Whoosh.DIR_INDEXES)558 total_sentencas = searcher.doc_count()559 px = float(freq_x) / total_sentencas560 py = float(freq_y) / total_sentencas561 pxy = float(freq_xy) / total_sentencas562 return math.log(pxy / (px * py), 2)563 @staticmethod564 def abrir_contadores_pmi():565 cfgs = Util.CONFIGS566 try:567 Alvaro.FREQUENCIA_PMI = Util.abrir_json(568 cfgs['metodo_pmi']['dir_contadores'], criarsenaoexiste=False)569 return Alvaro.FREQUENCIA_PMI != None570 except:571 return False572 @staticmethod573 def salvar_contadores_pmi():574 cfgs = Util.CONFIGS575 if Alvaro.FREQUENCIA_PMI != None:576 Util.salvar_json(cfgs['metodo_pmi']577 ['usar_metodo'], Alvaro.FREQUENCIA_PMI)578 Alvaro.FREQUENCIA_PMI = None579 return True580 else:581 return False582 @staticmethod583 def gerar_ngrams_tagueados(sentenca, _min_, _max_, palavra_central=None):584 ngrams_dict = {}585 tokens_tagueados = nltk.pos_tag(nltk.word_tokenize(sentenca))586 for n in range(_min_, _max_+1):587 ngrams_dict[n] = []588 for n in range(_min_, _max_+1):589 for i in range(0, len(tokens_tagueados)-n):590 if i+n < len(tokens_tagueados):591 novo_ngram = tokens_tagueados[i:i+n]592 if palavra_central in [t for (t, pt) in novo_ngram] or palavra_central == None:593 novo_ngram = [(t, pt) for (t, pt)594 in novo_ngram if not t in punctuation]595 if palavra_central in [t for (t, pt) in novo_ngram] or palavra_central == None:596 try:597 if not novo_ngram in ngrams_dict[len(novo_ngram)]:598 ngrams_dict[len(novo_ngram)].append(599 novo_ngram)600 except:601 pass602 ngrams = []603 for n in sorted(ngrams_dict.keys(), reverse=True):604 ngrams += ngrams_dict[n]605 return ngrams606 @staticmethod607 def carregar_coca_ngrams(diretorio):608 min_ngram = Util.CONFIGS['ngram']['min']609 max_ngram = Util.CONFIGS['ngram']['max']610 arquivo_ngrams = open(diretorio, 'r')611 todas_linhas = arquivo_ngrams.readlines()612 arquivo_ngrams.close()613 todos_ngrams_tuplas = {} # <ngram : count>614 for linha_iter in todas_linhas:615 colunas = str(linha_iter).lower().split("\t")616 freq, tokens = int(colunas[0]), "\t".join(colunas[1:])617 ngrams = Alvaro.gerar_ngrams_tagueados(618 tokens, min_ngram, max_ngram)619 for ng in ngrams:620 if not str(ng) in todos_ngrams_tuplas:621 todos_ngrams_tuplas[str(ng)] = int(freq)622 else:623 todos_ngrams_tuplas[str(ng)] += int(freq)624 return todos_ngrams_tuplas625 @staticmethod626 def pont_colocacao(freq, len_sintagma, max_sintagma):627 return freq * (len_sintagma ** 3)628 # https://stackoverflow.com/questions/24192979/629 @staticmethod630 def obter_antonimos(palavra, pos):631 if not pos in ['a', 's']:632 return []633 anto = []634 for s in wn.synsets(palavra, pos):635 for l in s.lemmas():636 for a in l.antonyms():637 if not a.name() in anto:638 anto.append(a.name())639 return anto640 @staticmethod641 def carregar_ngrams_leipzig(palavra, substituto):642 if substituto in Util.CONFIGS["ngram"]["blacklist"]:643 return {}644 dir_conts_ngrams_leipzig = Util.CONFIGS['ngram']['leipzig_conts'] % substituto645 if os.path.exists(dir_conts_ngrams_leipzig) == True:646 return Util.abrir_json(dir_conts_ngrams_leipzig)647 dict_freq_ngrams = {}648 print("\nExtraindo do corpus sentencas para '%s'" % substituto)649 try:650 obj = Alvaro.gerar_ngrams_leipzig([substituto])651 except:652 obj = []653 print("Sentencas extraidas!")654 print("Contabilizando n-grams!")655 for reg in obj:656 ng_str = str(nltk.pos_tag(nltk.word_tokenize(" ".join(reg))))657 if not ng_str in dict_freq_ngrams:658 dict_freq_ngrams[ng_str] = 1659 else:660 dict_freq_ngrams[ng_str] += 1661 print("n-grams contabilizados!")662 print("\n")663 obj = None664 arq = None665 Util.salvar_json(dir_conts_ngrams_leipzig, dict_freq_ngrams)666 return dict_freq_ngrams667 @staticmethod668 def gerar_ngrams_leipzig(lista_palavras, postags=False):669 if type(lista_palavras) != list:670 raise Exception("Tipo errado!")671 system = os.system672 file_ngrams_tmp = '../Bases/ngrams.tmp'673 diretorio_leipzig_txt = "~/Bases/Corpora/Leipzig/*"674 if os.path.exists(file_ngrams_tmp) == True:675 system('rm '+file_ngrams_tmp)676 filtro = "".join(' | grep "%s"' % p for p in lista_palavras)677 comando_filtro = 'cat %s %s >> %s' % (678 diretorio_leipzig_txt, filtro, file_ngrams_tmp)679 os.system(comando_filtro)680 print(comando_filtro)681 cont_linhas = 0682 with open(file_ngrams_tmp, 'r') as saida_grep:683 for linha_iter in saida_grep:684 cont_linhas += 1685 if cont_linhas > 30000:686 raise Exception("Arquivo de n-grams grande!")687 resultado = []688 with open(file_ngrams_tmp, 'r') as saida_grep:689 for linha_iter in saida_grep:690 saida_blob = textblob.TextBlob(691 Util.completa_normalizacao(linha_iter))692 ngrams_linha = saida_blob.ngrams(693 n=Util.CONFIGS['ngram']['max'])694 for ng in ngrams_linha:695 if len(set(lista_palavras) & set(ng)) == len(lista_palavras):696 if postags == False:697 resultado.append(ng)698 else:699 resultado.append(nltk.pos_tag(ng))700 saida_blob = None701 ngrams_linha = None702 if os.path.exists(file_ngrams_tmp) == True:703 os.system('rm ' + file_ngrams_tmp)704 return resultado705 @staticmethod706 def carregar_base_ponderacao_definicoes():707 import json708 dir_arq = "../Bases/ponderacao_definicoes.json"709 if os.path.exists(dir_arq) == True:710 Alvaro.PONDERACAO_DEFINICOES = Util.abrir_json(dir_arq)711 else:712 Alvaro.PONDERACAO_DEFINICOES = {}713 return Alvaro.PONDERACAO_DEFINICOES714 @staticmethod715 def salvar_base_ponderacao_definicoes():716 dir_arq = "../Bases/ponderacao_definicoes.json"717 if Alvaro.PONDERACAO_DEFINICOES != None:718 Util.salvar_json(dir_arq, Alvaro.PONDERACAO_DEFINICOES)719 """720 Gera tokens de correlacao entre palavras da frase e sinonimos-candidatos721 """722 @staticmethod723 def gerar_pares_pmi(palavra, frase, cands):724 pos_uteis_frase = ['N', 'V']725 tokens_tagueados = nltk.pos_tag(nltk.word_tokenize(frase.lower()))726 tokens_frase = [r[0] for r in tokens_tagueados if r[1]727 [0] in pos_uteis_frase and r[0] != palavra]728 if palavra in tokens_frase:729 tokens_frase.remove(palavra)730 for t in list(tokens_frase):731 if Util.singularize(t) != t:732 tokens_frase.append(Util.singularize(t))733 # Gerando pares de correlação734 pares = list(set(list(itertools.product(*[tokens_frase, cands]))))735 return [reg for reg in pares if len(reg[0]) > 1 and len(reg[1]) > 1]736 @staticmethod737 def pontuar_frase_correlacao_pmi(pares_frase, pos, palavra=None, frase=None):738 deletar_docs_duplicados = Util.CONFIGS['corpora']['deletar_docs_duplicados']739 verbose_pmi = Util.CONFIGS['metodo_pmi']['verbose']740 pontuacao_definicoes = {}741 for par in pares_frase:742 token_frase, cand_par = par743 indexes_ex = Whoosh.DIR_INDEXES_EXEMPLOS744 obter_docs = Whoosh.consultar_documentos745 if Util.singularize(token_frase) != Util.singularize(cand_par):746 # Pesquisa747 if not str(par) in Alvaro.FREQUENCIA_PMI:748 docs_corpora = obter_docs(749 list(par), operador="AND", dir_indexes=Whoosh.DIR_INDEXES)750 Alvaro.FREQUENCIA_PMI[str(par)] = len(docs_corpora)751 frequencia_par = len(docs_corpora)752 docs_corpora = None753 else:754 frequencia_par = Alvaro.FREQUENCIA_PMI[str(par)]755 # Se o par ocorre no minimo uma vez...756 if frequencia_par > 0:757 token_frase, cand_par = par758 if cand_par in Alvaro.FREQUENCIA_PMI:759 if Alvaro.FREQUENCIA_PMI[cand_par] == 0:760 del Alvaro.FREQUENCIA_PMI[cand_par]761 if token_frase in Alvaro.FREQUENCIA_PMI:762 if Alvaro.FREQUENCIA_PMI[token_frase] == 0:763 del Alvaro.FREQUENCIA_PMI[token_frase]764 if not token_frase in Alvaro.FREQUENCIA_PMI:765 Alvaro.FREQUENCIA_PMI[token_frase] = Whoosh.count(766 token_frase, Whoosh.DIR_INDEXES)767 if not cand_par in Alvaro.FREQUENCIA_PMI:768 Alvaro.FREQUENCIA_PMI[cand_par] = Whoosh.count(769 cand_par, Whoosh.DIR_INDEXES)770 try:771 min_par = min(772 Alvaro.FREQUENCIA_PMI[cand_par], Alvaro.FREQUENCIA_PMI[token_frase])773 percentagem_par = float(frequencia_par)/float(min_par)774 except:775 percentagem_par = 0.00776 if verbose_pmi:777 print("\n")778 print("Par: " + str(par))779 print("Frequencia no corpus de '%s': %d" % (780 token_frase, Alvaro.FREQUENCIA_PMI[token_frase]))781 print("Frequencia no corpus de '%s': %d" % (782 cand_par, Alvaro.FREQUENCIA_PMI[cand_par]))783 print("Porcentagem: " + str(percentagem_par) + "%")784 print("\n")785 # Se a frequencia de cada um é maior que ZERO786 if Alvaro.FREQUENCIA_PMI[token_frase] > 0 and Alvaro.FREQUENCIA_PMI[cand_par] > 0:787 # Calculando PMI para palavras co-ocorrentes no Corpus788 pmi = Alvaro.pontuar_pmi(789 Alvaro.FREQUENCIA_PMI[token_frase],790 Alvaro.FREQUENCIA_PMI[cand_par],791 frequencia_par,792 Whoosh.DIR_INDEXES)793 if verbose_pmi or True:794 print("PMI para '%s': %f" % (str(par), pmi))795 #os.system('echo "%s" >> /mnt/ParticaoAlternat/pmi-log.txt'%frase)796 #os.system('echo "%s" >> /mnt/ParticaoAlternat/pmi-log.txt'%str(par))797 #os.system('echo "%s" >> /mnt/ParticaoAlternat/pmi-log.txt'%str(pmi))798 # Filtrando do corpus do dicionario documentos799 # referentes à definicao do candidato + POS tag800 docs_exemplos_tmp = obter_docs(list(par),801 dir_indexes=Whoosh.DIR_INDEXES_EXEMPLOS)802 docs_exemplos = []803 # Se os documentos804 for doc in docs_exemplos_tmp:805 # So selecionando exemplos pertencentes ao candidato806 if cand_par in doc['title'] and cand_par + '-' + pos in doc['path']:807 docs_exemplos.append(doc)808 docs_exemplos_tmp = None809 else:810 docs_exemplos = []811 if docs_exemplos:812 for doc in docs_exemplos:813 if cand_par in doc['title'] and cand_par + '-' + pos in doc['path']:814 if verbose_pmi:815 print('\n')816 print((cand_par, token_frase))817 print(doc['title'])818 print(doc['path'])819 print('\n')820 # Exemplo de uma dada definicao821 exemplos_selecionados = doc['content']822 blob_ex = textblob.TextBlob(823 exemplos_selecionados)824 print("\n\n")825 #print("PALAVRA: " + palavra)826 #print("FRASE: " + frase)827 print(doc['title'])828 print("\n")829 print("TF Exemplos:")830 palavras_relevantes_exemplos_tmp = Alvaro.tf_exemplos(831 blob_ex, min_freq=2)832 palavras_relevantes_exemplos = [833 p for p, freq in palavras_relevantes_exemplos_tmp]834 for palavra in palavras_relevantes_exemplos:835 inst = RepVetorial.INSTANCE836 # obter_palavras_relacionadas(self, positivos=None, negativos=None, pos=None, topn=1):837 try:838 res = RepVetorial.obter_palavras_relacionadas(839 inst, positivos=[palavra], topn=200)840 print("\n\t%s: %s" %841 (palavra.upper(), str(res)))842 except:843 pass844 print("\nPalavras relevantes exemplos:")845 raw_input(palavras_relevantes_exemplos_tmp)846 print("\n\n")847 # Frequencia848 ftoken_frase = Alvaro.tf(token_frase, blob_ex)849 if verbose_pmi:850 fm_token_frase = Alvaro.tf(851 token_frase, blob_ex)/blob_ex.split(':::').__len__()852 print("FreqMedia '%s': %f" % (853 token_frase, fm_token_frase))854 print("Frequencia '%s': %f" % (855 token_frase, ftoken_frase))856 print("PMI x Frequencia: %f" %857 (ftoken_frase * pmi))858 if not doc['title'] in pontuacao_definicoes:859 pontuacao_definicoes[doc['title']] = []860 pontuacao_definicoes[doc['title']].append(861 ftoken_frase * pmi)862 else:863 if verbose_pmi:864 print(865 "Palavras %s nao sao relacionadas no dicionario!" % str(par))866 docs_exemplos = None867 # Deletando arquivos duplicados868 if deletar_docs_duplicados == True:869 # Usado para reconhecer documentos duplicados870 # na indexacao e, posteriormente, deleta-los871 set_docs_corpora = set()872 paths_repetidos = set()873 documentos_deletaveis = []874 try:875 for doc_iter in docs_corpora:876 if len(doc_iter['content']) > Util.CONFIGS['max_text_length']:877 md5_doc = Util.md5sum_string(878 doc_iter['content'])879 if not md5_doc in set_docs_corpora:880 set_docs_corpora.add(md5_doc)881 else:882 if not doc_iter['path'] in paths_repetidos:883 doc_tmp = Whoosh.buscar_docnum(884 doc_iter['path'])885 documentos_deletaveis.append(doc_tmp)886 paths_repetidos.add(doc_iter['path'])887 if documentos_deletaveis:888 Whoosh.remover_docs(documentos_deletaveis)889 except Exception, e:890 pass891 else:892 docs_corpora = None893 set_docs_corpora = None894 paths_repetidos = None895 documentos_deletaveis = None896 return pontuacao_definicoes897 @staticmethod898 def pmi(palavra1, palavra2):899 freq_x = Whoosh.count(palavra1, Whoosh.DIR_INDEXES)900 freq_y = Whoosh.count(palavra2, Whoosh.DIR_INDEXES)901 freq_xy = Whoosh.count([palavra1, palavra2], Whoosh.DIR_INDEXES)902 return Alvaro.pontuar_pmi(freq_x, freq_y, freq_xy, Whoosh.DIR_INDEXES)903 """904 A partir de um conjunto de exemplos, armazenados905 em um BlobText, gere o ranking de palavras mais frequentes906 """907 @staticmethod908 def tf_exemplos(blob_exemplos, min_freq=1):909 contadores = { }910 cfgs = Util.CONFIGS911 pro = [p.lower() for p in cfgs['pronomes']]912 prep = [p.lower() for p in cfgs['preposicoes']]913 artigos = [p.lower() for p in cfgs['artigos']]914 conj = [p.lower() for p in cfgs['conjuncoes']]915 verbos_lig = [p.lower() for p in cfgs['verbos_ligacao']]916 palavras_excluiveis = pro + prep + artigos + conj + verbos_lig917 for p in blob_exemplos.words:918 freq = Alvaro.tf(p, blob_exemplos)919 if freq >= min_freq:920 if not p.lower() in palavras_excluiveis:921 contadores[p] = freq922 return sorted(contadores.items(), key=lambda x: x[1], reverse=True)923 """924 Obtem palavras similares (interseccao) comuns ao925 contexto das duas palavras passadas como parametros do metodo926 """927 @staticmethod928 def interseccao_palavras(p1, p2, pos):929 inst = RepVetorial.INSTANCE930 set_p1 = RepVetorial.obter_palavras_relacionadas(931 inst, positivos=[p1], pos=pos, topn=200)932 set_p2 = RepVetorial.obter_palavras_relacionadas(933 inst, positivos=[p2], pos=pos, topn=200)934 set_p1 = [p for p, s in set_p1]935 set_p2 = [p for p, s in set_p2]936 return list(set(set_p1) & set(set_p2))937 @staticmethod938 def palavras_similares(c, pos):939 dir_arq = "../Bases/PalavrasSimilaresEmbbedings/%s-%s.json" % (c, pos)940 if Util.arq_existe(None, dir_arq) == False:941 similares = RepVetorial.obter_palavras_relacionadas942 try:943 similares_embbedings = similares(944 RepVetorial.INSTANCE, positivos=[c], topn=200, pos=pos)945 Util.salvar_json(dir_arq, similares_embbedings)946 except:947 return []948 else:949 similares_embbedings = Util.abrir_json(950 dir_arq, criarsenaoexiste=False)951 return similares_embbedings952 @staticmethod953 def aplicar_wmd_sinonimia(palavra_target, pos, candidatos):954 resultado = Alvaro.pontuar_definicoes_frases(palavra_target, pos)955 try:956 resultado = [p for p, s in resultado if p in candidatos]957 return resultado + list(set(candidatos)-set(resultado))958 except Exception, e:959 return []960 """961 Dado um conjunto de candidatos, gera uma malha cartesiana962 de sinonimia sobre todas definicoes de cada um dos candidatos963 atraves da medida WMD. Ao final, salva em disco o objeto obtido964 """965 @staticmethod966 def gerar_pares_candidatos(lexelt, candidatos, pos):967 cfgs = Util.CONFIGS968 cache_ox = cfgs['oxford']['cache']969 dir_arquivo = cfgs['caminho_bases']+'/' + \970 cache_ox['sinonimiaWMD']+'/'+lexelt+".json"971 if Util.arq_existe(None, dir_arquivo):972 return Util.abrir_json(dir_arquivo)973 definicoes = { }974 ponderacoes = { }975 for c in candidatos:976 definicoes[c] = BaseOx.obter_definicoes(BaseOx.INSTANCE, c, pos)977 todos_pares = itertools.combinations(candidatos, 2)978 for par in todos_pares:979 p1, p2 = par980 if p1 != p2:981 for d1 in definicoes[p1]:982 for d2 in definicoes[p2]:983 inst_repvet = RepVetorial.INSTANCE984 if p1 < p2:985 chave_par = "%s:::%s;;;%s:::%s" % (p1, d1, p2, d2)986 else:987 chave_par = "%s:::%s;;;%s:::%s" % (p2, d2, p1, d1)988 if not chave_par in ponderacoes:989 pontuacao = RepVetorial.word_move_distance(990 inst_repvet, d1, d2)991 ponderacoes[chave_par] = pontuacao992 Util.salvar_json(dir_arquivo, ponderacoes)993 definicoes = None994 return ponderacoes995 """996 Recebe um inventario de sentido na forma lista de <lema:::definicao>997 e gera um score baseado na medida de word_move_distance998 Retorna: uma lista ordenada de pares <lema:::definicao, score_wmd>999 """1000 @staticmethod1001 def des_inventario_estendido_wmd(lexelt, frase, lista_inventario):1002 cache = Util.CONFIGS['oxford']['cache']['desambiguador_wmd']1003 dir_arquivo = cache + '/' + lexelt + ".des.json"1004 if Util.arq_existe(None, dir_arquivo) == False:1005 resultado = []1006 for reg in lista_inventario:1007 lema, deflema = reg.split(":::")1008 inst = RepVetorial.INSTANCE1009 pontuacao = RepVetorial.word_move_distance(1010 inst, deflema, frase)1011 resultado.append((reg, pontuacao))1012 saida_ordenda = Util.sort(resultado, col=1, reverse=False)1013 Util.salvar_json(dir_arquivo, saida_ordenda)1014 return saida_ordenda1015 else:1016 return Util.abrir_json(dir_arquivo, criarsenaoexiste=False)1017 """1018 Recebe um verbete e extrai a pagina da Wikipedia.1019 Entao, armazena a pagina em plain text1020 """1021 @staticmethod1022 def salvar_documento_wikipedia(verbete, url):1023 inst = ExtratorWikipedia.INSTANCE1024 texto, refs = ExtratorWikipedia.obter_texto(1025 inst, url, obter_referencias=True)1026 texto = Util.completa_normalizacao(texto)1027 dir_arquivo = "../Bases/Cache/Wikipedia/%s.json" % verbete1028 obj_pagina = Util.abrir_json(dir_arquivo, criarsenaoexiste=True)1029 if not verbete in obj_pagina:1030 obj_pagina[verbete] = {}1031 obj_pagina[verbete][url] = texto1032 try:1033 return Util.salvar_json(dir_arquivo, obj_pagina)1034 except:1035 return False1036 """1037 Recebe um conjunto de frases e, entao, calcula as definicoes cujas frases associadas1038 estejam em uma distancia num espaco vetorial menor que as frases das demais definicoes1039 metodo_ordem = 'menos_dispares'1040 metodo_ordem = 'frase_mais_proxima'1041 """1042 @staticmethod1043 def calc_distancia_ex(lexelt, todos_ex, instancia_entrada, melhor_predicao=[]):1044 frase_entrada, palavra_entrada = instancia_entrada1045 todos_scores = []1046 exs_separados = {}1047 contador_frases_ruins = {}1048 for lema, frase, lema, definicao, ex, pontuacao in todos_ex:1049 chave = lema + ":::" + definicao1050 if pontuacao != float('inf'):1051 todos_scores.append(pontuacao)1052 if not chave in exs_separados:1053 exs_separados[chave] = []1054 exs_separados[chave].append((ex, pontuacao))1055 media = Util.media(todos_scores)1056 if media == float('inf'):1057 print("\nUma frase de exemplo possui distancia infinita!\n")1058 desvio_padrao = statistics.pstdev(todos_scores)1059 for lema, frase, lema, definicao, ex, pontuacao in todos_ex:1060 # Se o score é maior que (média + desvio padrao), a definicao é ruim1061 if pontuacao > media + desvio_padrao:1062 chave = lema + ":::" + definicao1063 if not chave in contador_frases_ruins:1064 contador_frases_ruins[chave] = 01065 contador_frases_ruins[chave] += 11066 res_ordenado = set()1067 qtde_exemplos_definicao = []1068 for lema, frase, lema, definicao, ex, pontuacao in todos_ex:1069 chave = lema + ":::" + definicao1070 try:1071 qtde_exemplos_dispares = contador_frases_ruins[chave]1072 except:1073 qtde_exemplos_dispares = 01074 qtde_exemplos = len(exs_separados[chave])1075 qtde_exemplos_definicao.append(qtde_exemplos)1076 proporcao = float(qtde_exemplos_dispares) / float(qtde_exemplos)1077 reg = (chave, proporcao, qtde_exemplos)1078 res_ordenado.add(reg)1079 res_ordenado = Util.sort(list(res_ordenado), col=1, reverse=False)1080 res_ordenado_valido = []1081 res = []1082 contador_reg = 01083 flag = False1084 indices_validos = []1085 print("\n")1086 for chave, proporcao, qtde_exemplos in res_ordenado:1087 reg = (chave, proporcao, qtde_exemplos)1088 media_qtde_ex = Util.media(qtde_exemplos_definicao)1089 desvpad_qtde_ex = statistics.pstdev(qtde_exemplos_definicao)1090 # Se quantidade de exemplos é maior que (média - desvio padrão)1091 if qtde_exemplos >= media_qtde_ex - desvpad_qtde_ex:1092 res_ordenado_valido.append(reg)1093 res.append(reg[0].split(":::")[0])1094 if reg[0].split(":::")[0] in melhor_predicao:1095 indices_validos.append(contador_reg)1096 print(str(str(contador_reg) + ' - ' + str(reg) + "\n").upper())1097 flag = True1098 contador_reg += 11099 else:1100 pass1101 if flag == True:1102 arq_saida = "/mnt/ParticaoAlternat/Bases/ResultadosAnotadosDesambiguador/%s.json" % lexelt1103 arq_saida = arq_saida.replace(' ', '-')1104 if Util.arq_existe(None, arq_saida):1105 return list(set(res))1106 while True:1107 try:1108 indice = int(raw_input("\nDigite o indice valido: "))1109 if int(indice) in indices_validos or indice < 0:1110 break1111 except:1112 pass1113 print(res_ordenado_valido[indice])1114 print(res_ordenado_valido[-1])1115 valor_max = res_ordenado_valido[-1][1]1116 valor_min = res_ordenado_valido[0][1]1117 percentile = valor_max / 10.01118 proporcao_melhor = res_ordenado_valido[indice][1]1119 percentile_achado = int(math.ceil(proporcao_melhor / percentile))1120 if indice > 0:1121 obj = {}1122 obj['percentil'] = percentile_achado1123 obj['proporcao_melhor'] = proporcao_melhor1124 obj['ranking'] = res_ordenado_valido1125 Util.salvar_json(arq_saida, obj)1126 return list(set(res))1127 """1128 Retorna os sinomos cuja as definições associadas tem suas frases de1129 exemplo com baixa distancia semantica após a aplicação do método da substituição1130 """1131 @staticmethod1132 def pontuar_definicoes_frases(palavra_target, pos, max_frases=100000000000):1133 pontuacoes = {}1134 sinonimos_usados = set()1135 # obter_atributo(self, palavra, pos, definicao, atributo):1136 for def_target in BaseOx.obter_definicoes(BaseOx.INSTANCE, palavra_target, pos):1137 sinonimos = BaseOx.obter_sins(1138 BaseOx.INSTANCE, palavra_target, def_target, pos)1139 melhor_sinonimo = None1140 for s in sinonimos:1141 if s != palavra_target and not s in sinonimos_usados:1142 sinonimos_usados.add(s)1143 melhor_sinonimo = s1144 break1145 if melhor_sinonimo:1146 for def_siter in BaseOx.obter_definicoes(BaseOx.INSTANCE, melhor_sinonimo, pos):1147 melhor_sinonimo_sing = Util.singularize(melhor_sinonimo)1148 chave = melhor_sinonimo_sing+'@@@@'+def_siter1149 pontuacoes[chave] = []1150 todos_exemplos = BaseOx.obter_atributo(BaseOx.INSTANCE,1151 melhor_sinonimo, pos, def_siter, 'exemplos')[:max_frases]1152 for ex_ in todos_exemplos:1153 ex = ex_.lower()1154 novo_ex = ex.replace(1155 melhor_sinonimo_sing, palavra_target)1156 if novo_ex == ex:1157 novo_ex = ex.replace(1158 melhor_sinonimo, palavra_target)1159 try:1160 if novo_ex == ex:1161 t = (melhor_sinonimo, melhor_sinonimo_sing)1162 raise Exception(1163 "\nNova frase deu errado! P: %s\n" % str(t))1164 else:...

Full Screen

Full Screen

gerenciador_logs.py

Source:gerenciador_logs.py Github

copy

Full Screen

...25 self.log = pd.concat([self.log, pd.DataFrame([[modelo, entrada, saida, [neuronio.converte_json() for neuronio in neuronios_oculta], [neuronio.converte_json() for neuronio in neuronio_saida], taxa_aprendizado, epocas, tempo, tolerancia_erro, tolerancia_epocas,26 erro_epoca, erro_validacao]], columns=self.log.columns)], ignore_index=True)27 except Exception as e:28 print(f"Falha ao adicionar log! | Exceção: {e}")29 def obter_atributo(self, coluna: str):30 try:31 return self.log.get(coluna)32 except Exception as error:33 print(f"Houve um erro ao obter o atributo {coluna} | {error}")34 return None35 def log_completo(self):36 """ Retorna o dataframe de log completo """37 try:38 return self.log39 except Exception as e:40 print(f"Falha ao retornar dataframe de log! | Exceção: {e}")41 return None42 def log_html(self):43 """ Converte o dataframe de log para uma string no formato HTML """...

Full Screen

Full Screen

gerenciador_notebook.py

Source:gerenciador_notebook.py Github

copy

Full Screen

...38 with open(caminho_arquivo, mode="w", encoding="utf-8") as arquivo:39 arquivo.write(html)40 def grava_notebook(self, nome_notebook = "1"):41 caminho_arquivo = f"{self.caminho_notebook}/notebook-{nome_notebook}.json"42 erros_treinamento = self.logger.obter_atributo("Erro epoca")43 erros_validacao = self.logger.obter_atributo("Erro validacao")44 self.salvar_log_treinamento(nome_notebook)45 with open(caminho_arquivo, mode="w", encoding="utf-8") as arquivo:46 notebook = Notebook(47 self.conjuntos,48 list(erros_treinamento),49 list(erros_validacao),50 self.matriz_confusao,51 self.predicoes52 ).to_json()53 arquivo.write(json.dumps(notebook))54 55class Notebook:56 def __init__(self, conjuntos, erros_treinamento, erros_validacao, matriz_confusao, log_predicoes):57 self.conjuntos = conjuntos...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run SeleniumBase automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful