amirhofo's picture
Upload files
6534adc verified
from packages import *
def download_blog_dataset():
url= "https://huggingface.co/datasets/RohanAiLab/persian_blog/resolve/main/blogs.zip"
output_path= "blogs.zip"
extract_folder= "blogs"
if not os.path.exists(output_path):
print("Downloading blogs.zip...")
r= requests.get(url, stream= True)
with open(output_path, "wb") as f:
for chunk in r.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
print("Download completed.")
if not os.path.exists(extract_folder):
print("Extracting blogs.zip...")
with ZipFile(output_path, 'r') as zip_ref:
zip_ref.extractall(extract_folder)
print("Extraction completed.")
def eda_dataset(df, name):
text_column= "text"
print(f"--- EDA for {name} ---")
print(f"تعداد نمونه‌ها: {len(df)}")
print(f"تعداد نمونه‌های خالی: {df[text_column].isna().sum() + (df[text_column].str.strip() == '').sum()}")
print(f"میانگین طول متن: {df[text_column].str.len().mean():.2f}")
print(f"حداکثر طول متن: {df[text_column].str.len().max()}")
print(f"حداقل طول متن: {df[text_column].str.len().min()}")
# print(f"تعداد کلمات منحصربه‌فرد: {len(set(' '.join(df[text_column].dropna().astype(str)).split()))}")
# print(f"نمونه متن: {df[text_column].iloc[0][:100] if isinstance(df[text_column].iloc[0], str) else 'غیرمعتبر'}")
print("\n")
def show_short_samples(df, dataset_name, max_length= 1000, num_samples= 5):
print(f"--- نمونه‌های با طول کمتر از {max_length} کاراکتر برای {dataset_name} ---")
short_samples = df[df['text'].str.len() < max_length]
print(f"تعداد نمونه‌های با طول کمتر از {max_length} کاراکتر: {len(short_samples)}")
if len(short_samples) > 0:
for i, text in enumerate(short_samples['text'].head(num_samples)):
print(f"نمونه {i+1}: {text[:100]} (طول: {len(text)} کاراکتر)")
else:
print("هیچ نمونه‌ای با طول کمتر از {max_length} کاراکتر یافت نشد.")
print("\n")
def evaluation_fn(tokenizer: Tokenizer, dataset:pd.DataFrame, samples_number= 10000):
dataset= dataset['text'].sample(n= samples_number).to_list()
unk_count= sum(text.count("[UNK]") for text in [tokenizer.encode(t).tokens for t in dataset])
total_tokens= sum(len(tokenizer.encode(t).tokens) for t in dataset)
unk_rate= (unk_count / total_tokens) * 100
char_counts= [len(t) for t in dataset]
token_counts= [len(tokenizer.encode(t).tokens) for t in dataset]
compression_ratio= sum(char_counts) / sum(token_counts)
return unk_rate, compression_ratio