Spaces:
Sleeping
Sleeping
| """๋ฒค์น๋งํฌ(ํ์ฌ) ์ด๋ฆ ๊ฐ๋ช ์ฒ๋ฆฌ โ Space ํ์ ์ ์ฉ. | |
| ๋ฆฌ๋๋ณด๋ ์ปฌ๋ผ์ `<ํ์ฌ>_<๋ฒ์ /์คํ๋ฆฟ>_<์นดํ ๊ณ ๋ฆฌ>` ํ์์ด๊ณ ๋งจ ์ ํ ํฐ์ด ์ค์ | |
| ๊ณ ๊ฐ/๊ธฐ๊ด๋ช (Coupang, Hyundai, KISA ...)์ด๋ผ, ์ธ๋ถ ๊ณต๊ฐ SPACE ์์๋ ๋งจ ์ | |
| ํ ํฐ๋ง ๋ ๊ธ์ ์ฝ๋๋ก ์นํํ๋ค. ๋ฒ์ /์คํ๋ฆฟยท์นดํ ๊ณ ๋ฆฌ๋ ๊ทธ๋๋ก ๋ฌ์ ํ์ | |
| ์๋ฏธ์ ๊ธฐ์กด ๋์์ ๋ณด์กดํ๋ค. | |
| Coupang_balanced_test_v1_Fire -> Co_balanced_test_v1_Fire | |
| Hyundai_v3_Falldown -> Hy_v3_Falldown | |
| Korea_nrf_Smoke -> Ko_nrf_Smoke | |
| ๊ตฌ๊ธ ์ํธ ์๋ณธ์ ์ ๋ ๊ฑด๋๋ฆฌ์ง ์๋๋ค โ sheet2df ๊ฐ df ๋ฅผ ๋ง๋ ํ์ ๋จ๊ณ์์๋ง | |
| ์ปฌ๋ผ๋ช ์ ์นํํ๊ณ , config ์ ๋ฐ์ดํฐ์ ๋ชฉ๋ก/์จ๊น ๊ท์น๋ ๊ฐ์ ์ฝ๋๋ก ๋ง์ถฐ ๊ฐฑ์ ํ๋ค. | |
| """ | |
| import re | |
| import enviroments.config as config | |
| _map = {} # ํ์ฌ๋ช (lower) -> 2๊ธ์ ์ฝ๋ | |
| _orig_default_avg = None | |
| _orig_default_ds = None | |
| _orig_hide_exact = None | |
| # โโ ๋ชจ๋ธ๋ช ํ ํฐ ๊ฐ๋ช (์ ๊ฐ ์นํ) โโ | |
| # ํ์ดํผ๋งํฌ ๋ชจ๋ธ๋ช ์์ ํน์ ๋ชจ๋ธ ํ ํฐ์ ๊ฐ๋ฆฐ๋ค. ์: PE(Perception Encoder) -> CLIP. | |
| # ์์ผ๋ก ๊ฐ๋ฆด ๋ชจ๋ธ์ด ์๊ธฐ๋ฉด ์ฌ๊ธฐ์ {"์๋ณธํ ํฐ": "ํ์ํ ํฐ"} ์ผ๋ก ์ถ๊ฐ๋ง ํ๋ฉด ๋๋ค. | |
| # ํ ํฐ ๊ฒฝ๊ณ๋ ๋ฌธ์์ด ์์/๋ ๋๋ '-' '_' ๋ก ๋ณธ๋ค (PE-Core, FT_PE-Core, PE_Large ๋ชจ๋ ๋งค์นญ, | |
| # PETAยทPErson ๊ฐ์ ๋ค๋ฅธ ๋จ์ด๋ ๊ฑด๋๋ฆฌ์ง ์์). ๋์๋ฌธ์ ๊ตฌ๋ถ. | |
| MODEL_TOKEN_SUBS = { | |
| "PE": "CLIP", | |
| } | |
| _token_re = re.compile( | |
| r"(?<![A-Za-z0-9])(" + "|".join(re.escape(k) for k in MODEL_TOKEN_SUBS) + r")(?=[-_]|$)" | |
| ) | |
| def _sub_model_tokens(s: str) -> str: | |
| return _token_re.sub(lambda m: MODEL_TOKEN_SUBS[m.group(1)], s) | |
| def _base_code(company: str) -> str: | |
| """ํ์ฌ๋ช -> ์ 2๊ธ์ ์ฝ๋ (์ฒซ ๊ธ์ ๋๋ฌธ์ + ๋์งธ ์๋ฌธ์). ์: Coupang -> Co.""" | |
| alnum = [c for c in company if c.isalnum()] | |
| if not alnum: | |
| return "Xx" | |
| if len(alnum) == 1: | |
| return alnum[0].upper() + "x" | |
| return alnum[0].upper() + alnum[1].lower() | |
| def _leading_token(col: str): | |
| """๋ฒค์น๋งํฌ ์ปฌ๋ผ์ด๋ฉด ๋งจ ์ ํ์ฌ ํ ํฐ์ ๋ฐํ, ์๋๋ฉด None. | |
| ๊ณต๋ฐฑ ํฌํจ(์: 'Model name', 'Datasets Used')ยท'_' ์์(TASK, Model)ยท | |
| AVG_* (๊ฐ์ ๋ฐ์ดํฐ์ ) ์ ์นํ ๋์์ด ์๋๋ค. | |
| """ | |
| if " " in col or "_" not in col: | |
| return None | |
| head = col.split("_", 1)[0] | |
| if head == "AVG": | |
| return None | |
| return head | |
| def _build_map(companies): | |
| """ํ์ฌ๋ช ๋ชฉ๋ก -> {ํ์ฌ๋ช (lower): ์ฝ๋}. ๋์๋ฌธ์๋ง ๋ค๋ฅธ ์ด๋ฆ์ ๊ฐ์ ํ์ฌ๋ก | |
| ๋ณด๊ณ ํ๋์ ์ฝ๋๋ก ํฉ์น๋ค. ์ฝ๋๊ฐ ๊ฒน์น๋ฉด ๋ค์ ์ซ์๋ฅผ ๋ถ์ฌ ์ ์ผ์ฑ ๋ณด์ฅ.""" | |
| m, used = {}, set() | |
| for name in sorted(set(companies), key=str.lower): | |
| key = name.lower() | |
| if key in m: | |
| continue | |
| base = _base_code(name) | |
| code, n = base, 1 | |
| while code in used: | |
| n += 1 | |
| code = f"{base}{n}" | |
| used.add(code) | |
| m[key] = code | |
| return m | |
| def alias_of(company: str) -> str: | |
| return _map.get(company.lower()) or _base_code(company) | |
| def _anon_col(col: str) -> str: | |
| """์ปฌ๋ผ๋ช ์ ๋งจ ์ ํ์ฌ ํ ํฐ๋ง ์ฝ๋๋ก ์นํ. ๋๋จธ์ง(๋ฒ์ /์นดํ ๊ณ ๋ฆฌ)๋ ์ ์ง.""" | |
| head = _leading_token(col) | |
| if head is None: | |
| return col | |
| return f"{alias_of(head)}{col[len(head):]}" | |
| def anonymize_df(df): | |
| """df ๋ฒค์น๋งํฌ ์ปฌ๋ผ์ ๋งจ ์ ํ์ฌ ํ ํฐ์ 2๊ธ์ ์ฝ๋๋ก ์นํํ๊ณ , | |
| config ์ ๋ฐ์ดํฐ์ ๋ชฉ๋ก/์จ๊น ๊ท์น๋ ๋์ผ ์ฝ๋๋ก ๊ฐฑ์ ํ๋ค (idempotent). | |
| """ | |
| global _map, _orig_default_avg, _orig_default_ds, _orig_hide_exact | |
| if _orig_default_avg is None: | |
| _orig_default_avg = list(config.DEFAULT_AVG_DATASETS) | |
| _orig_default_ds = list(config.DEFAULT_DATASETS) | |
| _orig_hide_exact = list(config.HIDE_COLUMN_EXACT) | |
| companies = [t for t in (_leading_token(c) for c in df.columns) if t] | |
| _map = _build_map(companies + list(_orig_default_avg)) | |
| df = df.rename(columns={c: _anon_col(c) for c in df.columns}) | |
| # ๋ชจ๋ธ๋ช ํ ํฐ ๊ฐ๋ช : ํ์ดํผ๋งํฌ(Model/Model name/Model link)์ ์ ๊ฐ ์ ๋ฐ์์ | |
| # PE -> CLIP ๋ฑ ์นํ. ํ์ ํ ์คํธ์ ๋งํฌ URL ์ ํจ๊ป ๋ฐ๊ฟ ๋ ธ์ถ์ ๋จ๊ธฐ์ง ์๋๋ค. | |
| for col in df.columns: | |
| if df[col].dtype == object: | |
| df[col] = df[col].map( | |
| lambda v: _sub_model_tokens(v) if isinstance(v, str) else v | |
| ) | |
| # config ๋ ๊ฐ์ ์ฝ๋ ๊ธฐ์ค์ผ๋ก ๋ง์ถฐ ๋ฆฌ๋๋ณด๋ ์ ๋ ํฐ/AVG/์จ๊น์ด ์ผ๊ด๋๊ฒ ๋์ | |
| config.DEFAULT_AVG_DATASETS = [alias_of(d) for d in _orig_default_avg] | |
| config.DEFAULT_DATASETS = [ | |
| d if d == "AVG" else alias_of(d) for d in _orig_default_ds | |
| ] | |
| config.HIDE_COLUMN_EXACT = [_anon_col(c) for c in _orig_hide_exact] | |
| return df | |