Spaces:
Sleeping
Sleeping
consertei saída dos LLMs
Browse files
app.py
CHANGED
|
@@ -37,7 +37,31 @@ REFERENCE_PATTERNS = [
|
|
| 37 |
r'^([A-Z][A-Za-z\s,&.-]+?&[A-Za-z\s,&.-]+?)\.\s*\((\d{4}[a-z]?)\)\.\s*([^.]+?)\.\s*([^.]+?)\.?\s*$',
|
| 38 |
|
| 39 |
# Padrão 7: Referências numeradas [número] Autor: Título, Editora (ano)
|
| 40 |
-
r'^\[\d+\]\s*([A-Z][A-Za-z\s,&.-]+?):\s*([^,]+?),\s*([^(]+?)\s*\((\d{4})\)'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
]
|
| 42 |
|
| 43 |
class Reference(BaseModel):
|
|
@@ -102,7 +126,7 @@ def extract_references_with_llm(text, model_name):
|
|
| 102 |
model_settings=ModelSettings(
|
| 103 |
timeout=30,
|
| 104 |
),
|
| 105 |
-
|
| 106 |
system_prompt="""
|
| 107 |
Você é um especialista em análise de artigos científicos.
|
| 108 |
Sua tarefa é identificar e extrair APENAS a seção de referências bibliográficas do texto fornecido.
|
|
@@ -131,7 +155,7 @@ def extract_references_with_llm(text, model_name):
|
|
| 131 |
|
| 132 |
# Converter para lista de dicionários para compatibilidade com DataFrame
|
| 133 |
references_list = []
|
| 134 |
-
for ref in result.
|
| 135 |
references_list.append({
|
| 136 |
"authors": ", ".join(ref.authors) if ref.authors else "",
|
| 137 |
"title": ref.title,
|
|
@@ -214,7 +238,8 @@ def extract_references_with_regex(text):
|
|
| 214 |
}
|
| 215 |
|
| 216 |
references.append(reference)
|
| 217 |
-
|
|
|
|
| 218 |
return references
|
| 219 |
|
| 220 |
except Exception as e:
|
|
|
|
| 37 |
r'^([A-Z][A-Za-z\s,&.-]+?&[A-Za-z\s,&.-]+?)\.\s*\((\d{4}[a-z]?)\)\.\s*([^.]+?)\.\s*([^.]+?)\.?\s*$',
|
| 38 |
|
| 39 |
# Padrão 7: Referências numeradas [número] Autor: Título, Editora (ano)
|
| 40 |
+
r'^\[\d+\]\s*([A-Z][A-Za-z\s,&.-]+?):\s*([^,]+?),\s*([^(]+?)\s*\((\d{4})\)',
|
| 41 |
+
|
| 42 |
+
# Padrão 8: Referências numeradas com DOI opcional
|
| 43 |
+
r"""
|
| 44 |
+
^ # início de linha (após possível marcador de ordem)
|
| 45 |
+
(?:\d+\.\s*)? # número da referência (opcional), seguido de ponto e espaço
|
| 46 |
+
(?P<autores> # grupo 'autores'
|
| 47 |
+
[^\.]+? # tudo antes do primeiro ponto final (não guloso)
|
| 48 |
+
)\.\s+
|
| 49 |
+
(?P<titulo> # grupo 'titulo'
|
| 50 |
+
[^\n\.]+ # até o próximo ponto final ou quebra de linha
|
| 51 |
+
)\.
|
| 52 |
+
\s*
|
| 53 |
+
(?P<journal> # grupo 'journal'
|
| 54 |
+
[^\n;]+ # até o próximo ponto e vírgula (ou quebra de linha)
|
| 55 |
+
)
|
| 56 |
+
[;,]?\s*
|
| 57 |
+
(?P<ano> # grupo 'ano'
|
| 58 |
+
\d{4} # 4 dígitos (ano)
|
| 59 |
+
)
|
| 60 |
+
(?:;[^\n]*?)? # volume, issue, páginas (opcional, não capturado)
|
| 61 |
+
(?:\n+ # nova linha(s), captura DOI opcional
|
| 62 |
+
(?P<doi> https?://doi\.org/[^\s]+ )
|
| 63 |
+
)? # DOI pode estar na linha de baixo ou ausente
|
| 64 |
+
"""
|
| 65 |
]
|
| 66 |
|
| 67 |
class Reference(BaseModel):
|
|
|
|
| 126 |
model_settings=ModelSettings(
|
| 127 |
timeout=30,
|
| 128 |
),
|
| 129 |
+
output_type=ReferencesResponse,
|
| 130 |
system_prompt="""
|
| 131 |
Você é um especialista em análise de artigos científicos.
|
| 132 |
Sua tarefa é identificar e extrair APENAS a seção de referências bibliográficas do texto fornecido.
|
|
|
|
| 155 |
|
| 156 |
# Converter para lista de dicionários para compatibilidade com DataFrame
|
| 157 |
references_list = []
|
| 158 |
+
for ref in result.output.references:
|
| 159 |
references_list.append({
|
| 160 |
"authors": ", ".join(ref.authors) if ref.authors else "",
|
| 161 |
"title": ref.title,
|
|
|
|
| 238 |
}
|
| 239 |
|
| 240 |
references.append(reference)
|
| 241 |
+
|
| 242 |
+
|
| 243 |
return references
|
| 244 |
|
| 245 |
except Exception as e:
|