Compare commits

..

1 Commits

Author SHA1 Message Date
Mehdi104797
443c98daf3 تغییرات 2025-08-19 12:04:58 +03:30
8 changed files with 59501 additions and 23859 deletions

7
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,7 @@
{
"workbench.colorCustomizations": {
"activityBar.background": "#0E3144",
"titleBar.activeBackground": "#14445F",
"titleBar.activeForeground": "#F8FCFE"
}
}

35342
data/DATASET140402_ref_org.txt Normal file

File diff suppressed because it is too large Load Diff

152
remove_all_o_sentences.py Normal file
View File

@ -0,0 +1,152 @@
def analyze_and_filter_dataset(input_file, output_file, report_file):
with open(input_file, 'r', encoding='utf-8') as f:
lines = f.readlines()
# استخراج جملات
sentences = []
current_sentence = []
for line in lines:
stripped_line = line.strip()
if not stripped_line or stripped_line == '...':
if current_sentence:
sentences.append(current_sentence)
current_sentence = []
else:
current_sentence.append(stripped_line)
if current_sentence:
sentences.append(current_sentence)
# شمارش جملات
total_sentences = len(sentences)
filtered_sentences = []
all_o_count = 0
for sent in sentences:
tags = [token.split()[1] for token in sent if len(token.split()) >= 2]
if all(tag == 'O' for tag in tags):
all_o_count += 1
else:
filtered_sentences.append(sent)
kept_sentences = len(filtered_sentences)
# شمارش توکن‌ها
total_tokens = sum(len(sent) for sent in filtered_sentences)
# استخراج موجودیت‌ها
org_entities = []
ref_entities = []
current_org = []
current_ref = []
for sent in filtered_sentences:
for token_line in sent:
parts = token_line.strip().split()
if len(parts) < 2:
continue
token, tag = parts[0], parts[1]
# پردازش ORG
if tag == 'B-ORG':
if current_org:
org_entities.append(' '.join(current_org))
current_org = [token]
elif tag == 'I-ORG':
if current_org:
current_org.append(token)
else:
if current_org:
org_entities.append(' '.join(current_org))
current_org = []
# پردازش REF
if tag == 'B-REF':
if current_ref:
ref_entities.append(' '.join(current_ref))
current_ref = [token]
elif tag == 'I-REF':
if current_ref:
current_ref.append(token)
else:
if current_ref:
ref_entities.append(' '.join(current_ref))
current_ref = []
# بستن موجودیت‌های باز در پایان جمله
if current_org:
org_entities.append(' '.join(current_org))
current_org = []
if current_ref:
ref_entities.append(' '.join(current_ref))
current_ref = []
unique_org_entities = list(set(org_entities))
unique_ref_entities = list(set(ref_entities))
# نوشتن گزارش در فایل و چاپ آن
report = []
report.append("📊 گزارش تحلیل دیتاست NER")
report.append("=" * 60)
report.append(f"✅ تعداد کل جملات در دیتاست: {total_sentences}")
report.append(f"❌ تعداد جملات حذف‌شده (همه تگ O): {all_o_count}")
report.append(f"✅ تعداد جملات باقی‌مانده (دارای موجودیت): {kept_sentences}")
report.append(f"🔤 تعداد کل توکن‌ها در جملات باقی‌مانده: {total_tokens}")
report.append(f"🏢 تعداد موجودیت ORG (سازمان): {len(org_entities)}")
report.append(f"📜 تعداد موجودیت REF (ارجاع به قانون/ماده): {len(ref_entities)}")
report.append(f"🔍 تعداد موجودیت منحصربه‌فرد ORG: {len(unique_org_entities)}")
report.append(f"🔍 تعداد موجودیت منحصربه‌فرد REF: {len(unique_ref_entities)}")
# report.append("\n📋 نمونه‌های منحصربه‌فرد موجودیت ORG:")
# for ent in sorted(unique_org_entities)[:10]:
# report.append(f" • {ent}")
# if len(unique_org_entities) > 10:
# report.append(f" ... و {len(unique_org_entities) - 10} مورد دیگر")
# report.append("\n📋 نمونه‌های منحصربه‌فرد موجودیت REF:")
# for ent in sorted(unique_ref_entities)[:10]:
# report.append(f" • {ent}")
# if len(unique_ref_entities) > 10:
# report.append(f" ... و {len(unique_ref_entities) - 10} مورد دیگر")
report.append("\n📋 همه موجودیت‌های منحصربه‌فرد ORG:")
if unique_org_entities:
for ent in unique_org_entities:
report.append(f"{ent}")
else:
report.append(" • هیچ موجودیت ORGای یافت نشد.")
report.append("\n📋 همه موجودیت‌های منحصربه‌فرد REF:")
if unique_ref_entities:
for ent in unique_ref_entities:
report.append(f"{ent}")
else:
report.append(" • هیچ موجودیت REFای یافت نشد.")
report.append(f"\n✅ پردازش کامل شد.")
report.append(f"💾 خروجی فیلترشده در '{output_file}' ذخیره شد.")
report.append(f"📄 گزارش کامل در '{report_file}' ذخیره شد.")
# چاپ گزارش در کنسول
for line in report:
print(line)
# ذخیره گزارش در فایل
with open(report_file, 'w', encoding='utf-8') as f:
f.write('\n'.join(report))
# ذخیره دیتاست فیلترشده
with open(output_file, 'w', encoding='utf-8') as f:
for sent in filtered_sentences:
for line in sent:
f.write(line.strip() + '\n')
f.write('\n')
# اجرای تابع
analyze_and_filter_dataset(
input_file='data/DATASET140402_ref_org.txt',
output_file='DATASET140402_ref_org_filtered.txt',
report_file='گزارش_تحلیل_دیتاست.txt'
)

