Spaces:
Running
Running
File size: 3,947 Bytes
750ddf0 76fa02e ca00147 e5832e1 750ddf0 0ed8739 750ddf0 ca00147 72f5d21 ca00147 72f5d21 ca00147 72f5d21 ca00147 72f5d21 ca00147 0ed8739 ca00147 0ed8739 ca00147 e5832e1 f279af7 e5832e1 f279af7 0ed8739 e5832e1 0ed8739 3b22c2d 76fa02e 0ed8739 76fa02e 0ed8739 76fa02e 750ddf0 ca00147 750ddf0 |
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 |
from __future__ import annotations
import pandas as pd
class PaperList:
def __init__(self):
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 ''
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(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)
def filter_table(self, 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
def to_html(self, df: pd.DataFrame) -> str:
table_rows = df.html_table_content
table_data = ''.join(table_rows)
html = f'''<table>
{self.table_header}
{table_data}
</table>'''
return html
|