پیشپردازش
نرمالساز (Normalizer)
کلاس داخلی Normalizer یک خط لولهٔ آماده و کاربردی برای نرمالسازی متن فارسی است. این کلاس رایجترین و خطاپذیرترین مراحل نرمالسازی را در یک مؤلفه ترکیب میکند و بیشتر سناریوهای واقعی مانند متن وب، شبکههای اجتماعی، خروجی OCR و نوشتار نیمهرسمی/محاورهای را پوشش میدهد.
مهمتر از همه، قواعد نرمالسازی در Shekar مطابق دستورالعملهای رسمی فرهنگستان زبان و ادب فارسی پیادهسازی شده است؛ بنابراین خروجی، علاوه بر مناسببودن برای پایپلاینهای NLP، از نظر زبانی نیز درست و قابل انتشار است.
from shekar import Normalizer
normalizer = Normalizer()
text = "«فارسی شِکَر است» نام داستان ڪوتاه طنز آمێزی از محمد علی جمالــــــــزاده ی گرامی می باشد که در سال 1921 منتشر شده است و آغاز ڱر تحول بزرگی در ادَبێات معاصر ایران بۃ شمار میرود."
print(normalizer(text))
# نرمالسازی نویسههای گفتاری و روزمره
text = normalizer("می دونی که نمیخاستم ناراحتت کنم.اما خونه هاشون خیلی گرون تر شده")
print(text)
# نرمالسازی واژههای مرکب و افعال پیشوندی
text = normalizer("یک کار آفرین نمونه و سخت کوش ، پیروز مندانه از پس دشواری ها برخواهدآمد.")
print(text)
پشتیبانی از پردازش دستهای و دکوراتور
texts = [
"یادته گل رز قرمز 🌹 به تو دادم؟",
"بگو یهویی از کجا پیدات شد؟"
]
outputs = normalizer.fit_transform(texts)
print(outputs)
@normalizer.on_args("text")
def process_text(text):
return text
print(process_text("تو را من چشم👀 در راهم!"))
سفارشیسازی
Shekar بر پایهٔ یک چارچوب ماژولار و ترکیبپذیر برای پیشپردازش متن ساخته شده است. مراحل پیشپردازش بهصورت عملگرهای کوچک و مستقل مانند filters، normalizers و maskers ارائه میشوند که میتوانند بهصورت مستقل یا در قالب پایپلاین ترکیب شوند.
پایپلاینها با انتزاع Pipeline ساخته میشوند و با عملگر | به هم متصل میگردند؛ بنابراین منطق پیشپردازش صریح، خوانا و قابل نگهداری خواهد بود.
برای مثال، پایپلاین زیر از نظر عملکرد معادل نرمالساز پیشفرض است:
from shekar.preprocessing import (
PunctuationNormalizer,
AlphabetNormalizer,
DigitNormalizer,
SpacingNormalizer,
RemoveDiacritics,
RepeatedLetterNormalizer,
ArabicUnicodeNormalizer,
YaNormalizer,
)
normalizer = (
AlphabetNormalizer()
| ArabicUnicodeNormalizer()
| DigitNormalizer()
| PunctuationNormalizer()
| RemoveDiacritics()
| RepeatedLetterNormalizer()
| SpacingNormalizer()
| YaNormalizer(style="joda")
)
همچنین میتوانید برای سناریوهای سبکتر، عملگرها را با هم ترکیب کنید. مثال: حذف ایموجی و نشانهگذاری.
from shekar.preprocessing import EmojiRemover, PunctuationRemover
text = "ز ایران دلش یاد کرد و بسوخت! 🌍🇮🇷"
pipeline = EmojiRemover() | PunctuationRemover()
output = pipeline(text)
print(output)
ویژگیهای پایپلاین
- ترکیبپذیری مراحل در ترتیب مشخص
- زنجیرهسازی خلاصه با عملگر
| - پشتیبانی از ورودی تکی و دستهای
- قابلیت فراخوانی مستقیم پایپلاین (
pipeline(text)) - پشتیبانی از دکوراتور با
.on_args(...) - خطاهای واضح برای ورودی یا پیکربندی نامعتبر
اجزای ماژولار پیشپردازش
پکیج shekar.preprocessing بلوکهای قابل استفادهٔ مجددی فراهم میکند که میتوانند مستقل یا داخل Pipeline استفاده شوند.
۱) نرمالسازها
| مؤلفه | نامهای جایگزین | توضیح |
|---|---|---|
AlphabetNormalizer |
NormalizeAlphabets |
تبدیل نویسههای عربی به معادل فارسی |
ArabicUnicodeNormalizer |
NormalizeArabicUnicodes |
جایگزینی فرمهای نمایشی عربی (مثل ﷽) با معادل فارسی |
DigitNormalizer |
NormalizeDigits |
تبدیل ارقام انگلیسی/عربی به فارسی |
PunctuationNormalizer |
NormalizePunctuations |
استانداردسازی علائم نگارشی |
RepeatedLetterNormalizer |
NormalizeRepeatedLetters |
نرمالسازی حروف تکراری (مثال: «سسسلام» → «سسلام») |
SpacingNormalizer |
NormalizeSpacings |
اصلاح فاصلهها، نیمفاصله و فاصلهگذاری نشانهگذاری |
YaNormalizer |
NormalizeYas |
یکدستسازی «یـا» در حالت standard یا joda |
from shekar.preprocessing import AlphabetNormalizer, PunctuationNormalizer, SpacingNormalizer
print(AlphabetNormalizer()("نشاندهندة"))
print(PunctuationNormalizer()("سلام!چطوری?"))
print(SpacingNormalizer()("اینجا کجاست؟تو میدانی؟نمیدانم!"))
۲) فیلترها / حذفکنندهها
| مؤلفه | نامهای جایگزین | توضیح |
|---|---|---|
DiacriticFilter |
DiacriticRemover, RemoveDiacritics |
حذف اعراب فارسی/عربی |
EmojiFilter |
EmojiRemover, RemoveEmojis |
حذف ایموجی |
NonPersianLetterFilter |
NonPersianRemover, RemoveNonPersianLetters |
حذف محتوای غیرفارسی (اختیاری: حفظ انگلیسی) |
PunctuationFilter |
PunctuationRemover, RemovePunctuations |
حذف نشانههای نگارشی |
StopWordFilter |
StopWordRemover, RemoveStopWords |
حذف ایستواژههای پرتکرار فارسی |
DigitFilter |
DigitRemover, RemoveDigits |
حذف ارقام |
RepeatedLetterFilter |
RepeatedLetterRemover, RemoveRepeatedLetters |
کاهش کشیدگی/تکرار حروف |
HTMLTagFilter |
HTMLRemover, RemoveHTMLTags |
حذف تگهای HTML همراه با حفظ محتوا |
HashtagFilter |
HashtagRemover, RemoveHashtags |
حذف هشتگ |
MentionFilter |
MentionRemover, RemoveMentions |
حذف منشن (@) |
from shekar.preprocessing import EmojiFilter, DiacriticFilter
print(EmojiFilter()("😊🇮🇷سلام گلای تو خونه!🎉🎉🎊🎈"))
print(DiacriticFilter()("مَنْ"))
۳) پوشانندهها (Maskers)
| مؤلفه | نامهای جایگزین | توضیح |
|---|---|---|
EmailMasker |
MaskEmails |
پوشاندن یا حذف ایمیل |
URLMasker |
MaskURLs |
پوشاندن یا حذف URL |
from shekar.preprocessing import URLMasker
print(URLMasker(mask="")("وبسایت ما: https://example.com"))
۴) تبدیلهای کاربردی
| مؤلفه | کاربرد |
|---|---|
NGramExtractor |
استخراج n-gram از متن |
Flatten |
تختکردن لیستهای تودرتو |