View File

@ -1,7 +1,10 @@
LEARNING_RATE = 0.65e-4 # 0.65e-4 - 0.4e-4
MINI_BATCH_SIZE = 8
MAX_EPOCHS = 100
learning_rate = 0.65e-4 # 0.65e-4 - 0.4e-4
mini_batch_size = 8
max_epochs = 100
from funcs import save_to_file_by_address
import json
import os
import datetime
from pathlib import Path
from flair.data import Corpus
@ -12,9 +15,23 @@ from flair.trainers import ModelTrainer
from flair.models import SequenceTagger
from flair.embeddings import TransformerDocumentEmbeddings
def save_to_file_by_address(file_address, content):
with open(file_address, 'a+', encoding='utf-8') as file:
file.write(content)
#model = os.getcwd() + "\\data\\final-model.pt"
#model = os.getcwd() + "/data/HooshvareLab--distilbert-fa-zwnj-base-ner" # مدل اولیه که تست شد و تا حدود 70 درصد در آخرین آموزش خوب جواب می داد
#model = os.getcwd() + "/data/distilbert-base-multilingual-cased-tavasi"
# model = "HooshvareLab/bert-fa-base-uncased-ner-peyma"
# model = "PooryaPiroozfar/Flair-Persian-NER" # 111111111111111
## ---------------------------------------------------------
## --- آخرین کار مورد استفاده در سامانه قانون یار از این آموزش دیده است
#model = "orgcatorg/xlm-v-base-ner" # بهترین توکنایزر فارسی ***********************
## ---------------------------------------------------------
# model = AutoModel.from_pretrained("/home/gpu/HFHOME/hub/models--orgcatorg--xlm-v-base-ner")
#model = "pourmand1376/NER_Farsi" #
#model = "HooshvareLab/bert-base-parsbert-ner-uncased" # **** خوب جواب داد
#model = "SeyedAli/Persian-Text-NER-Bert-V1" # ***** خیلی خوب جواب داد
#model = "HooshvareLab/bert-base-parsbert-peymaner-uncased" # جالب نبود!
#model = "HooshvareLab/bert-base-parsbert-armanner-uncased" # جالب نبود!
def digit_correct(input_num):
if input_num <10:
@ -30,9 +47,7 @@ def main_train(model):
"""
time = datetime.datetime.now()
# ایجاد فرمتی برای نام مدل نهایی که با کمک تاریخ روز ساخته می شود
model_title = f"{time.year}-{digit_correct(time.month)}-{digit_correct(time.day)}--{digit_correct(time.hour)}-{digit_correct(time.minute)}-{digit_correct(time.second)}--{model}".replace('/','--')
print(f'\nMODEL:: {model}\n')
# define dataset columns
@ -92,9 +107,9 @@ def main_train(model):
# begin training data
try:
result = trainer.fine_tune(f"./taggers/{model_title}",
learning_rate= LEARNING_RATE,
mini_batch_size= MINI_BATCH_SIZE,
max_epochs= MAX_EPOCHS
learning_rate= learning_rate,
mini_batch_size= mini_batch_size,
max_epochs= max_epochs
)
except Exception as e:
print(str(e.args[0]))
@ -104,12 +119,11 @@ def main_train(model):
# plot training log to evaluate process
try:
from train_log_plotter import plot_diagram
result = plot_diagram(model_title)
print(result[1])
plot_diagram(model_title)
except:
print('log diagram failed due to error!')
print('fine-tune operation finished')
operation_time = datetime.datetime.now()
@ -143,7 +157,7 @@ def main_train(model):
F1 Score: {result}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n'''
hyperparameters = f"""LEARNING_RATE: {LEARNING_RATE} - MINI_BATCH_SIZE: {MINI_BATCH_SIZE} - MAX_EPOCHS: {MAX_EPOCHS}"""
hyperparameters = f"""learning_rate: {learning_rate} - mini_batch_size: {mini_batch_size} - max_epochs: {max_epochs}"""
final_result = f"""Model Name: {model}
Fine-Tune Parameters: {hyperparameters}
@ -157,15 +171,29 @@ def main_train(model):
return True
models = ["HooshvareLab/bert-fa-base-uncased-ner-peyma"]
models = """
HooshvareLab/bert-base-parsbert-ner-uncased
HooshvareLab/bert-fa-base-uncased-ner-peyma
HooshvareLab/bert-base-parsbert-armanner-uncased
HooshvareLab/bert-fa-base-uncased-ner-arman
HooshvareLab/bert-base-parsbert-peymaner-uncased
"""
models = """
HooshvareLab/bert-fa-base-uncased-ner-peyma
"""
# HooshvareLab/distilbert-fa-zwnj-base-ner
models_with_error= """
nicolauduran45/affilgood-ner-multilingual-v2 - error
Amirmerfan/bert-base-uncased-persian-ner-50k-base - error
AliFartout/Roberta-fa-en-ner - error
"""
model = 'HooshvareLab/bert-fa-base-uncased-ner-peyma'
if __name__ == "__main__":
# model = 'HooshvareLab/bert-fa-base-uncased-ner-peyma'
# main_train(model)
# iterate models to train
for model in models:
for model in models.split('\n'):
if model == '':
continue

