hunspell(5) File Formats Manual hunspell(5)

hunspell - قالب پرونده‌های لغت‌نامه و وند هانسپل

Hunspell(1) برای تعیین نحوه غلط‌یابی املایی یک زبان به دو پرونده نیاز دارد: یک پرونده لغت‌نامه شامل واژگان و فلگ‌های مربوطه، و یک پرونده وند که مشخص می‌کند این فلگ‌ها چگونه غلط‌یابی املایی را کنترل می‌کنند. پرونده لغت‌نامه شخصی یک پرونده اختیاری سوم است.

یک پرونده لغت‌نامه (*.dic) حاوی فهرستی از واژگان است که در هر سطر یک واژه قرار دارد. سطر اول پرونده (به جز لغت‌نامه‌های شخصی) حاوی تعداد تقریبی واژگان است (برای بهینه‌سازی اندازه حافظه درهم‌سازی). هر واژه می‌تواند به صورت اختیاری با یک اسلش ("/") و یک یا چند فلگ همراه باشد که ویژگی‌های واژه (مانند وندها) را نشان می‌دهند.

نکته: واژگان لغت‌نامه نیز می‌توانند حاوی اسلش باشند، به شرطی که به صورت "\/" اسکیپ شوند.

ارزش دارد که علاوه بر واژگان منفرد، جفت‌واژه‌ها را نیز به لغت‌نامه اضافه کنید تا برای اشتباهات املایی رایجی که فاصله را جا انداخته‌اند، پیشنهادات درستی دریافت کنید، مانند مثال زیر برای موارد نادرست "alot" و "inspite" (همچنین "REP" و فیلد "ph:" را برای پیشنهادات درست اشتباهات املایی رایج ببینید):

3
word
a lot
in spite

لغت‌نامه‌های شخصی فهرست‌های ساده‌ای از واژگان هستند. یک ستاره در اولین موقعیت نویسه، مدخل را به عنوان ممنوع علامت‌گذاری می‌کند. واژه دوم که با اسلش جدا می‌شود، پیوند وند را تعیین می‌کند.

foo
Foo/Simpson
*bar

