roshan-research / hazm

Persian NLP Toolkit
https://www.roshan-ai.ir/hazm/
MIT License
1.19k stars 180 forks source link

تبدیل کاراکتر فاصله بین کلمات `منسوخ` و `شده` به نیم فاصله #318

Closed dehghani-mehdi closed 4 months ago

dehghani-mehdi commented 7 months ago

دلیل این تبدیل چی هست؟ به نظر اشتباه هست این تبدیل.

با چند کلمه دیگه به جای کلمه منسوخ تست کردم، این تبدیل انجام نشد. کلمه منسوخ نکته خاصی داره؟

sir-kokabi commented 6 months ago

منظورتون نرمالایزر هضم هست؟ لطفاً کدی که تست کردید رو قرار بدید.

dehghani-mehdi commented 6 months ago

در صفحه دموی آنلاین هضم قابل تست است، مثلا متن این متن منسوخ شده است. به این متن منسوخ‌شده است. تبدیل می شود، اما متن این متن هضم شده است. بدون تغییر می ماند.

sir-kokabi commented 6 months ago

نرمالایزر هضم برای اصلاح برخی از اشکالات مثل سرهم‌نویسی یا جدانویسی کلمات وابسته به لیست کلمات هست. در نمونه‌ای که مثال زدید، «منسوخ‌شده» در لیست کلمات وجود داشته و به همین خاطر شکل صحیحِ آن برگردانده شده ولی «هضم‌شده» چون در لیست کلمات وجود نداشته به همان صورتی که بوده برگشت داده شده.

dehghani-mehdi commented 6 months ago

منظور شما این هست که ایرادی وجود ندارد و از نظر نوشتاری هم نوع صحیح وجود "نیم فاصله" به جای "فاصله" بین کلمات "منسوخ" و "شده" هست؟ اگر این طور هست، در صورت امکان 2 سوال زیر رو پاسخ بدید:

  1. منبعی هست که امکان قرار دادن لینک آن باشد که سخن بالا رو تایید کنه؟
  2. راه حلی وجود داره که بشه این رفتار "هضم" رو کنترل کرد؟
sir-kokabi commented 6 months ago

سوال شما این بود که چرا نرمالایزر هضم، کلمهٔ «منسوخ‌شده» رو سرهم و «هضم شده» رو جدا از هم برمی‌گردونه. پاسخ این بود که چون صورت نوشتاری این کلمات، به همین شکل در لیستِ کلماتِ هضم ثبت شده است. من راستش نباید به درستی یا نادرستی این شکل نوشتاری اشاره می‌کردم؛ چون اولاً سوال این نبود، دوماً این یک کتابخانهٔ پردازش زبان هست که مثل بسیاری از کتاخانه‌های دیگه مبتنی بر لیست کلمات و یک‌سری الگوریتم‌های ماشینی، کار می‌کنه و این یعنی ممکنه برخی از عملکردهاش در برخی از شرایط درست نباشه؛ چون به هر حال الگوریتم‌ها اگر از ۱۰۰ مورد ۹۹ مورد رو درست کنن احتمالش هست که یک مورد رو خراب کنن. لیست کلمات به صورت دستی/ماشینی تهیه می‌شه و ممکنه اشکالاتی در اون وجود داشته باشه یا کامل نباشه. سوماً بحث دربارهٔ درستی یا نادرستی شکل نوشتاری کلمات، یک بحث زبان‌شناسانه است و به دلیل دومی که عرض کردم نباید خروجی کتابخانه‌های پردازش زبان طبیعی رو ملاک محکمی بر صحت‌وسقم نوشتار صحیح و خصوصاً شکلِ نوشتارِ صحیح‌تر یک کلمه قرار داد.

جدایی از این بحث،