View File

@ -1,32 +0,0 @@
#model = os.getcwd() + "\\data\\final-model.pt"
#model = os.getcwd() + "/data/HooshvareLab--distilbert-fa-zwnj-base-ner" # مدل اولیه که تست شد و تا حدود 70 درصد در آخرین آموزش خوب جواب می داد
#model = os.getcwd() + "/data/distilbert-base-multilingual-cased-tavasi"
# model = "HooshvareLab/bert-fa-base-uncased-ner-peyma"
# model = "PooryaPiroozfar/Flair-Persian-NER" # 111111111111111
## ---------------------------------------------------------
## --- آخرین کار مورد استفاده در سامانه قانون یار از این آموزش دیده است
#model = "orgcatorg/xlm-v-base-ner" # بهترین توکنایزر فارسی ***********************
## ---------------------------------------------------------
# model = AutoModel.from_pretrained("/home/gpu/HFHOME/hub/models--orgcatorg--xlm-v-base-ner")
#model = "pourmand1376/NER_Farsi" #
#model = "HooshvareLab/bert-base-parsbert-ner-uncased" # **** خوب جواب داد
#model = "SeyedAli/Persian-Text-NER-Bert-V1" # ***** خیلی خوب جواب داد
#model = "HooshvareLab/bert-base-parsbert-peymaner-uncased" # جالب نبود!
#model = "HooshvareLab/bert-base-parsbert-armanner-uncased" # جالب نبود!
# HooshvareLab/distilbert-fa-zwnj-base-ner
models_with_error= """
nicolauduran45/affilgood-ner-multilingual-v2 - error
Amirmerfan/bert-base-uncased-persian-ner-50k-base - error
AliFartout/Roberta-fa-en-ner - error
"""
models = """
HooshvareLab/bert-base-parsbert-ner-uncased
HooshvareLab/bert-fa-base-uncased-ner-peyma
HooshvareLab/bert-base-parsbert-armanner-uncased
HooshvareLab/bert-fa-base-uncased-ner-arman
HooshvareLab/bert-base-parsbert-peymaner-uncased
"""

View File