در این مثال، "foo" و "Foo" واژگان شخصی هستند، به علاوه Foo با وندهای Simpson شناخته می‌شود (مانند Foo's و غیره) و bar یک واژه ممنوعه است.

پرونده لغت‌نامه:

3
hello
try/B
work/AB

فلگ‌های B و A ویژگی‌های این واژگان را مشخص می‌کنند.

پرونده وند:

SET UTF-8
TRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ'
REP 2
REP f ph
REP ph f
PFX A Y 1
PFX A 0 re .
SFX B Y 2
SFX B 0 ed [^y]
SFX B y ied y

در پرونده وند، پیشوند A و پسوند B تعریف شده‌اند. فلگ A پیشوند `re-' را تعریف می‌کند. کلاس B دو پسوند `ed-' را تعریف می‌کند. اولین پسوند B می‌تواند به یک واژه اضافه شود اگر آخرین نویسه واژه `y' نباشد. دومین پسوند می‌تواند به واژگانی اضافه شود که به `y' ختم می‌شوند.

تمام واژگان پذیرفته‌شده با این ترکیب لغت‌نامه و وند عبارتند از: "hello"، "try"، "tried"، "work"، "worked"، "rework"، "reworked".

توزیع کد منبع هانسپل شامل بیش از ۸۰ مثال برای استفاده از گزینه‌ها است.

کدگذاری نویسه‌های واژگان و تکواژها را در پرونده‌های وند و لغت‌نامه تنظیم می‌کند. مقادیر مجاز: UTF-8، ISO8859-1 تا ISO8859-10، ISO8859-13 تا ISO8859-15، KOI8-R، KOI8-U، cp1251، ISCII-DEVANAGARI.
SET UTF-8
نوع فلگ را تعیین می‌کند. نوع پیش‌فرض نویسه هشت‌بیتی (ASCII گسترش‌یافته) است. پارامتر `UTF-8' فلگ‌های نویسه‌ای یونیکد با کدگذاری UTF-8 را تنظیم می‌کند. مقدار `long' نوع فلگ نویسه‌ای ASCII گسترش‌یافته دوگانه را تنظیم می‌کند؛ مقدار `num' نوع فلگ عددی دهدهی را تنظیم می‌کند. فلگ‌های دهدهی از ۱ تا ۶۵۰۰۰ شماره‌گذاری می‌شوند و در فیلدهای فلگ با کاما از هم جدا می‌گردند.
FLAG long
حذف دوگانه پیشوند (اما حذف تکی پسوند) را تنظیم می‌کند، مثلاً برای زبان‌های دارای ساخت‌واژه پیچیده با سامانه نوشتاری راست‌به‌چپ.
کد زبان را برای عملکردهای وابسته به زبان هانسپل تنظیم می‌کند. از آن برای فعال کردن تغییر اندازه حروف خاص در زبان‌های آذری (LANG az)، ترکی (LANG tr) و تاتاری کریمه (LANG crh)، و قواعد ترکیب شمارش هجا در مجاری (LANG hu) استفاده کنید.
نویسه‌هایی را برای نادیده گرفتن در واژگان لغت‌نامه، وندها و واژگان ورودی تنظیم می‌کند. برای نویسه‌های اختیاری مانند حرکات عربی (harakat) یا نشانه‌های عبری (niqqud) مفید است (لغت‌نامه‌های آزمایشی tests/ignore.* را در توزیع هانسپل ببینید).
هانسپل می‌تواند مجموعه‌های فلگ وند را با اعداد ترتیبی در قواعد وند جایگزین کند (فشرده‌سازی نام مستعار، ابزار makealias را ببینید). اولین مثال با فشرده‌سازی نام مستعار:
3
hello
try/1
work/2

تعاریف AF در پرونده وند:

AF 2
AF A
AF AB

این معادل پرونده dic زیر است:

3
hello
try/A
work/AB

همچنین مثال‌های tests/alias* در توزیع سورس را ببینید.

نکته ۱: اگر پرونده وند شامل پارامتر FLAG باشد، آن را قبل از تعاریف AF تعریف کنید.

نکته ۲: از ابزار makealias در توزیع هانسپل برای فشرده‌سازی پرونده‌های aff و dic استفاده کنید.

هانسپل همچنین می‌تواند داده‌های ساخت‌واژی را با اعداد ترتیبی در قواعد وند جایگزین کند (فشرده‌سازی نام مستعار). مثال‌های tests/alias* را ببینید.

پارامترهای پیشنهاد می‌توانند n-gram پیش‌فرض هانسپل (جستجوی شباهت در واژگان لغت‌نامه بر اساس توالی‌های مشترک ۱، ۲، ۳ و ۴ نویسه‌ای)، جابجایی نویسه‌ها و پیشنهادات حذفی را بهینه‌سازی کنند. گزینه REP برای اصلاح خطاهای املایی معمولی و بد مخصوص یک زبان توصیه می‌شود، زیرا پیشنهادات REP دارای بالاترین اولویت در فهرست پیشنهادات هستند. PHONE برای زبان‌هایی است که رسم‌الخط آن‌ها مبتنی بر تلفظ نیست.

برای اشتباهات املایی کوتاه رایج، استفاده از فیلد :ph (که بعداً ذکر می‌شود) برای ارائه بهترین پیشنهادات مهم است.

هانسپل واژگانی را جستجو و پیشنهاد می‌کند که در آن‌ها یک نویسه منفرد با نویسه مجاور KEY جایگزین شده باشد. نویسه‌های غیرمجاور در رشته KEY با نویسه خط عمودی جدا می‌شوند. پارامترهای KEY پیشنهادی برای چیدمان‌های صفحه‌کلید QWERTY و Dvorak:
KEY qwertyuiop|asdfghjkl|zxcvbnm
KEY pyfgcrl|aeouidhtns|qjkxbmwvz

با استفاده از اولین چیدمان QWERTY، هانسپل "nude" و "node" را برای "*nide" پیشنهاد می‌کند. یک نویسه می‌تواند همسایگان بیشتری نیز داشته باشد:

KEY qwertzuop|yxcvbnm|qaw|say|wse|dsx|sy|edr|fdc|dx|rft|gfv|fc|tgz|hgb|gv|zhu|jhn|hb|uji|kjm|jn|iko|lkm
هانسپل می‌تواند اشکال درست واژه را زمانی پیشنهاد دهد که با واژه ورودی نادرست به اندازه یک نویسه TRY تفاوت داشته باشند. پارامتر TRY به بزرگی و کوچکی حروف حساس است.
واژگانی که با فلگ NOSUGGEST علامت‌گذاری شده‌اند پیشنهاد داده نمی‌شوند (اما همچنان در صورت تایپ صحیح پذیرفته می‌شوند). برای کلمات رکیک و نامناسب پیشنهاد شده است (همچنین SUBSTANDARD را ببینید).
حداکثر تعداد واژگان مرکب پیشنهادی تولیدشده توسط قواعد ترکیب را تنظیم می‌کند.
حداکثر تعداد پیشنهادات n-gram را تنظیم می‌کند. مقدار 0 پیشنهادات n-gram را غیرفعال می‌کند (همچنین MAXDIFF را ببینید).
ضریب شباهت را برای پیشنهادات مبتنی بر n-gram تنظیم می‌کند (5 = مقدار پیش‌فرض؛ 0 = پیشنهادات n-gram کمتر اما حداقل ۱؛ 10 = حداکثر پیشنهادات MAXNGRAMSUGS).
تمام پیشنهادات بد n-gram را حذف می‌کند (حالت پیش‌فرض یکی را نگه می‌دارد، MAXDIFF را ببینید).
پیشنهادات واژگان حاوی فاصله را غیرفعال می‌کند.
در صورتی که واژه ورودی به نقطه ختم شود، به پیشنهادات نقطه اضافه می‌کند (برای لغت‌نامه‌های LibreOffice کاربرد ندارد زیرا خود سازوکار گسترش نقطه خودکار دارد).
این جدول تغییراتی را مشخص می‌کند که ابتدا باید امتحان شوند. اولین سطر REP سرآیند جدول است و پس از آن یک یا چند سطر داده REP قرار می‌گیرد. با این جدول، هانسپل می‌تواند اشکال صحیح را برای اشتباهات املایی متداولی که در آن‌ها شکل نادرست بیش از یک حرف با شکل صحیح تفاوت دارد، پیشنهاد دهد (همچنین ":ph" را ببینید). رشته جستجو از لنگرهای مرزی عبارات منظم (^ و $) پشتیبانی می‌کند. برای مثال، یک تعریف جدول جایگزینی ممکن در انگلیسی برای مدیریت صامت‌های با املای نادرست:
REP 5
REP f ph
REP ph f
REP tion$ shun
REP ^cooccurr co-occurr
REP ^alot$ a_lot

نکته ۱: تعریف جایگزینی‌ها برای خطاهای تک‌نویسه‌ای متداول نیز بسیار مفید است: با REP می‌توانید اولویت بالاتری به زیرمجموعه‌ای از پیشنهادات TRY بدهید (فهرست پیشنهادات با پیشنهادات REP آغاز می‌شود).

نکته ۲: برای پیشنهاد واژگان جداشده، فاصله‌ها را با زیرخط مشخص کنید:

REP 1
REP onetwothree one_two_three

نکته ۳: جدول جایگزینی را می‌توان برای بررسی دقیق‌تر واژگان مرکب با گزینه CHECKCOMPOUNDREP استفاده کرد.

می‌توان اطلاعات وابسته به زبان را درباره نویسه‌ها و توالی‌های نویسه‌ای که باید مرتبط در نظر گرفته شوند (یعنی نزدیک‌تر از سایر نویسه‌های خارج از مجموعه)، در پرونده وند (.aff) با یک جدول map تعریف کرد. با این جدول، هانسپل می‌تواند اشکال درست را برای واژگانی پیشنهاد دهد که به اشتباه حرف یا گروه‌های حروفی نادرست را از یک مجموعه مرتبط انتخاب کرده‌اند.

برای مثال، یک نگاشت ممکن می‌تواند برای ü دارای اوملاوت آلمانی در برابر u معمولی باشد؛ کلمه Frühstück باید با u دارای اوملاوت نوشته شود نه معمولی.

MAP 1
MAP uü

از گروه‌های داخل پرانتز برای توالی‌های نویسه‌ای استفاده کنید (مثلاً برای نویسه‌های یونیکد ترکیبی):

MAP 3
MAP ß(ss)  (character sequence)
MAP fi(fi)  ("fi" compatibility characters for Unicode fi ligature)
MAP (ọ́)o   (composed Unicode character: ó with bottom dot)
گزینه PHONE از یک الگوریتم آوانویسی واج‌شناختی جدول‌محور که از Aspell قرض گرفته شده است استفاده می‌کند. این گزینه برای زبان‌هایی که رسم‌الخط آن‌ها مبتنی بر تلفظ نیست مفید است. می‌توانید تبدیل کامل الفبا و سایر قواعد را برای تبدیل توالی‌های حروفی خاص اضافه کنید. برای مستندات دقیق به نشانی http://aspell.net/man-html/Phonetic-Code.html مراجعه کنید. نکته: نویسه‌های چندبایتی UTF-8 هنوز با عبارات کروشه‌ای کار نمی‌کنند. عبارات محدوده خط تیره همچنان روی تک‌بایت‌ها عمل می‌کنند نه نویسه‌های UTF-8.
این فلگ برای واژگان نادر است که معمولاً اشتباهات املایی نیز هستند؛ گزینه r- در خط فرمان هانسپل و FORBIDWARN را ببینید.
واژگان دارای فلگ WARN با استفاده از این پارامتر توسط غلط‌یاب املایی پذیرفته نمی‌شوند.

نقاط شکست جدیدی را برای تقسیم واژگان و بررسی جداگانه بخش‌های واژه تعریف می‌کند. از ^ و $ برای حذف نویسه‌ها در ابتدا و انتهای واژه استفاده کنید. منطق: برای ترکیب با نویسه‌ها یا رشته‌های اتصال‌دهنده (مثلاً خط تیره در انگلیسی و آلمانی یا خط تیره و خط تیره کشیده در مجاری) مفید است. خط تیره‌ها اغلب نقاط شکست بدی برای توکن‌سازی هستند، زیرا کلمات مرکب با خط تیره ممکن است حاوی بخش‌های نامعتبر نیز باشند. با BREAK، هانسپل می‌تواند هر دو طرف این کلمات مرکب را با شکستن واژه‌ها در خط تیره‌ها و خط تیره‌های کشیده بررسی کند:
BREAK 2
BREAK -
BREAK --    # n-dash

شکست‌ها بازگشتی هستند، بنابراین foo-bar، bar-foo و foo-foo--bar-bar همگی کلمات مرکب معتبر خواهند بود. نکته: شکست پیش‌فرض واژه در هانسپل معادل تعریف BREAK زیر است:

BREAK 3
BREAK -
BREAK ^-
BREAK -$

با این تعریف BREAK، هانسپل اشکال "-word" و "word-" را نمی‌پذیرد:

BREAK 1
BREAK -

خاموش کردن مقادیر پیش‌فرض:

BREAK 0

نکته ۲: گزینه COMPOUNDRULE برای مدیریت خط تیره‌ها و سایر نویسه‌ها یا رشته‌های پیوند کلمات مرکب بهتر است. اگر می‌خواهید واژگان دارای خط تیره یا سایر نویسه‌های پیوند را بررسی کنید و زمان یا امکان توصیف قواعد دقیق با COMPOUNDRULE را ندارید از BREAK استفاده کنید (گزینه COMPOUNDRULE فقط پسوندگذاری آخرین بخش واژه مرکب را مدیریت می‌کند).

نکته ۳: برای غلط‌یابی املایی واژگان دارای نویسه‌های اضافی در خط فرمان، پارامتر WORDCHARS را تنظیم کنید: WORDCHARS --- (مثال tests/break.* را ببینید).

الگوهای مرکب سفارشی را با نحوی شبیه به عبارات منظم (regex) تعریف می‌کند. سطر اول COMPOUNDRULE یک سرآیند حاوی تعداد تعاریف بعدی COMPOUNDRULE است. الگوهای مرکب شامل فلگ‌های ترکیب، پرانتزها و فرا‌نویسه‌های `*' یا `?' هستند. فلگی که پس از آن `*' بیاید با دنباله‌ای از ۰ یا چند واژه که با این فلگ ترکیب نشانه‌گذاری شده‌اند مطابقت دارد. فلگی که پس از آن `?' بیاید با ۰ یا ۱ واژه نشانه‌گذاری‌شده مطابقت می‌کند. مثال‌های tests/compound*.* را ببینید.

نکته: لغت‌نامه en_US در OpenOffice.org از COMPOUNDRULE برای شناسایی اعداد ترتیبی (1st، 2nd، 11th، 12th، 22nd و غیره) استفاده می‌کند.

نکته ۲: با انواع فلگ‌های طولانی و عددی، فقط از فلگ‌های درون پرانتز استفاده کنید: (1500)*(2000)?

نکته ۳: فلگ‌های COMPOUNDRULE کاملاً مستقل از سازوکارهای ترکیب با استفاده از COMPOUNDFLAG، COMPOUNDBEGIN و غیره عمل می‌کنند (از این فلگ‌ها روی مدخل‌های واژه متفاوتی استفاده کنید).

حداقل طول واژگان مورد استفاده برای ترکیب. مقدار پیش‌فرض ۳ حرف است.
حداکثر پیشنهادات کلمات مرکب. از 0 برای غیرفعال کردن پیشنهاد از کلمات مرکب استفاده کنید. مقدار پیش‌فرض نامحدود است.
واژگانی که با فلگ COMPOUNDFLAG علامت‌گذاری شده‌اند می‌توانند در واژگان مرکب ظاهر شوند (مگر این‌که واژه کوتاه‌تر از COMPOUNDMIN باشد). وندهای دارای COMPOUNDFLAG نیز ترکیب واژگان دارای وند را مجاز می‌کنند.
واژگان نشانه‌گذاری‌شده با COMPOUNDBEGIN (یا دارای یک وند نشانه‌گذاری‌شده) می‌توانند اولین عناصر در واژگان مرکب باشند.
واژگان نشانه‌گذاری‌شده با COMPOUNDLAST (یا دارای یک وند نشانه‌گذاری‌شده) می‌توانند آخرین عناصر در واژگان مرکب باشند.
واژگان نشانه‌گذاری‌شده با COMPOUNDMIDDLE (یا دارای یک وند نشانه‌گذاری‌شده) می‌توانند عناصر میانی در واژگان مرکب باشند.
پسوندهای نشانه‌گذاری‌شده با ONLYINCOMPOUND فقط می‌توانند در داخل کلمات مرکب ظاهر شوند (عناصر Fuge در آلمانی). فلگ ONLYINCOMPOUND روی واژگان نیز کار می‌کند (tests/onlyincompound.* را ببینید). نکته: همچنین برای نشانه‌گذاری بخش‌های ترکیبی که به خودی خود به عنوان یک واژه صحیح نیستند مفید است.
پیشوندها در ابتدای کلمات مرکب مجاز هستند، و پسوندها به طور پیش‌فرض در انتهای کلمات مرکب مجازند. وندهای دارای COMPOUNDPERMITFLAG می‌توانند در داخل کلمات مرکب قرار گیرند.
پسوندهای دارای این فلگ ترکیب واژه دارای وند را ممنوع می‌کنند. واژگان لغت‌نامه با این فلگ از ابتدا و وسط کلمات مرکب حذف می‌شوند و اثر COMPOUNDPERMITFLAG را خنثی می‌کنند.
پسوندهای دوگانه را در کلمات مرکب مجاز می‌کند.
فلگ COMPOUNDROOT کلمات مرکب را در لغت‌نامه علامت‌گذاری می‌کند (در حال حاضر فقط در کد خاص زبان مجاری استفاده می‌شود).
حداکثر تعداد کلمات در یک کلمه مرکب را تنظیم می‌کند (پیش‌فرض نامحدود است).
تکرار کلمه در کلمات مرکب را ممنوع می‌کند (مانند foofoo).
ترکیب را ممنوع می‌کند، اگر کلمه مرکب (معمولاً نادرست) بتواند یک کلمه غیرمرکب با خطای REP باشد. برای زبان‌هایی با قواعد املایی سازگار با کلمات مرکب مفید است.
نویسه‌های با حروف بزرگ در مرز کلمات در ترکیبات را ممنوع می‌کند.
اگر کلمه مرکب شامل حروف تکراری سه‌گانه باشد ترکیب را ممنوع می‌کند (مانند foo|ox یا xo|oof).
اشکال ۲ حرفی ساده‌شده کلمات مرکب ممنوع‌شده توسط CHECKCOMPOUNDTRIPLE را مجاز می‌کند. برای سوئدی و نروژی و املای قدیمی آلمانی مفید است (Schiff|fahrt -> Schiffahrt).
ترکیب را ممنوع می‌کند اگر واژه اول در ترکیب به endchars ختم شود و واژه بعدی با beginchars آغاز گردد و (به صورت اختیاری) فلگ‌های درخواستی را داشته باشند. پارامتر اختیاری replacement شکل مرکب ساده‌شده را مجاز می‌کند.

الگوی ویژه "endchars" با مقدار 0 (صفر) قاعده را به ریشه‌های تغییرنیافته محدود می‌کند:

CHECKCOMPOUNDPATTERN 0/x /y

نکته: COMPOUNDMIN با تناوب واژگان مرکب به درستی کار نمی‌کند، بنابراین ممکن است لازم باشد COMPOUNDMIN را روی مقدار کمتری تنظیم کنید.

اگر آخرین بخش واژه یک ترکیب دارای فلگ FORCEUCASE باشد، بزرگ‌نویسی تمام واژه مرکب را اجباری می‌کند.
برای قواعد ترکیب خاص در زبان مجاری مورد نیاز است. پارامتر اول حداکثر تعداد هجا مجاز در یک ترکیب است هنگامی که تعداد کلمات در ترکیب از COMPOUNDWORDMAX فراتر رود. پارامتر دوم فهرست حروف صدادار است (که برای شمارش هجاها استفاده می‌شود).
برای قواعد ترکیب خاص در زبان مجاری مورد نیاز است.

وند یا پیشوندی است یا پسوندی که برای ساخت واژگان دیگر به کلمات ریشه متصل می‌شود. رده‌های وند را می‌توان با تعداد دلخواهی از قواعد وند تعریف کرد. رده‌های وند با فلگ‌های وند شناسایی می‌شوند. اولین سطر تعریف رده وند، سرآیند است. فیلدهای سرآیند رده وند:

(۰) نام گزینه (PFX یا SFX)

(۱) فلگ (نام رده وند)

(۲) ضرب متقاطع (مجوز ترکیب پیشوندها و پسوندها). مقادیر مجاز: Y (بله) یا N (خیر)

(۳) تعداد سطرهای قواعد بعدی.

فیلدهای یک قاعده وند:

(۰) نام گزینه

(۱) فلگ

(۲) نویسه‌های حذفی از ابتدا (در قواعد پیشوند) یا انتها (در قواعد پسوند) واژه

(۳) وند (به صورت اختیاری با فلگ‌های رده‌های ادامه‌دهنده که با اسلش جدا می‌شوند)

(۴) شرط.

حذف صفر یا وند صفر با 0 نشان داده می‌شود. شرط صفر با یک نقطه نشان داده می‌شود. شرط یک الگوی ساده‌شده شبیه عبارات منظم است که باید قبل از اعمال وند برقرار باشد (نقطه با نویسه دلخواه مطابقت دارد؛ نویسه‌های داخل براکت با هر نویسه‌ای از زیرمجموعه داخل براکت مطابقت دارند؛ خط تیره معنای خاصی ندارد اما علامت توان (^) بلافاصله پس از براکت باز، مجموعه نویسه‌ها را معکوس می‌کند).

(۵) فیلدهای ساخت‌واژی اختیاری که با فاصله یا تب جدا می‌شوند.

وندی که با CIRCUMFIX نشانه‌گذاری شده فقط زمانی می‌تواند به یک واژه اعمال شود که آن واژه همچنین دارای پیشوندی با CIRCUMFIX باشد و بالعکس (پرونده‌های آزمایشی circumfix.* را در توزیع سورس ببینید).
این فلگ یک شکل واژه ممنوعه را مشخص می‌کند. از آن‌جا که اشکال دارای وند نیز ممنوع هستند، می‌توانیم زیرمجموعه‌ای را از مجموعه واژگان دارای وند و مرکب پذیرفته‌شده کم کنیم. نکته: برای ممنوع کردن واژگان اشتباه تولیدشده توسط سازوکار ترکیب مفید است.
با FULLSTRIP، قواعد وند می‌توانند کل واژه را (نه فقط همه به جز یک نویسه) قبل از افزودن وندها حذف کنند (پرونده‌های آزمایشی fullstrip.* را در توزیع سورس ببینید).
اشکال با حروف بزرگ و با حرف اول بزرگ واژگان دارای فلگ KEEPCASE را ممنوع می‌کند. برای رسم‌الخط‌های خاص (واحدها و نمادهای ارز اغلب حتی در متون با حروف بزرگ، بزرگی و کوچکی حروف خود را حفظ می‌کنند) و سامانه‌های نوشتاری مفید است.
جدول تبدیل ورودی را تعریف می‌کند. از زیرخط '_' برای نشان دادن آخرین نویسه رشته استفاده کنید. برای مثال اگر نیاز دارید 200D> را فقط در صورتی که در انتهای واژه ظاهر شود به FFF0> تغییر دهید:

ICONV <200D>_ <FFF0>

نکته: برای تبدیل یک نوع نقل‌قول به نوعی دیگر یا تغییر پیوند نویسه‌ها (لیگاتور) مفید است.

جدول تبدیل خروجی را تعریف می‌کند.
منسوخ شده است. به جای LEMMA_PRESENT از فیلد "st:" استفاده کنید.
این فلگ ریشه‌های مجازی را در لغت‌نامه مشخص می‌کند: واژگانی که فقط هنگام اتصال وند معتبر هستند (مگر این‌که واژه لغت‌نامه دارای هم‌نام یا وند صفر باشد). NEEDAFFIX همچنین با پیشوندها و ترکیبات پیشوند + پسوند کار می‌کند (tests/needaffix5.* را ببینید).
منسوخ شده است (نام قبلی گزینه NEEDAFFIX).
فلگ SUBSTANDARD قواعد وند و واژگان لغت‌نامه (دگرواژه‌ها) را مشخص می‌کند که در تولید ساخت‌واژی استفاده نمی‌شوند، و کلمات ریشه را برای حذف از پیشنهادات تعیین می‌کند. همچنین NOSUGGEST را ببینید.
گزینه WORDCHARS توکن‌ساز رابط خط فرمان هانسپل را با نویسه‌های واژه‌ای اضافی گسترش می‌دهد. برای مثال، نقطه، خط تیره، خط تیره کشیده، ارقام و علامت درصد در مجاری نویسه‌های واژه هستند.
جفت حرف SS در کلمات آلمانی با حروف بزرگ می‌تواند ß باشد. هانسپل می‌تواند این حالت خاص را با اعلان CHECKSHARPS در هر دو حالت غلط‌یابی و پیشنهاد مدیریت کند.

مدخل‌های لغت‌نامه و قواعد وند هانسپل می‌توانند فیلدهای توصیف ساخت‌واژی اختیاری داشته باشند که با فاصله یا نویسه تب از هم جدا شده و با شناسه‌های فیلد ۳ نویسه‌ای (دو حرف و یک دونقطه) شروع می‌شوند:

word/flags po:noun is:nom

مثال: ما یک منبع ساده با اطلاعات ساخت‌واژی، یک پسوند اشتقاقی (:ds) و یک رده دستوری نقش کلمه (:po) تعریف می‌کنیم:

پرونده وند:

SFX X Y 1
SFX X 0 able . ds:able

پرونده لغت‌نامه:

drink/X po:verb

پرونده آزمایشی:

drink
drinkable

آزمایش:

$ analyze test.aff test.dic test.txt
> drink
analyze(drink) = po:verb
stem(drink) = po:verb
> drinkable
analyze(drinkable) = po:verb ds:able
stem(drinkable) = drinkable

در این مثال می‌توانید ببینید که تحلیل‌گر فیلدهای ساخت‌واژی را به سبک عنصر و آرایش به یکدیگر متصل می‌کند.

شناسه‌های پیش‌فرض ساخت‌واژی و غیره (مورد استفاده در پیشنهاد، ریشه‌یابی و تولید ساخت‌واژی):

نویسه‌گردانی جایگزین برای پیشنهادات بهتر، یعنی برای اشتباهات املایی مربوط به رسم‌الخط خاص و تلفظ واژه. این بهترین راه برای رسیدگی به اشتباهات املایی رایج است، بنابراین ارزش دارد که یک فیلد :ph به چند هزار واژه لغت‌نامه که بیشتر تحت تأثیر قرار دارند (یا جفت‌واژه‌ها و غیره) اضافه شود تا پیشنهادات درستی برای اشتباهات املایی آن‌ها دریافت گردد.

برای مثال:

Wednesday ph:wendsay ph:wensday
Marseille ph:maarsayl

هانسپل تمام نویسه‌گردانی‌های :ph را به جدول داخلی REP اضافه می‌کند، بنابراین همیشه واژه درست را برای اشتباهات املایی مشخص‌شده با بالاترین اولویت پیشنهاد می‌دهد.

مثال قبلی معادل تعریف REP زیر است:

REP 6
REP wendsay Wednesday
REP Wendsay Wednesday
REP wensday Wednesday
REP Wensday Wednesday
REP maarsayl Marseille
REP Maarsayl Marseille

ستاره در انتهای الگوی :ph به معنای حذف نویسه پایانی از الگو و واژه در قاعده REP مرتبط است:

pretty ph:prity*

منجر به قاعده REP زیر می‌شود:

REP 1
REP prit prett

که به پیشنهادات صحیح زیر می‌انجامد:

*prity -> pretty
*pritier -> prettier
*pritiest -> prettiest

علاوه بر این، فیلدهای :ph می‌توانند پیشنهادات با بیش از دو واژه و همچنین پیشنهادات مختلف را برای یک اشتباه املایی مدیریت کنند:

do not know ph:dunno
don't know ph:dunno

که نتیجه می‌دهد:

*dunno -> do not know, don't know

نکته: در صورت موجود بودن، :ph در شباهت n-gram نیز استفاده می‌شود.

پیکان "<-" در یک الگوی :ph به معنای قاعده REP است، و یک قاعده جایگزینی دلخواه مرتبط با مدخل لغت‌نامه ایجاد می‌کند:

happy/B ph:hepy ph:hepi->happi

نتیجه:

*hepy -> happy
*hepiest -> happiest
ریشه (Stem). اختیاری: ریشه پیش‌فرض در تحلیل ساخت‌واژی همان مدخل لغت‌نامه است. فیلد ریشه برای ریشه‌های مجازی (واژگان لغت‌نامه با فلگ NEEDAFFIX) و برای استثناهای ساخت‌واژی، به جای قواعد ساخت‌واژی تک‌کاربردی جدید مفید است.
feet  st:foot  is:plural
mice  st:mouse is:plural
teeth st:tooth is:plural

اشکال واژه با چندین ریشه نیاز به چندین مدخل لغت‌نامه دارند:

lay po:verb st:lie is:past_2
lay po:verb is:present
lay po:noun
دگرواژه(ها) (Allomorphs). یک مدخل لغت‌نامه ریشه دگرواژه‌های آن است. تولید ساخت‌واژی به فیلدهای ریشه، دگرواژه و وند نیاز دارد.
sing al:sang al:sung
sang st:sing
sung st:sing
رده نقش کلمه (Part of speech).
پسوند(های) اشتقاقی. ریشه‌یابی پسوندهای اشتقاقی را حذف نمی‌کند. تولید ساخت‌واژی به ترتیب فیلدهای پسوند بستگی دارد.

در قواعد وند:

SFX Y Y 1
SFX Y 0 ly . ds:ly_adj

در لغت‌نامه:

ably st:able ds:ly_adj
able al:ably
پسوند(های) تصریفی. تمام پسوندهای تصریفی توسط ریشه‌یابی حذف می‌شوند. تولید ساخت‌واژی به ترتیب فیلدهای پسوند بستگی دارد.
feet st:foot is:plural
پسوند(های) پایانی. فیلدهای پسوند پایانی، فیلدهای پسوند تصریفی هستند که توسط پسوندهای اضافی (غیرپایانی) "حذف" شده‌اند.

برای تکواژهای صفر و وندهای حذف‌شده توسط قواعد تقسیم مفید است.

work/D ts:present
SFX D Y 2
SFX D   0 ed . is:past_1
SFX D   0 ed . is:past_2

نمونه بارز پسوند پایانی، تکواژ صفر حالت فاعلی است.

پیشوند سطحی. راه‌حل موقت برای افزودن پیشوندها به ریشه‌ها و اشکال واژه تولیدشده. مثال tests/morph.* را ببینید.
بخش‌های واژگان مرکب. فیلدهای خروجی تحلیل ساخت‌واژی برای ریشه‌یابی.
برنامه‌ریزی‌شده: پیشوند اشتقاقی.
برنامه‌ریزی‌شده: پیشوند تصریفی.
برنامه‌ریزی‌شده: پیشوند پایانی.

الگوریتم اصلی Ispell فقط یک پسوند را حذف می‌کند. هانسپل می‌تواند یک پسوند اضافی (یا یک پیشوند اضافی در حالت COMPLEXPREFIXES) را حذف کند.

حذف دوگانه پسوند بهبود قابل توجهی در رسیدگی به تعداد بیشمار پسوندهایی است که ویژگی زبان‌های پیوندی هستند.

یک پسوند 's' دوم (رده وند Y) در مثال زیر رده ادامه پسوند 'able' خواهد بود:

SFX Y Y 1
SFX Y 0 s .
SFX X Y 1
SFX X 0 able/Y .

پرونده لغت‌نامه:

drink/X

پرونده آزمایشی:

drink
drinkable
drinkables

آزمایش:

$ hunspell -m -d test <test.txt
drink st:drink
drinkable st:drink fl:X
drinkables st:drink fl:X fl:Y

در تئوری، حذف دوگانه پسوند در مقایسه با پیاده‌سازی یک‌سطحی هانسپل تنها به ریشه دوم تعداد قواعد پسوند نیاز دارد. در عمل، این همان چیزی است که تشریح ساخت‌واژه تصریفی مجاری را با حذف دوگانه پسوند ممکن ساخته است.

هانسپل می‌تواند بیش از ۶۵۰۰۰ رده وند را مدیریت کند. سه نحو جدید برای تعیین فلگ‌ها در پرونده‌های وند و لغت‌نامه وجود دارد.

دستور FLAG long فلگ‌های ۲ نویسه‌ای را تنظیم می‌کند:

FLAG long
SFX Y1 Y 1
SFX Y1 0 s 1

رکورد لغت‌نامه با فلگ‌های Y1، Z3 و F?:

foo/Y1Z3F?

دستور FLAG num فلگ‌های عددی جداشده با کاما را تنظیم می‌کند:

FLAG num
SFX 65000 Y 1
SFX 65000 0 s 1

مثال لغت‌نامه:

foo/65000,12,2756

مورد سوم فلگ‌های نویسه‌ای یونیکد است.

لغت‌نامه هانسپل می‌تواند شامل عناصر تکراری باشد که هم‌نام یا هم‌نگاشت هستند:

work/A    po:verb
work/B    po:noun

یک پرونده وند:

SFX A Y 1
SFX A 0 s . sf:sg3
SFX B Y 1
SFX B 0 s . is:plur

پرونده آزمایشی:

works

آزمایش:

$ hunspell -d test -m <testwords
work st:work po:verb is:sg3
work st:work po:noun is:plur

این قابلیت همچنین راهکاری برای ممنوع کردن ترکیبات غیرمجاز پیشوند/پسوند فراهم می‌کند.

یک اثر جانبی جالب از حذف چندمرحله‌ای این است که رسیدگی مناسب به پیراوندها اکنون به طور طبیعی و آسان حاصل می‌شود. برای نمونه، در زبان مجاری، صفت عالی با پیشوندگذاری همزمان leg- و پسوندگذاری -bb به پایه صفت ساخته می‌شود. مشکلی که در معماری تک‌سطحی وجود داشت این بود که هیچ راهی برای وابسته کردن مجوز واژگانی پیشوندها و پسوندهای خاص به یکدیگر وجود نداشت، و در نتیجه اشکال نادرست معتبر شناخته می‌شدند. در کلمات ساده، پیشوند un- فقط زمانی در انگلیسی مجاز است که پایه drink دارای پسوند -able باشد. اگر هر دوی این الگوها توسط قواعد وند برخط مدیریت شوند و قواعد فقط در برابر پایه بررسی شوند، هیچ راهی برای بیان این وابستگی وجود ندارد و سامانه دچار تولید بیش از حد یا کمتر از حد خواهد شد.

در مثال بعدی، رده پسوند R دارای یک رده پیشوند 'ادامه‌دهنده' (رده P) است:

PFX P Y 1
PFX P   0 un . [prefix_un]+
SFX S Y 1
SFX S   0 s . +PL
SFX Q Y 1
SFX Q   0 s . +3SGV
SFX R Y 1
SFX R   0 able/PS . +DER_V_ADJ_ABLE

لغت‌نامه:

2
drink/RQ	[verb]
drink/S	[noun]

تحلیل ساخت‌واژی:

> drink
drink[verb]
drink[noun]
> drinks
drink[verb]+3SGV
drink[noun]+PL
> drinkable
drink[verb]+DER_V_ADJ_ABLE
> drinkables
drink[verb]+DER_V_ADJ_ABLE+PL
> undrinkable
[prefix_un]+drink[verb]+DER_V_ADJ_ABLE
> undrinkables
[prefix_un]+drink[verb]+DER_V_ADJ_ABLE+PL
> undrink
Unknown word.
> undrinks
Unknown word.

وندهای شرطی پیاده‌سازی‌شده با رده ادامه‌دهنده برای پیراوندها کافی نیستند، زیرا یک پیراوند در ساخت‌واژه یک وند واحد به شمار می‌رود. ما همچنین برای تحلیل ساخت‌واژی صحیح به گزینه CIRCUMFIX نیاز داریم.

# circumfixes: ~ obligate prefix/suffix combinations
# superlative in Hungarian: leg- (prefix) AND -bb (suffix)
# nagy, nagyobb, legnagyobb, legeslegnagyobb
# (great, greater, greatest, most greatest)
CIRCUMFIX X
PFX A Y 1
PFX A 0 leg/X .
PFX B Y 1
PFX B 0 legesleg/X .
SFX C Y 3
SFX C 0 obb . +COMPARATIVE
SFX C 0 obb/AX . +SUPERLATIVE
SFX C 0 obb/BX . +SUPERSUPERLATIVE

لغت‌نامه:

1
nagy/C	[MN]

تحلیل:

> nagy
nagy[MN]
> nagyobb
nagy[MN]+COMPARATIVE
> legnagyobb
nagy[MN]+SUPERLATIVE
> legeslegnagyobb
nagy[MN]+SUPERSUPERLATIVE

مجاز ساختن ترکیب آزاد کلمات باعث کاهش دقت شناسایی می‌شود، بماند که ریشه‌یابی و تحلیل ساخت‌واژی را نیز تحت‌الشعاع قرار می‌دهد. اگرچه Ispell سوییچ‌های واژگانی را برای مجاز ساختن ترکیب پایه‌ها معرفی می‌کند، اما ثابت شده که این روش به اندازه کافی محدودکننده نیست. برای نمونه:

# affix file
COMPOUNDFLAG X
2
foo/X
bar/X

با این منبع، foobar و barfoo نیز کلمات پذیرفته‌شده هستند.

این موضوع با معرفی ترکیب حساس به جهت بهبود یافته است، به طوری که ویژگی‌های واژگانی می‌توانند مشخص کنند که آیا پایه می‌تواند به عنوان جزء چپ‌ترین یا راست‌ترین در کلمات مرکب ظاهر شود یا خیر. با این وجود، این راهکار هنوز برای رسیدگی به الگوهای پیچیده کلمات مرکب، به ویژه استانداردهای خط تیره ناکافی است.

الگوریتم Hunspell در حال حاضر هر شکل دارای وندی از واژگان را که به عنوان اعضای بالقوه کلمات مرکب علامت‌گذاری شده‌اند مجاز می‌داند. Hunspell این روش را ارتقا داده و قواعد بازگشتی بررسی کلمات مرکب آن پیاده‌سازی قواعد املایی پیچیده کلمات مرکب مجاری را ممکن ساخته است. برای مثال گزینه‌های COMPOUNDWORDMAX، COMPOUNDSYLLABLE، COMPOUNDROOT و SYLLABLENUM را می‌توان برای کدگذاری قاعده معروف '3-6' مجاری استفاده کرد. علاوه بر این، در مجاری پسوندهای اشتقاقی اغلب ویژگی‌های ترکیبی را تغییر می‌دهند. هانسپل فلگ‌های ترکیب را روی وندها مجاز می‌داند و دو فلگ ویژه (COMPOUNDPERMITFLAG و COMPOUNDFORBIDFLAG) برای اجازه دادن یا ممنوع کردن ترکیب اشکال مشتق ارائه می‌دهد.

چندین قابلیت هانسپل برای رسیدگی به کلمات مرکب آلمانی مورد نیاز است:

# German compounding
# set language to handle special casing of German sharp s
LANG de_DE
# compound flags
COMPOUNDBEGIN U
COMPOUNDMIDDLE V
COMPOUNDEND W
# Prefixes are allowed at the beginning of compounds,
# suffixes are allowed at the end of compounds by default:
# (prefix)?(root)+(affix)?
# Affixes with COMPOUNDPERMITFLAG may be inside of compounds.
COMPOUNDPERMITFLAG P
# for German fogemorphemes (Fuge-element)
# Hint: ONLYINCOMPOUND is not required everywhere, but the
# checking will be a little faster with it.
ONLYINCOMPOUND X
# forbid uppercase characters at compound word bounds
CHECKCOMPOUNDCASE
# for handling Fuge-elements with dashes (Arbeits-)
# dash will be a special word
COMPOUNDMIN 1
WORDCHARS -
# compound settings and fogemorpheme for `Arbeit'
SFX A Y 3
SFX A 0 s/UPX .
SFX A 0 s/VPDX .
SFX A 0 0/WXD .
SFX B Y 2
SFX B 0 0/UPX .
SFX B 0 0/VWXDP .
# a suffix for `Computer'
SFX C Y 1
SFX C 0 n/WD .
# for forbid exceptions (*Arbeitsnehmer)
FORBIDDENWORD Z
# dash prefix for compounds with dash (Arbeits-Computer)
PFX - Y 1
PFX - 0 -/P .
# decapitalizing prefix
# circumfix for positioning in compounds
PFX D Y 29
PFX D A a/PX A
PFX D Ä ä/PX Ä
 .
 .
PFX D Y y/PX Y
PFX D Z z/PX Z

نمونه لغت‌نامه:

4
Arbeit/A-
Computer/BC-
-/W
Arbeitsnehmer/Z

واژگان مرکب پذیرفته‌شده با منبع قبلی:

Computer
Computern
Arbeit
Arbeits-
Computerarbeit
Computerarbeits-
Arbeitscomputer
Arbeitscomputern
Computerarbeitscomputer
Computerarbeitscomputern
Arbeitscomputerarbeit
Computerarbeits-Computer
Computerarbeits-Computern

کلمات مرکب پذیرفته‌نشده:

computer
arbeit
Arbeits
arbeits
ComputerArbeit
ComputerArbeits
Arbeitcomputer
ArbeitsComputer
Computerarbeitcomputer
ComputerArbeitcomputer
ComputerArbeitscomputer
Arbeitscomputerarbeits
Computerarbeits-computer
Arbeitsnehmer

این راه‌حل همچنان ایده‌آل نیست و با یک الگوریتم بررسی کلمات مرکب الگومحور که با توکن‌سازی بافر ورودی یکپارچه شده است جایگزین خواهد شد.

هر دو غلط‌یاب Ispell و Myspell از رمزگذاری نویسه‌ای ۸ بیتی استفاده می‌کنند که نقصی بزرگ در مقیاس‌پذیری به شمار می‌رود. اگرچه زبانی مانند مجاری دارای مجموعه نویسه استاندارد ۸ بیتی (ISO 8859-2) است، اما این مجموعه اجازه اجرای کامل قواعد املایی مجاری را نمی‌دهد. برای مثال نماد '--' (خط تیره کشیده یا n-dash) در این مجموعه نویسه وجود ندارد، با وجود این‌که نماد رسمی جداسازی جملات معترضه است و در کلمات مرکب نیز به عنوان خط تیره بزرگ به کار می‌رود.

برنامه MySpell جدول‌های رمزگذاری ۸ بیتی دارد، اما زبان‌هایی نیز وجود دارند که استاندارد ۸ بیتی مشخصی ندارند، مانند زبان‌های آفریقایی با نویسه‌های غیرلاتین یا لاتین گسترش‌یافته.

مشکلات ناشی از رمزگذاری‌های ۸ بیتی مدت‌هاست که شناخته شده است. واضح است که فدا کردن بازدهی برای استقلال از رمزگذاری مزایای خود را در برنامه‌های واقعاً چندزبانه دارد. هانسپل مدیریت حافظه و زمان کارآمدی را برای یونیکد پیاده‌سازی می‌کند. با رمزگذاری‌های غیر UTF-8، هانسپل با همان رشته‌های اصلی ۸ بیتی کار می‌کند. با UTF-8، وندها و واژگان در UTF-8 ذخیره شده و بیشتر در UTF-8 تحلیل می‌شوند؛ برای بررسی شرط و پیشنهاد به UTF-16 تبدیل می‌گردند. تحلیل متنی و غلط‌یابی یونیکد سربار زمانی ناچیز (۰-۲۰٪) و سربار حافظه معقولی دارند که به زبان وابسته است.

لغت‌نامه‌های Aspell را می‌توان به سادگی به قالب هانسپل تبدیل کرد. مراحل تبدیل:

لغت‌نامه (xx.cwl -> xx.wl):

preunzip xx.cwl
wc -l < xx.wl > xx.dic
cat xx.wl >> xx.dic

پرونده وند

اگر پرونده وند موجود است آن را کپی کنید:

cp xx_affix.dat xx.aff
در غیر این صورت آن را با کدگذاری مناسب ایجاد کنید (xx.dat را ببینید):
echo "SET ISO8859-x" > xx.aff
یا
echo "SET UTF-8" > xx.aff

مفید است که یک گزینه TRY اضافه کنید که نویسه‌های لغت‌نامه را به ترتیب فراوانی فهرست کند تا پیشنهادات فاصله ویرایشی هدایت شوند:

echo "TRY qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM" >>xx.aff

hunspell (1), ispell (1), ispell (4)

2026-04-30