فرهنگستان، یک فرهنگ املایی خط فارسی منتشر کرده که شکل نوشتاری سرهم یا جدای بسیاری از کلماتِ بحث‌برانگیز رو آورده و مابقی رو گفته سرهم و جداش جفتش درسته و این رو یک امر سلیقه‌ای دونسته؛ بنابراین کلمات «منسوخ شده» و «هضم شده» چون در این فرهنگ وجود نداره شکل نوشتاری سرهم و جداشون، هر دو صحیحه. تا جایی که اطلاع دارم کتابخانهٔ هضم، بر اساس این فرهنگ، نرمالایزر نمی‌کنه که فکر می‌کنم بهتره این اتفاق بیفته. مثلاً در این مورد چون «منسوخ شده» صحیح هست بهتر می‌بود که تغییری داده نمی‌شد. این مورد رو باید بیشتر با آقای @nournia صحبت کنم.

image

برای غیرفعال کردن این عملکرد در نرمالایزر هضم، می‌تونید پارامتر correct_spacing رو False کنید. البته این کار باعث می‌شه بعضی از عملکردهای دیگه مثل اصلاح فاصله‌گذاری پیشوند و پسوندها و اصلاح فواصل در نشانه‌های سجاوندی هم از کار بیفته. شاید حتی بهتر باشه یک پارامتر جدا برای این کار در نظر گرفته بشه. ممنون که بحثش رو باز کردید. این بحث‌ها به بهبود کتابخانهٔ هضم کمک می‌کنه.

from hazm import Normalizer
print(Normalizer(correct_spacing=False).normalize("این قانون منسوخ شده است"))
dehghani-mehdi commented 6 months ago

ممنونم بابت توضیحات کاملی که ارائه کردید.

البته فکر میکنم منظور از جدانویسی و مرکب نویسی در متنی که هایلایت کردید انتخاب بین فاصله و نیم فاصله نیست و در خصوص چسباندن یا جدا نویسی دو کلمه این بحث مطرح شده (مثل میگویم و می گویم)، البته به شخصه دانشی در خصوص زبان شناسی ندارم و ممکنه اشتباه باشه این گفته من.

در خصوص مثال موضوع این صفحه، "منسوخ شده" رو صحیح تر می دونم، حداقل عمومی تر، (البته ممکنه شخص دیگری ورژن دیگر رو درست بدونه که نمی تونم اظهار نظر کنم که کدوم یک درست هست)، لذا به نظر من حداقل کاری که میشه انجام داد این هست که تنظیمی 3 حالته به ابزار هضم اضافه بشه که این گونه موارد رو

  1. بدون تغییر رها کنه
  2. همه رو به حالت فاصله دربیاره
  3. همه رو به حالت نیم فاصه دربیاره

در خصوص تنظیم correct_spacing هم همانطور که خودتون اشاره کردید راه کار مناسبی برای حل این موضوع نیست.

sir-kokabi commented 6 months ago

نه فقط محدود به پیوسته‌نویسی یا جدانویسی نیست. مواردی که باید با نیم‌فاصله یا فاصله از هم جدا بشه رو هم شامل می‌شه. image

ممنون از پیشنهادتون. حالا این موارد رو باید بیشتر بررسی کنیم.

mohsenoon commented 6 months ago

در ادامه «جدای از این بحث»: برداشت من از متون ویرایش‌شده این بوده که عبارت‌هایی مثل «منسوخ شده» و «هضم شده»، اگر به صورت صفت به کار روند یک کلمه محسوب شده و باید با نیم‌فاصله نوشته شوند ولی در حالت فعل بهتر است جدانویسی را ملاک قرار دهیم. معیار دیگری هم که برخی از ویرایشگرها رعایت می‌کنند این است که عبارت‌هایی مانند «منسوخ‌شده outdated» و «هضم‌شده digested» که معادل انگلیسی آنها یک کلمه است را همواره با نیم‌فاصله می‌نویسند.

dehghani-mehdi commented 4 months ago

ممنون بابت بسته شدن بدون توضیح و عدم احترام به زمان های صرف شده دیگران، البته از یک محصول ایرانی (که البته به نظر فقط یک لایه روی کد نوشته شده دیگران هست)، بیش از این هم نمیشه توقع داشت.