Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
4cf1d4d776 |
173
hugingFace_persianModelList.py
Normal file
173
hugingFace_persianModelList.py
Normal file
|
@ -0,0 +1,173 @@
|
|||
from huggingface_hub import HfApi
|
||||
import json
|
||||
import datetime
|
||||
|
||||
|
||||
|
||||
# تعریف تسکهای رایج NLP
|
||||
nlp_task_list = [
|
||||
"text-classification",
|
||||
"token-classification",
|
||||
"question-answering",
|
||||
"summarization",
|
||||
"translation",
|
||||
"text-generation",
|
||||
"fill-mask",
|
||||
"zero-shot-classification",
|
||||
"feature-extraction",
|
||||
"sentence-similarity",
|
||||
"text2text-generation",
|
||||
"conversational"
|
||||
]
|
||||
|
||||
def persian_model_finder(nlp_tasks,json_file_name):
|
||||
|
||||
api = HfApi()
|
||||
all_persian_nlp_models_data = []
|
||||
seen_model_ids = set() # برای جلوگیری از اضافه شدن مدلهای تکراری
|
||||
|
||||
print("در حال جستجو و استخراج اطلاعات مدلهای NLP فارسی...")
|
||||
|
||||
# فیلتر کردن و پیمایش روی مدلها
|
||||
# برای هر تسک NLP، مدلهای فارسی را جستجو میکنیم.
|
||||
# محدودیت 500 مدل برای هر تسک در نظر گرفته شده است تا از دانلود بیش از حد جلوگیری شود.
|
||||
# اگر میخواهید همه مدلها را استخراج کنید، ممکن است نیاز به پیجینیشن (pagination) باشد.
|
||||
for task in nlp_tasks:
|
||||
print(f" جستجو برای تسک: {task} (زبان: فارسی)...")
|
||||
try:
|
||||
models_for_task = api.list_models(
|
||||
language="fa",
|
||||
task=task,
|
||||
sort="downloads",
|
||||
direction=-1, # نزولی (از بیشترین دانلود به کمترین)
|
||||
limit=None # میتوانید این عدد را تغییر دهید
|
||||
)
|
||||
|
||||
for model_info in models_for_task:
|
||||
if model_info.id not in seen_model_ids:
|
||||
try : # اگر از کارت مدل توانست اطلاعات بیشتری به دست بیاورد :
|
||||
model_ = api.model_info(model_info.id) # به دست آوردن شناسه مدل
|
||||
card_data_dict = model_.card_data.to_dict() # از روی کارت مدل که شامل اطلاعات مدل میباشد یک دیکشنری میسازیم
|
||||
model_data = {
|
||||
"model_id": model_info.id,
|
||||
"url": f"https://huggingface.co/{model_info.id}",
|
||||
"downloads": model_info.downloads,
|
||||
"private": model_info.private,
|
||||
"author": model_info.author,
|
||||
"tags": model_info.tags, # شامل زبانها، تسکها، لایبرریها و...
|
||||
"tag_dataset":"-",
|
||||
"tag_base_model":"-",
|
||||
"tag_license":"-",
|
||||
"tag_region":"-",
|
||||
"pipeline_tag": model_info.pipeline_tag, # تسک اصلی مدل که توسط هاب تعیین شده
|
||||
"Likes":model_info.likes,
|
||||
# چهار مورد پایینی از روی دیکشنری کارت مدل خوانده میشود
|
||||
"languages":card_data_dict.get('language', 'N/A'), # زبان هایی که پشتیبانی میشود
|
||||
"library":card_data_dict.get('library', 'N/A'), # کتابخانه های مورد استفاده
|
||||
"datasets":card_data_dict.get('datasets', 'N/A'), # دیتابیس های مورد استفاده
|
||||
"license":card_data_dict.get('license', 'N/A'),
|
||||
"just_persian" : False
|
||||
|
||||
}
|
||||
|
||||
if model_data["library"] == 'N/A': # در بعضی موارد کتابخانه به این نام ('library_name') در دیکشنری کارت مدل ذخیره شده
|
||||
model_data["library"] = card_data_dict.get('library_name', 'N/A')
|
||||
# شرط پایینی ، مواردی که فقط مختص زبان فارسی هستند را در دیکشنری مشخص میکند
|
||||
if len(model_data["languages"]) == 2 and "multilingual" in model_data["languages"] or\
|
||||
len(model_data["languages"]) == 2 and "persian" in model_data["languages"] or\
|
||||
len(model_data["languages"]) == 2 and "farsi" in model_data["languages"] or\
|
||||
len(model_data["languages"]) == 2 and "fas" in model_data["languages"] or\
|
||||
len(model_data["languages"]) == 2 and model_data["languages"]=="fa" or\
|
||||
model_data["languages"] == "persian" or\
|
||||
model_data["languages"] == "farsi" or\
|
||||
model_data["languages"] == "fas" or\
|
||||
model_data["languages"] == "pes" or\
|
||||
len(model_data["languages"]) == 1 :
|
||||
model_data["just_persian"] = True
|
||||
|
||||
for value in model_data["tags"]:
|
||||
|
||||
if "dataset:" in value :
|
||||
if type(model_data["tag_dataset"]) == type(""):
|
||||
model_data["tag_dataset"] = list(model_data["tag_dataset"])
|
||||
model_data["tag_dataset"].pop(0)
|
||||
model_data["tag_dataset"].append(f"{str(value).replace("dataset:","")}")
|
||||
|
||||
if "base_model:" in value :
|
||||
if type(model_data["tag_base_model"]) == type(""):
|
||||
model_data["tag_base_model"] = list(model_data["tag_base_model"])
|
||||
model_data["tag_base_model"].pop(0)
|
||||
model_data["tag_base_model"].append(f"{str(value).replace("base_model:","")}")
|
||||
|
||||
if "region:" in value :
|
||||
model_data["tag_region"]=f"{str(value).replace("region:","")}"
|
||||
|
||||
if "license:" in value :
|
||||
model_data["tag_license"]=f"{str(value).replace("license:","")}"
|
||||
|
||||
|
||||
all_persian_nlp_models_data.append(model_data)
|
||||
seen_model_ids.add(model_info.id)
|
||||
|
||||
except : # اگر استفاده از کارت مدل با مشکل مواجه شد :
|
||||
model_data = {
|
||||
"model_id": model_info.id,
|
||||
"url": f"https://huggingface.co/{model_info.id}",
|
||||
"downloads": model_info.downloads,
|
||||
"private": model_info.private,
|
||||
"author": model_info.author,
|
||||
"tags": model_info.tags, # شامل زبانها، تسکها، لایبرریها و...
|
||||
"pipeline_tag": model_info.pipeline_tag, # تسک اصلی مدل که توسط هاب تعیین شده
|
||||
"Likes":model_info.likes,
|
||||
"library":model_info.library_name,
|
||||
# افزودن لایسنس اگر موجود باشد
|
||||
"license": model_info.card_data.license if model_info.card_data and model_info.card_data.license else "N/A"
|
||||
}
|
||||
|
||||
for value in model_data["tags"]:
|
||||
|
||||
if "dataset:" in value :
|
||||
if type(model_data["tag_dataset"]) == type(""):
|
||||
model_data["tag_dataset"] = list(model_data["tag_dataset"])
|
||||
model_data["tag_dataset"].pop(0)
|
||||
model_data["tag_dataset"].append(f"{str(value).replace("dataset:","")}")
|
||||
|
||||
if "base_model:" in value :
|
||||
if type(model_data["tag_base_model"]) == type(""):
|
||||
model_data["tag_base_model"] = list(model_data["tag_base_model"])
|
||||
model_data["tag_base_model"].pop(0)
|
||||
model_data["tag_base_model"].append(f"{str(value).replace("base_model:","")}")
|
||||
|
||||
if "region:" in value :
|
||||
model_data["tag_region"]=f"{str(value).replace("region:","")}"
|
||||
|
||||
if "license:" in value :
|
||||
model_data["tag_license"]=f"{str(value).replace("license:","")}"
|
||||
|
||||
all_persian_nlp_models_data.append(model_data)
|
||||
seen_model_ids.add(model_info.id)
|
||||
|
||||
print(f" تعداد مدلهای یافت شده برای تسک '{task}': {len(models_for_task)}")
|
||||
|
||||
except Exception as e:
|
||||
print(f" خطا در جستجو برای تسک {task}: {e}")
|
||||
|
||||
# مرتبسازی نهایی مدلها بر اساس تعداد دانلود (کل لیست)
|
||||
# این مرحله اطمینان میدهد که حتی اگر مدلها از تسکهای مختلف جمعآوری شده باشند،
|
||||
# در نهایت بر اساس دانلود مرتب شده باشند.
|
||||
all_persian_nlp_models_data_sorted = sorted(all_persian_nlp_models_data, key=lambda x: x['downloads'], reverse=True)
|
||||
|
||||
print(f"\nتعداد کل مدلهای NLP فارسی منحصربهفرد یافت شده: {len(all_persian_nlp_models_data_sorted)}")
|
||||
|
||||
# ذخیره اطلاعات در یک فایل JSON
|
||||
output_json_file = f"{json_file_name}"
|
||||
with open(output_json_file, "w", encoding="utf-8") as f:
|
||||
json.dump(all_persian_nlp_models_data_sorted, f, ensure_ascii=False, indent=4)
|
||||
|
||||
print(f"اطلاعات {len(all_persian_nlp_models_data_sorted)} مدل در فایل '{output_json_file}' ذخیره شد.")
|
||||
|
||||
|
||||
|
||||
persian_model_finder(nlp_task_list,"persian_nlp_models_info.json")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user