import gradio as gr from clean_bibtex.clean_bibtex import get_url, get_dblp_bibtext, parse_bibtext_file_titles def parse_titles(bibtex): titles = [] lines = bibtex.split("\n") print(lines) for line in lines: if line.strip().startswith("title"): title = "".join(line.split("=")[1:]) title_clean = title.replace("{", "").replace("}", "").replace(",\n", "").strip() titles.append(title_clean) return titles def cleaner(bibtex, keep_keys, file_obj): dblp_citations = [] errors = [] if file_obj: titles = parse_bibtext_file_titles(file_obj.name) elif bibtex: titles = parse_titles(bibtex) for publication in titles: if site_url := get_url(publication): if dblp_citation := get_dblp_bibtext(site_url): dblp_citations.append(dblp_citation) else: errors.append(" - " + publication) else: errors.append(" - " + publication) if dblp_citations: filenaem = "cleaned.bib" with open(filenaem, "w") as outFile: outFile.write("\n".join(dblp_citations)) return filenaem, "\n".join(errors) iface = gr.Interface( fn=cleaner, title="BibTeX cleaner", description="Clean a BibTeX file or string by dragging the incomplete or broken BibTeX file into the file box or pasting a BibTeX string into the string field. The titles are extracted, searched at the DBLP, compiled into a clean BibTeX file.", inputs=[ gr.inputs.Textbox(label="Paste a string here:", lines=1), gr.inputs.Checkbox(label="Keep original keys:"), gr.inputs.File(label="Drag a Bibtex file here:", file_count="single", type="file", optional=True), ], outputs=[ gr.outputs.File(label="Cleaned BibTeX file:"), gr.outputs.Textbox(type="auto", label="Errors:"), ], ) iface.launch()