import sys
import os

# اضافه کردن مسیر روت پروژه برای دسترسی به ماژول‌ها
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from modules.segmenter import TextSegmenterGapCosine

def test_segmentation():
    # ۱. راه‌اندازی سگمنتر
    print("شروع تست سگمنتر...")
    segmenter = TextSegmenterGapCosine()

    # ۲. متن تستی شامل چند موضوع مختلف
    sample_text = """"ظهور داده‌ها و رشد قدرت محاسباتی، به همراه روش‌های یادگیری نوین، منجر به دستاوردهای قابل توجهی در بسیاری از حوزه‌های علمی شده است. در چند سال اخیر، یادگیری ماشینی و هوش مصنوعی یک موج جدید از توجهات را به خود جلب کرده‌اند که علت اصلی آن، حجم عظیم و روزافزون داده و قدرت محاسباتی، و همچنین کشف الگوریتم‌های یادگیری بهبود یافته، می¬باشد[1]. با این حال، ایده‌ی یادگیری یک رایانه از مجموعه¬ای از مفاهیم انتزاعی و تبدیل داده¬ها به اطلاعات و استفاده از آنها برای پیش بینی، جدید نیست و حداقل از دهه ۱۹۵۰ زمانی که اولین شبکه‌های عصبی توسعه یافتند، وجود داشته است [2]. همان¬گونه که ذکر شد، حجم زیاد داده¬ها ما را به دوران جدیدی از رشد نمایی در حجم و پیچیدگی داده‌ها وارد کرده است؛ اینترنت، تلفن‌های همراه، کامپیوترها و تجهیزات ضبط باعث ظهور معدن¬های بزرگ داده‌ شده و انسان را به یک تغییر شیب در فرآیند تحقیقات سوق می¬دهد [3]. دانش مدفون در این معدن داده نیازمند فناوری‌های کاوش داده است تا الگوهای جالب، معنی‌دار و قوی را کشف کند. این روش جایگزین تحقیقات نسبت به رویکرد سنتی، اثرات چشمگیری بر همه حوزه‌های تحقیقات داشته است. کاوش داده در واقع فناوری جدید ارائه می‌دهد تا به ما در آشکار کردن الگوهای پنهان کمک کند، که قابلیت کمک به نوآوری و توسعه نظریات جدید را دارد و اثرات انقلابی بر توسعه نظریه در بسیاری از رشته‌ها را ارتقا می‌دهد [4]. 
	طبقه بندی یکی از تکنیک های کاوش داده است. در این روش تمام داده¬ها بر اساس برچسب¬های از قبل تعریف شده طبقه بندی می¬شوند. الگوریتم های طبقه بندی به شکل وسیعی در دامنه های مختلف استفاده می¬شوند، از آن جمله برخی از کاربردهایی آنها عبارت اند از پیشگویی ورشکستگی [5]، پیشگویی سرطان [6]، تشخیص چهره [7]، تشخیص کلاه برداری [8]و پیشگویی خرابی نرم افزار [9]. جهت کارایی و عملکرد بهتر در راستای کاربردهایی مذکور بعلاوه¬ی کاربردهای زیادی دیگر، الگوریتم¬هایی طبقه بندی نیاز به مجموعه داده¬های کوچک¬تر و خالص¬تر دارند که با استفاده از روش¬هایی کاهش نمونه روی مجموعه داده¬های اصلی بدست می¬آیند.
"""

    # ۳. استخراج جملات
    sentences = segmenter.extract_sentences(sample_text)
    print(f"\nتعداد کل جملات استخراج شده: {len(sentences)}")
    for idx, s in enumerate(sentences):
        print(f"جمله {idx + 1}: {s}")

    # ۴. اجرای فرآیند سگمنت‌بندی (یک مرحله)
    print("\nدر حال محاسبه سگمنت‌ها...")
    segments = segmenter.segment_items(sentences)

    # ۵. نمایش خروجی
    print("\n--- نتیجه سگمنت‌بندی ---")
    for i, seg in enumerate(segments):
        print(f"\nسگمنت {i + 1} (شامل {len(seg)} جمله):")
        for sentence in seg:
            print(f" - {sentence}")

if __name__ == "__main__":
    test_segmentation()