@ -1,30 +1,20 @@
"""
این سورس جهت خواندن فایل لاگ آموزش مدل و ترسیم نمودار پیشرفت بر اساس فاکتور LOSS ایجاد شده است
"""
import matplotlib.pyplot as plt
import os
import csv
# def find_newest_file(directory):
# # دریافت لیست فایل‌ها در دایرکتوری
# files = os.listdir(directory)
# # بررسی اینکه آیا دایرکتوری خالی است یا خیر
# if not files:
# return None # اگر دایرکتوری خالی باشد، مقدار None بازگردانده می‌شود
def find_newest_file(directory):
# دریافت لیست فایل‌ها در دایرکتوری
files = os.listdir(directory)
# بررسی اینکه آیا دایرکتوری خالی است یا خیر
if not files:
return None # اگر دایرکتوری خالی باشد، مقدار None بازگردانده می‌شود
# # ایجاد مسیر کامل برای فایل‌ها و پیدا کردن فایل جدیدتر با استفاده از max
# full_paths = [os.path.join(directory, file) for file in files]
# newest_file = max(full_paths, key=os.path.getctime) # بر اساس زمان ایجاد (creation time)
# return newest_file
# ایجاد مسیر کامل برای فایل‌ها و پیدا کردن فایل جدیدتر با استفاده از max
full_paths = [os.path.join(directory, file) for file in files]
newest_file = max(full_paths, key=os.path.getctime) # بر اساس زمان ایجاد (creation time)
return newest_file
def generate_diagram(progress_data:list, model_title:str):
"""
ایجاد و ذخیره دیاگرام بر اساس داده های مربوط به آموزش مدل
Args:
progress_data(list): لیست فاکتور loss در ایپاک های آموزش مدل
model_title(str): نام مدل آموزش دیده
"""
def save_diagram(progress_data, model_title):
# آرایه داده‌هایی که قرار است در دیاگرام ترسیم شود
data = progress_data
@ -53,14 +43,7 @@ def generate_diagram(progress_data:list, model_title:str):
def read_log(file_path:str):
"""
خواندن محتوای فایل loss
Args:
file_path(str): آدرس فایل loss
progress(list[tuple]): لیستی شامل شماره ایپاک و loss متناظر با آن
"""
def read_log(file_path):
# read loss file
with open(file_path, mode="r") as file:
tsv_reader = csv.reader(file, delimiter="\t")
@ -78,41 +61,12 @@ def read_log(file_path:str):
return progress
def plot_diagram(model_title:str):
"""
ترسیم نمودار بر اساس لاگ فاکتور LOSS
Args:
model_title(str): نام مدلی که آموزش داده شده است
Returns:
tuple: شامل یک کلید بولین که وضعیت موفقیت عملیات را نشان می دهد و نیز توضیحاتی در مورد نتیجه عملیات
"""
result = True, ''
# تنظیم آدرس فایل loss مربوط به این مدل
def plot_diagram(model_title):
loss_log = f'./taggers/{model_title}/loss.tsv'
# خواندن فایل loss مربوط به مدل
try:
progress = read_log(loss_log)
except:
result = False, "Error: please check model's path!"
return result
# ایجاد و ذخیره دیاگرام در پوشه مربوط به مدل
generate_diagram(progress, model_title)
progress = read_log(loss_log)
save_diagram(progress, model_title)
print('loss diagram saved!')
result = True, 'loss diagram generated and saved!'
return result
if __name__ == "__main__":
# تست سورس بر اساس نام مدل
# چنین مدلی باید در پوشه taggers وجود داشته باشد
model_title = '2025-07-21--17-51-49--HooshvareLab--bert-fa-base-uncased-ner-peyma'
result = plot_diagram(model_title)
print(result[1])
model_title = 'HooshvareLab--distilbert-fa-zwnj-base-ner--2025-7-20--3-41-58'
plot_diagram(model_title)

View File

