-
Notifications
You must be signed in to change notification settings - Fork 0
/
qualis.py
183 lines (165 loc) · 8.25 KB
/
qualis.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#!/usr/bin/python
# encoding: utf-8
#
#
# scriptLattes V8
# http://scriptlattes.sourceforge.net/
# Pacote desenvolvido por Helena Caseli
#
# Este programa é um software livre; você pode redistribui-lo e/ou
# modifica-lo dentro dos termos da Licença Pública Geral GNU como
# publicada pela Fundação do Software Livre (FSF); na versão 2 da
# Licença, ou (na sua opinião) qualquer versão.
#
# Este programa é distribuído na esperança que possa ser util,
# mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer
# MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
# Licença Pública Geral GNU para maiores detalhes.
#
# Você deve ter recebido uma cópia da Licença Pública Geral GNU
# junto com este programa, se não, escreva para a Fundação do Software
# Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
#
import logging
import re
import fileinput
from scriptLattes import *
from scriptLattes.util import similaridade_entre_cadeias, buscarArquivo
logger = logging.getLogger(__name__)
class Qualis:
periodicos = {}
congressos = {}
qtdPB0 = {} # Total de artigos em periodicos por Qualis
qtdPB4 = {} # Total de trabalhos completos em congressos por Qualis
qtdPB5 = {} # Total de resumos expandidos em congressos por Qualis
qtdPB7 = {} # Total de artigos aceitos para publicacao por Qualis
def __init__(self, grupo):
if grupo.obterParametro('global-identificar_publicacoes_com_qualis'):
self.periodicos = self.carregarQualis(grupo.obterParametro('global-arquivo_qualis_de_periodicos'))
self.congressos = self.carregarQualis(grupo.obterParametro('global-arquivo_qualis_de_congressos'))
def calcularTotaisDosQualis(self, grupo):
if (not grupo.obterParametro('global-arquivo_qualis_de_periodicos') == ''):
self.qtdPB0 = self.calcularTotaisDosQualisPorTipo(self.qtdPB0,
grupo.compilador.listaCompletaArtigoEmPeriodico)
self.qtdPB7 = self.calcularTotaisDosQualisPorTipo(self.qtdPB7, grupo.compilador.listaCompletaArtigoAceito)
if (not grupo.obterParametro('global-arquivo_qualis_de_congressos') == ''):
self.qtdPB4 = self.calcularTotaisDosQualisPorTipo(self.qtdPB4,
grupo.compilador.listaCompletaTrabalhoCompletoEmCongresso)
self.qtdPB5 = self.calcularTotaisDosQualisPorTipo(self.qtdPB5,
grupo.compilador.listaCompletaResumoExpandidoEmCongresso)
def calcularTotaisDosQualisPorTipo(self, qtd, listaCompleta):
self.inicializaListaQualis(qtd)
keys = listaCompleta.keys()
if len(keys) > 0:
for ano in keys:
elementos = listaCompleta[ano]
for index in range(0, len(elementos)):
pub = elementos[index]
qtd[pub.qualis] += 1
return qtd
def buscaQualis(self, tipo, nome, sigla=''):
dist = 0
indice = 0
# Percorrer lista de periodicos tentando casar com nome usando funcao similaridade_entre_cadeias(str1, str2) de scriptLattes.py
if tipo == 'P':
if self.periodicos.get(sigla) != None:
# print "CASOU ISSN: ", nome, sigla
return self.periodicos.get(
sigla), '' # Retorna Qualis do issn/sigla exato encontrado - Casamento perfeito
elif self.periodicos.get(nome) != None:
# print "CASOU NOME: ", nome, sigla
return self.periodicos.get(nome), '' # Retorna Qualis do nome exato encontrado - Casamento perfeito
else:
chaves = self.periodicos.keys()
for i in range(0, len(chaves)):
distI = similaridade_entre_cadeias(nome, chaves[i], qualis=True)
if distI > dist: # comparamos: nome com cada nome de periodico
indice = i
dist = distI
if indice > 0:
return self.periodicos.get(chaves[indice]), chaves[indice] # Retorna Qualis de nome similar
else:
if self.congressos.get(nome) != None:
return self.congressos.get(nome), '' # Retorna Qualis do nome exato encontrado - Casamento perfeito
else:
chaves = self.congressos.keys()
for i in range(0, len(chaves)):
distI = similaridade_entre_cadeias(nome, chaves[i], qualis=True)
if distI > dist: # comparamos: nome com cada nome de evento
indice = i
dist = distI
if indice > 0:
return self.congressos.get(chaves[indice]), chaves[indice] # Retorna Qualis de nome similar
# return 'Qualis nao identificado', ''
return 'Qualis nao identificado', nome
def analisarPublicacoes(self, membro, grupo):
# Percorrer lista de publicacoes buscando e contabilizando os qualis
if (not grupo.obterParametro('global-arquivo_qualis_de_periodicos') == ''):
for pub in membro.listaArtigoEmPeriodico:
qualis, similar = self.buscaQualis('P', pub.revista, pub.issn)
pub.qualis = qualis
pub.qualissimilar = similar
for pub in membro.listaArtigoAceito:
qualis, similar = self.buscaQualis('P', pub.revista, pub.issn)
pub.qualis = qualis
pub.qualissimilar = similar
if (not grupo.obterParametro('global-arquivo_qualis_de_congressos') == ''):
for pub in membro.listaTrabalhoCompletoEmCongresso:
qualis, similar = self.buscaQualis('C', pub.nomeDoEvento)
if qualis == 'Qualis nao identificado':
if self.congressos.get(pub.sigla) != None:
qualis = self.congressos.get(pub.sigla) # Retorna Qualis da sigla com nome do evento
similar = pub.sigla
else:
qualis = 'Qualis nao identificado'
similar = pub.nomeDoEvento
pub.qualis = qualis
pub.qualissimilar = similar
for pub in membro.listaResumoExpandidoEmCongresso:
qualis, similar = self.buscaQualis('C', pub.nomeDoEvento)
pub.qualis = qualis
pub.qualissimilar = similar
def inicializaListaQualis(self, lista):
lista['A1'] = 0
lista['A2'] = 0
lista['A3'] = 0 # adicionado para novo qualis
lista['A4'] = 0 # adicionado para novo qualis
lista['B1'] = 0
lista['B2'] = 0
lista['B3'] = 0
lista['B4'] = 0
lista['B5'] = 0
lista['C'] = 0
lista['NP'] = 0 # adicionado para novo qualis
lista['Qualis nao identificado'] = 0
def carregarQualis(self, arquivo):
lista = {}
if (not arquivo == ''):
for linha in fileinput.input(arquivo):
linha = linha.replace("\r", "")
linha = linha.replace("\n", "")
campos = linha.split('\t')
sigla = campos[0].rstrip().decode("utf8") # ISSN de periodicos ou SIGLA de congressos
nome = campos[1].rstrip().decode("utf8") # Nome do periodico ou evento
qualis = campos[2].rstrip() # Estrato Qualis
# nome = self.padronizarNome(nome)
# sigla = self.padronizarNome(sigla)
sigla = sigla.replace("-", "")
lista[nome] = qualis
lista[sigla] = qualis # Armazena a sigla/issn do evento/periodico
print "[QUALIS]: " + str(len(lista)) + " itens adicionados de " + arquivo
return lista
def padronizarNome(self, nome):
# nome = nome.replace(u"\u00A0", " ")
# nome = nome.replace(u"\u2010", " ")
# nome = nome.replace(u"-"," ")
nome = nome.replace(u"\u00A0", "")
nome = nome.replace(u"\u2010", "")
nome = nome.replace(u"-", "")
# nome = re.sub(r"\(.*\)", " ", nome)
# nome = re.sub(r"\(", " ", nome)
# nome = re.sub(r"\)", " ", nome)
nome = re.sub("\s+", ' ', nome)
nome = nome.strip()
return nome