Spaces:
Running
Running
File size: 3,846 Bytes
750ddf0 94117f9 854c1c5 ca00147 e5832e1 854c1c5 750ddf0 78c5723 0ed8739 854c1c5 750ddf0 ca00147 854c1c5 ca00147 72f5d21 854c1c5 94117f9 ca00147 0ed8739 854c1c5 94117f9 854c1c5 ca00147 854c1c5 e5832e1 854c1c5 0d10e90 76fa02e 0d10e90 854c1c5 76fa02e 0ed8739 76fa02e 0d10e90 854c1c5 94117f9 0d10e90 750ddf0 854c1c5 |
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 |
import pandas as pd
class PaperList:
def __init__(self) -> None:
self.table = pd.read_csv("papers.csv")
self._preprcess_table()
self.table_header = """
<tr>
<td width="50%">Paper</td>
<td width="22%">Authors</td>
<td width="4%">pdf</td>
<td width="4%">Supp</td>
<td width="4%">arXiv</td>
<td width="4%">GitHub</td>
<td width="4%">HF Spaces</td>
<td width="4%">HF Models</td>
<td width="4%">HF Datasets</td>
</tr>"""
def _preprcess_table(self) -> None:
self.table["title_lowercase"] = self.table.title.str.lower()
rows = []
for row in self.table.itertuples():
paper = f'<a href="{row.url}" target="_blank">{row.title}</a>'
pdf = f'<a href="{row.pdf}" target="_blank">pdf</a>'
supp = f'<a href="{row.supp}" target="_blank">supp</a>' if isinstance(row.supp, str) else ""
arxiv = f'<a href="{row.arxiv}" target="_blank">arXiv</a>' if isinstance(row.arxiv, str) else ""
github = f'<a href="{row.github}" target="_blank">GitHub</a>' if isinstance(row.github, str) else ""
hf_space = f'<a href="{row.hf_space}" target="_blank">Space</a>' if isinstance(row.hf_space, str) else ""
hf_model = f'<a href="{row.hf_model}" target="_blank">Model</a>' if isinstance(row.hf_model, str) else ""
hf_dataset = (
f'<a href="{row.hf_dataset}" target="_blank">Dataset</a>' if isinstance(row.hf_dataset, str) else ""
)
new_row = f"""
<tr>
<td>{paper}</td>
<td>{row.authors}</td>
<td>{pdf}</td>
<td>{supp}</td>
<td>{arxiv}</td>
<td>{github}</td>
<td>{hf_space}</td>
<td>{hf_model}</td>
<td>{hf_dataset}</td>
</tr>"""
rows.append(new_row)
self.table["html_table_content"] = rows
def render(self, search_query: str, case_sensitive: bool, filter_names: list[str]) -> tuple[int, str]:
df = self.table
if search_query:
if case_sensitive:
df = df[df.title.str.contains(search_query)]
else:
df = df[df.title_lowercase.str.contains(search_query.lower())]
has_supp = "Supp" in filter_names
has_arxiv = "arXiv" in filter_names
has_github = "GitHub" in filter_names
has_hf_space = "HF Space" in filter_names
has_hf_model = "HF Model" in filter_names
has_hf_dataset = "HF Dataset" in filter_names
df = self.filter_table(df, has_supp, has_arxiv, has_github, has_hf_space, has_hf_model, has_hf_dataset)
return len(df), self.to_html(df, self.table_header)
@staticmethod
def filter_table(
df: pd.DataFrame,
has_supp: bool,
has_arxiv: bool,
has_github: bool,
has_hf_space: bool,
has_hf_model: bool,
has_hf_dataset: bool,
) -> pd.DataFrame:
if has_supp:
df = df[~df.supp.isna()]
if has_arxiv:
df = df[~df.arxiv.isna()]
if has_github:
df = df[~df.github.isna()]
if has_hf_space:
df = df[~df.hf_space.isna()]
if has_hf_model:
df = df[~df.hf_model.isna()]
if has_hf_dataset:
df = df[~df.hf_dataset.isna()]
return df
@staticmethod
def to_html(df: pd.DataFrame, table_header: str) -> str:
table_data = "".join(df.html_table_content)
return f"""
<table>
{table_header}
{table_data}
</table>"""
|