Spaces:
Running
Running
File size: 4,159 Bytes
2c076ca a5044c6 2c076ca a5044c6 2c076ca a7fe460 2c076ca a7fe460 2c076ca a7fe460 2c076ca a7fe460 a5044c6 a7fe460 a5044c6 a7fe460 a5044c6 2c076ca a7fe460 d8fdbeb a7fe460 2c076ca a5044c6 d8fdbeb a5044c6 a7fe460 a5044c6 2c076ca a7fe460 2c076ca a5044c6 2c076ca a7fe460 b2ac83c a7fe460 2c076ca a5044c6 2c076ca a7fe460 2c076ca a7fe460 2c076ca a7fe460 |
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 |
import gradio as gr
import re
import os
import subprocess
import argparse
def remove_color_codes(text):
color_pattern = re.compile(r"\x1b\[\d+m")
clean_text = re.sub(color_pattern, "", text)
return clean_text
def to_html(document):
lines = document.split("\n")
formatted_lines = []
for line in lines:
if line.startswith("Error"):
formatted_line = f'<span style="color: red;">{line}</span>'
elif line.startswith("Warning"):
formatted_line = f'<span style="color: yellow;">{line}</span>'
elif line.startswith("Parsing Error:"):
formatted_line = f'<span style="color: yellow;">{line}</span>'
elif line == "All Clear!":
formatted_line = f'<span style="color: green;">{line}</span>'
else:
formatted_line = line
formatted_lines.append(formatted_line)
formatted_document = "<br>".join(formatted_lines)
return formatted_document
def add_images(file_name):
html = '<div align="center">'
for file in os.listdir("."):
if file.startswith(f"errors-{file_name}") and file.endswith(".png"):
html += f'<img src="file/{file}">'
html += "</div>"
return html
def clear_cached_images(file_name):
for file in os.listdir("."):
if file.startswith(f"errors-{file_name}") and file.endswith(".png"):
os.remove(file)
def get_filename(file):
file_name = os.path.basename(file).split(".")[0]
if "_" in file_name:
# apparently aclpubcheck doesn't like underscores in filenames
file_name = file_name.split("_")[0]
return file_name
def upload_file(file, paper_type):
file_name_cmd = file.name.replace(" ", "\ ")
file_name = get_filename(file.name)
clear_cached_images(file_name)
command = f"aclpubcheck --paper_type {paper_type} {file_name_cmd}"
out = subprocess.run(
command, shell=True, stdout=subprocess.PIPE, text=True, stderr=subprocess.STDOUT
)
return to_html(remove_color_codes(out.stdout)) + add_images(file_name)
with gr.Blocks() as demo:
header = """
<div align="center">
<img src="https://upload.wikimedia.org/wikipedia/en/thumb/7/72/Association_for_Computational_Linguistics_logo.svg/2880px-Association_for_Computational_Linguistics_logo.svg.png" alt="acl-logo" width=100px/>
<h1>ACL Pubcheck Tool</h1>
</div>
"""
gr.HTML(header)
gr.Markdown(
"Drop or upload your paper here to have it checked for [*ACL conferences](https://www.aclweb.org/) guidelines."
)
dropdown = gr.Dropdown(
["long", "short", "demo", "other"], label="Paper type", value="long"
)
file_output = gr.File(file_types=[".pdf"])
button = gr.Button("Check your PDF!", variant="primary")
out = gr.HTML()
gr.Markdown(
"This graphical interface is using the official [aclpubcheck tool](https://github.com/acl-org/aclpubcheck). Check the [Github repo for more information.](https://github.com/teelinsan/aclpubcheck-gui)"
)
gr.Markdown(
"No data is collected. If you prefer you can also duplicate this Space to run it privately. [![Duplicate Space](https://img.shields.io/badge/-Duplicate%20Space-blue?labelColor=white&style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAP5JREFUOE+lk7FqAkEURY+ltunEgFXS2sZGIbXfEPdLlnxJyDdYB62sbbUKpLbVNhyYFzbrrA74YJlh9r079973psed0cvUD4A+4HoCjsA85X0Dfn/RBLBgBDxnQPfAEJgBY+A9gALA4tcbamSzS4xq4FOQAJgCDwV2CPKV8tZAJcAjMMkUe1vX+U+SMhfAJEHasQIWmXNN3abzDwHUrgcRGmYcgKe0bxrblHEB4E/pndMazNpSZGcsZdBlYJcEL9Afo75molJyM2FxmPgmgPqlWNLGfwZGG6UiyEvLzHYDmoPkDDiNm9JR9uboiONcBXrpY1qmgs21x1QwyZcpvxt9NS09PlsPAAAAAElFTkSuQmCC&logoWidth=14)](https://huggingface.co/spaces/teelinsan/aclpubcheck?duplicate=true)"
)
button.click(upload_file, [file_output, dropdown], out)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--host", default="0.0.0.0", type=str)
parser.add_argument("--port", default=7860, type=int)
args = parser.parse_args()
demo.launch(server_name=args.host, server_port=args.port) |