@ -0,0 +1,191 @@
📊 گزارش تحلیل دیتاست NER
============================================================
✅ تعداد کل جملات در دیتاست: 863
❌ تعداد جملات حذف‌شده (همه تگ O): 398
✅ تعداد جملات باقی‌مانده (دارای موجودیت): 465
🔤 تعداد کل توکن‌ها در جملات باقی‌مانده: 23280
🏢 تعداد موجودیت ORG (سازمان): 830
📜 تعداد موجودیت REF (ارجاع به قانون/ماده): 92
🔍 تعداد موجودیت منحصربه‌فرد ORG: 117
🔍 تعداد موجودیت منحصربه‌فرد REF: 56
📋 همه موجودیت‌های منحصربه‌فرد ORG:
• مجلس شورای اسلامی
• وزارت امور اقتصادی و دارایی
• شرکت ملی گاز
• دولت
• اشخاص حقیقی و حقوقی
• نیروی مقاومت بسیج
• وزیر امور اقتصادی و دارایی
• وزارت آموزش و پرورش
• همه پرسی
• تمام دستگاههای اجرایی
• شورای اقتصاد
• سازمان بهزیستی
• شورای عالی انقلاب فرهنگی
• دولت.
• مجلس
• وزارت فرهنگ و آموزش عالی
• جهاد سازندگی
• کلیه سازمانها
• سپاه پاسداران انقلاب اسلامی
• هیات وزیران.
• شورای عالی امنیت ملی
• سازمان برنامه و بودجه
• رییس
• سازمان برنامه
• شورای عالی اشتغال
• سازمان حسابرسی
• جمعیت هلال احمر
• وزارت کشاورزی
• وزارت صنایع و معادن
• شورای عالی شهرسازی و معماری
• سازمان آموزش فنی و حرفه ای
• وزارت نفت
• دستگاههای اجرایی کشور
• وزیر دادگستری
• نیروی انتظامی
• استاندار
• هیات وزیران
• شوراهای اسلامی شهر و روستا
• وزارتخانه ها
• گمرک
• بانک صنعت و معدن
• سازمان تامین اجتماعی
• رییس جمهور
• وزارت صنایع
• شوراهای اسلامی
• سازمان بنادر و کشتیرانی
• وزیر نیرو
• شورای نگهبان
• بانکها
• دیوان محاسبات
• اتاق بازرگانی
• استانداران
• استانداری
• خزانه داری
• مقام معظم رهبری
• دستگاههای اجرایی.
• دادستان کل کشور
• مجلس سنا
• قوه قضاییه
• نیروهای مسلح
• وزارت راه و شهرسازی
• دستگاههای اجرایی
• سازمان حفاظت محیط زیست
• نمایندگان مجلس شورای اسلامی
• وزیر دفاع
• سازمان امور اداری و استخدامی
• شورای عالی اداری
• دانشگاه آزاد اسلامی
• ارتش
• کلیه
• وزارت نیرو
• شرکت سهامی بیمه
• اتاق بازرگانی و صنایع و معادن
• شرکت ملی صنایع پتروشیمی
• وزارت تعاون
• مجمع تشخیص مصلحت نظام
• وزارت بهداشت
• کمیته امداد امام خمینی (ره)
• سازمان میراث فرهنگی و گردشگری
• بانک کشاورزی
• مجلس شورای ملی
• صدا و سیمای
• ستاد کل
• کلیه دستگاههای اجرایی
• وزارت کشور
• وزارت جهاد کشاورزی
• شورای پول و اعتبار
• شورای اسلامی شهر
• شورای عالی حفاظت محیط زیست
• وزارت دادگستری
• شهرداری تهران
• مرکز آمار
• سازمان خصوصی سازی
• وزارت پست و تلگراف و تلفن
• وزارت ارتباطات و فناوری اطلاعات
• بیمه مرکزی
• وزارت جهاد سازندگی
• سازمان مدیریت و برنامه ریزی
• شرکت توانیر
• وزارت کار و امور اجتماعی
• نمایندگان مجلس
• سازمان ملی زمین و مسکن
• وزارت دفاع و پشتیبانی نیروهای مسلح
• سازمان گسترش و نوسازی صنایع
• ریاست جمهوری
• شهرداریها
• بانک مرکزی
• سازمان امور مالیاتی
• کمیته امداد امام خمینی
• مجمع عمومی
• سازمان
• وزارت امور خارجه
• نهادهای انقلاب اسلامی
• سازمان توسعه و نوسازی معادن و صنایع معدنی
• شرکت ملی نفت
• جهاد دانشگاهی
• اتاق تعاون
📋 همه موجودیت‌های منحصربه‌فرد REF:
• قانون مالیاتهای مستقیم مصوب 27/ 11/ 1380
• قانون اساسی
• قانون توزیع عادلانه آب مصوب 18 /7 /1363
• قانون الحاق یک تبصره به ماده 96 قانون محاسبات عمومی
• قانون اساسی مصوب 7 جمادی الاولی مطابق 16 ثور 1329 قمری
• قانون برنامه پنجساله دوم توسعه اقتصادی اجتماعی و فرهنگی جمهوری اسلامی ایران مصوب 20 /9 /1373
• قانون نحوه انجام امور مالی و معاملاتی دانشگاهها و موسسات آموزش عالی و تحقیقاتی مصوب 18 /10 /1369
• قانون تنظیم بخشی از مقررات مالی دولت مصوب 27 /11 /1380
• قانون عملیات بانکی بدون ربا
• قانون انتشار اوراق مشارکت مصوب 3 /6 /1376)
• قانون بودجه سال 1385 کل کشور مصوب 12 /7 /1385
• قانون برنامه سوم توسعه اقتصادی اجتماعی و فرهنگی جمهوری اسلامی ایران
• قانون نظام هماهنگ پرداخت کارکنان
• قانون استفساریه تبصره ذیل ماده -1082 قانون مدنی مصوب 1376
• قانون اصلاح بندهای (الف) (ب) و (ج) ماده -80 و ماده -86 قانون محاسبات عمومی کشور مصوب 1 /6 /1366
• قانون بیمه مرکزی ایران و بیمه گری مصوب 1350
• قانون معافیت کلیه دانشجویان بورسیه و اعضای هیات علمی
• قانون اصلاح تبصره 2 ماده 73 قانون محاسبات عمومی مصوب 1349
• قانون تجارت
• قانون برنامه و بودجه مصوب 1351
• قانون اصلاح بندهای (ز) و (ح) ماده 84 و بند (ج) ماده 86 قانون محاسبات عمومی
• قانون بودجه سال 1386
• قانون مدنی مصوب 1307
• قانون محاسبات عمومی
• قانون پولی و بانکی کشور مصوب سال 1351
• قانون تابعیت
• قانون تغییر نصاب معاملات موضوع ماده -87 قانون محاسبات عمومی کشور
• قانون محاسبات عمومی کشور مصوب 1366
• قانون تامین اجتماعی مصوب 1354
• قانون تشکیل هیات امنائ دانشگاهها و موسسات آموزش عالی و پژوهشی مصوب 23 /12 /1367
• قانون عملیات بانکی بدون ربا مصوب 8 /6 /1362
• قانون مدنی
• قانون محاسبات عمومی کشور مصوب 1 /6 /1366
• قانون نحوه وصول برخی از درآمدهای دولت و مصرف آن در موارد معین مصوب 1373
• قانون برنامه چهارم توسعه اقتصادی اجتماعی و
• قانون الحاق موادی به قانون تنظیم بخشی از مقررات مالی دولت -1 - مصوب 27 /11 /1380
• قانون برنامه چهارم توسعه اقتصادی اجتماعی و فرهنگی
• قانون اساسی مصوب 1358
• قانون نحوه توزیع قند و شکر تولیدی کارخانه های کشور مصوب 1353
• قانون تشکیل شوراهای آموزش و پرورش مصوب 26 /10 /1372
• قانون مدنی مصوب 1314.1.20
• قانون بیمه
• قانون تشویق و حمایت سرمایه گذاری خارجی مصوب 19 /12 /1380
• قانون تشویق و حمایت سرمایه گذاری خارجی مصوب 19 /12 /1380:
• قانون تاسیس بورس اوراق بهادار مصوب 27 /2 /1345
• قانون بیمه همگانی خدمات درمانی کشور مصوب 1373
• قانون مدنی مصوب 29 /4 /1376
• قانون حداکثر استفاده از توان فنی مهندسی تولیدی و صنعتی و اجرایی کشور مصوب 12 /12 /1375
• قانون تنظیم بخشی از مقررات مالی دولت مصوب 15 /8 /1384
• قانون بودجه سال 1385
• قانون مدنی مصوب 1314.1.17
• قانون تنظیم بخشی از مقررات مالی دولت مصوب 1380
• قانون حداکثر استفاده از توان فنی و مهندسی تولیدی و صنعتی و اجرایی کشور در اجرای پروژه ها و ایجاد تسهیلات به منظور صدور خدمات مصوب 12 /12 /1375
• قانون برگزاری مناقصات
• قانون برنامه پنج ساله دوم توسعه اقتصادی اجتماعی و فرهنگی جمهوری اسلامی ایران مصوب 20 /9 /1373
• لایحه قانونی الحاقی به ماده 37 قانون محاسبات عمومی
✅ پردازش کامل شد.
💾 خروجی فیلترشده در 'DATASET140402_ref_org_filtered.txt' ذخیره شد.
📄 گزارش کامل در 'گزارش_تحلیل_دیتاست.txt' ذخیره شد.