انحراف پی اچ پی با موارد از اعداد. انحراف نام کامل – NameCaseLib PHP Framework

اغلب نیاز وجود دارد نام ها را در PHP تغییر دهید. موافق باشید که عبارت " اضافه کردن به عنوان دوست Ilya"به نظر خیلی بدتر از" ایلیا را به عنوان دوست اضافه کنید". از همین رو انحطاط نام ها به حروف در PHPاین اغلب مورد نیاز است، و در این مقاله به شما خواهم گفت که چگونه می توانید این را در وب سایت خود پیاده سازی کنید.

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

گزینه دوم این است که خودتان بنویسید کلاس انحراف نام در PHP، یا از یک آماده استفاده کنید. از آنجایی که قوانین در زبان روسی بسیار پیچیده است، به علاوه استثنائات زیادی وجود دارد، بنابراین یک کتابخانه بسیار بزرگ مورد نیاز خواهد بود، و حتی این دور از ذهن است. 100% نجات. محبوب ترین از همه کتابخانه هایی که با آن سروکار دارند انحطاط نام ها در PHP، NameCaseLib است.

پس از دانلود این کتابخانه و قرار دادن آن در وب سایت خود، می توانید از آن به صورت زیر استفاده کنید:

Require_once "NCL.NameCase.ru.php"؛ // کتابخانه روسی را وصل کنید
$case = new NCLNameCaseRu(); // یک شی از کلاس NCLNameCaseRu ایجاد کنید
$array = $case->q("روساکوف میخائیل یوریویچ"); // آرایه ای از 6 عنصر مربوط به 6 مورد دریافت می کنیم که در آن رشته ورودی ظاهر می شود
print_r ($array); // خروجی آرایه
?>

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

جعبه شنی

آقای المپیانوامبر 16, 2013 در 03:01 ب.ظ

انحراف نام کامل - NameCaseLib PHP Framework

  • PHP

سلام حبرخبر!

امروز در مورد یک چارچوب کوچک اما بسیار مفید صحبت خواهم کرد - NameCaseLib.

من فکر می‌کنم خیلی‌ها با موقعیتی مواجه شده‌اند که در آن لازم بود نام خانوادگی، نام و نام خانوادگی افراد را به صورت موردی رد کنند. این چارچوب به ما کمک می کند تا از شر بسیاری از "دوچرخه ها" خلاص شویم.

نصب و راه اندازی

برای اینکه NameCaseLib کار کند، به PHP5 و کتابخانه php_mbstring برای کار با متن در فرمت UTF-8 نیاز داریم.

عالی است، اکنون تنها چیزی که باقی می ماند اتصال خود فریمورک است، برای این کار ما فایل های لازم را دانلود می کنیم.

NameCaseLib از دو زبان روسی و اوکراینی پشتیبانی می کند. فایل NCL.NameCase.ru.php حاوی قوانین انحراف روسی، NCL.NameCase.ua.php، به ترتیب، قوانین اوکراینی است. پوشه NCL حاوی "هسته" چارچوب است، یعنی مجموعه ای از توابع اساسی.

بنابراین، اجازه دهید یک فایل با فرمت php ایجاد کنیم و عملکرد این فریم ورک را بررسی کنیم.

q("ماکسیموف الکساندر واسیلیویچ")؛ # خروجی آرایه به دست آمده. (توجه: یک آرایه قابل نمایه سازی ساده را برمی گرداند) var_dump($array); ?>

بر این اساس، به همین ترتیب، می‌توانیم با اتصال قوانین انحراف اوکراینی، نام‌های کامل اوکراینی را رد کنیم.

اما بیایید همچنان به این نگاه کنیم که این روش شامل چه پارامترهایی است qو چگونه می توان از آن استفاده کرد؟

این روش دارای 3 پارامتر است که 2 مورد از آنها قابل حذف است. پارامتر اول نام کامل شخص است، پارامتر دوم مورد است (لیستی از ثابت ها را در زیر ارائه می کنم؛ اگر case مشخص نشده باشد (NULL)، سپس متد همه موارد را برمی گرداند)، و سومی جنسیت شخص است. (ثابت ها نیز در زیر آورده شده است؛ اگر جنسیت (NULL) را مشخص نکنید، روش خودش آن را تعیین می کند)

ثابت ها

برای نشان دادن جنسیت، از ثابت ها استفاده می شود:
  • NCL::$MAN – جنسیت مذکر
  • NCL::$WOMAN – زن

برای نشان دادن موارد زبان روسی:

  • NCL::$IMENITLN - حالت اسمی
  • NCL::$RODITLN - مورد جنسی
  • NCL::$DATELN - مورد داده
  • NCL::$VINITELN - مورد اتهامی
  • NCL::$TVORITELN - کیس ابزاری
  • NCL::$PREDLOGN - حالت حرف اضافه

برای نشان دادن موارد زبان اوکراینی:

  • NCL::$UaNazyvnyi – پلاک نام
  • NCL::$UaRodovyi – نمای عمومی
  • NCL::$UaDavalnyi – مدیر طولانی مدت
  • NCL::$UaZnahidnyi – ویدیوی معروف
  • NCL::$UaOrudnyi – نمایش سلاح
  • NCL::$UaMiszevyi – miscevyi vidminok
  • NCL::$UaKlychnyi – یادداشت شخصی

یادداشت

  1. ترتیب نام مهم نیست.
  2. فرقی نمی‌کند که در کدام حالت نام کامل نشان داده شود، پس از انحراف، روش حروف کوچک و بزرگ را برمی‌گرداند.

تعریف قسمتی از نام کامل

با استفاده از متد getFullNameFormat می‌توانیم قسمت یا قسمت‌هایی از نام کامل را تعیین کنیم.

getFullNameFormat("ماکسیموف الکساندر واسیلیویچ"); /* قالبی مانند: S F N دریافت می کنیم، جایی که: - S - نام خانوادگی - N - نام - F - نام میانی */ echo $fullName; ?>

اما اگر چارچوب هنوز نمی تواند به درستی نحوه رد نام انتخابی شما را تعیین کند، چه باید بکنید؟

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

qFullName("Maksimov"، "Alexander"، "Vasilievich"، NCL::$MAN، NCL::$TVORITELN، "S N F")."\n"; ?>

نتایج

NameCaseLib یک چارچوب واقعا کاربر پسند است که شامل بسیاری از ویژگی های مفید است. این سایت دارای اسناد کامل به زبان روسی است.

ماژول morpher.so برای کاهش حروف کوچک کلمات و عبارات - نام خانوادگی، نام و نام خانوادگی، نام شهرها و کالاها - به زبان روسی و اوکراینی طراحی شده است.

تابع انحطاط بر اساس موارد

یک میلیون دلار می روداز جانبنابرژنیه چلنی" , " rod " ); ?> !

در نتیجه دریافت می کنیم:

یک میلیون دلار به واسیلی پوپکین از نابرژنیه چلنی می رسد!

تابع morpher_inflect یک عبارت در حالت اسمی (آگومان اول) را به هر حالت (آگومان دوم) تبدیل می کند. مورد می تواند معانی زیر را داشته باشد:

تمام رشته های ارسال شده به کتابخانه باید با رمزگذاری UTF-8 باشند. نتیجه نیز در UTF-8 برگردانده می شود.

تابع مربوط به زبان اوکراینی morpher_ukr_inflect نامیده می شود. تا کنون فقط با نام خانوادگی، نام و نام خانوادگی کار می کند و در نام موارد با روسی تفاوت دارد:

ترجمه به جمع هنوز در نسخه اوکراینی اجرا نشده است.

عملکرد تجزیه یک نام به اجزا

تابع morpher_split_fio رشته ورودی را به آرایه ای از نام خانوادگی، نام، نام وسط تقسیم می کند.

F: Pupkin I: Vasily O:

تابع کثرت سازی

اگر رشته "mn" را به پارامتر دوم اضافه کنید، نتیجه خواهد بود جمع:

در انبار باقی مانده است 238 .

238 پوکر در انبار باقی مانده است.

اگر پارامتر اول قبلاً جمع باشد، موارد زیر برگردانده می شود:

#خطا: پارامتر 1 "text" جمع است.

تابع تعیین جنس

" y " , " f " => " y " , " n " => " اوه " , " p " => " y " ); $name = "متخصصین"; $rod = morpher_get_gender ($name); echo "ما به شما احترام می گذاریم." $endings [$rod]. " " . $name. " !\n " ; ?>

برای تعیین جنسیت نام خانوادگی، نام و نام خانوادگی در زبان اوکراینی، از تابع morpher_ukr_get_gender استفاده کنید. فقط «m» (مرد) یا «f» (مونث) را برمی‌گرداند.

عملکرد نوشتن اعداد و مبالغ پولی

تابع morpher_spell املای عدد را تشکیل می دهد و واحد اندازه گیری داده شده را در حالت مورد نظر قرار می دهد:

روز تقویم" ); // 28 (بیست و هشت) روز تقویمی morpher_spell("1.2"، "درصد"); // 1.2 (یک امتیاز دو) درصد morpher_spell(2، "روز"); // 2 (دو) روز ?>

اگر در یک مورد خاص نیاز به درج کلمات در متن دارید، case را به عنوان پارامتر سوم مشخص کنید:

در حینروز تقویم" , " R " ); ?> .

در نتیجه، "در 28 (بیست و هشت) روز تقویمی" دریافت می کنیم.

مقادیر مورد قبول: I، R، D، V، T، P و آنالوگ های آنها، نوشته شده به لاتین، را ببینید. فرم های اضافه (predl-o و gde) در این تابع پشتیبانی نمی شوند.

برای نام برخی از واحدهای پولی، تابع morpher_spell املای مانند این را تولید می کند:

یکصد و بیست و سه روبل 45 کوپک morpher_spell(123.45، "USD"); // یکصد و بیست و سه دلار آمریکا 45 سنت morpher_spell(123.45، "یورو"); // صد و بیست و سه یورو 45 سنت?>

در صورت تمایل، می توانید از نام های اختصاری واحدهای پولی، با یا بدون نقطه استفاده کنید:

صد و بیست و سه روبل. 45 کوپک morpher_spell(123.45، "$"); // یکصد و بیست و سه دلار آمریکا 45 سنت morpher_spell (123.45, " UAH " ); // صد و بیست و سه UAH. 45 کوپک?>

یا کدهای ارز سه حرفی استاندارد بین المللی ISO 4217 مانند RUB، USD، EUR و غیره که در این حالت نام کشور به طور خودکار در نام ارز درج می شود:

یکصد و بیست و سه روبل روسیه 45 کوپک morpher_spell(123.45، "UAH"); // یکصد و بیست و سه گریونای اوکراینی 45 کوپک morpher_spell(123.45، "KZT"); // یکصد و بیست و سه قزاق تنگه 45 تیین?>

خطا در پردازش

اگر خطایی رخ دهد، همه توابع کتابخانه خطی را برمی‌گردانند که با "#ERROR:" شروع می‌شود.

#خطا: "متن" پارامتر 1 نباید خالی باشد.
#خطا: "مورد" پارامتر 2 نباید خالی باشد.
#خطا: پارامتر 1 "متن" روسی نیست.
#خطا: پارامتر 2 "مورد" نامعتبر است.
#خطا: پارامتر 1 "text" جمع است.

اگر نمی‌خواهید کاربر این پیام‌ها را ببیند، زیررشته اولیه "#ERROR:" را بررسی کنید.

تابع morpher_inflect 2 پارامتر و morpher_get_gender - یک پارامتر را انتظار دارد. اگر با تعداد پارامترهای اشتباه فراخوانی شود، مفسر PHP یک هشدار صادر می کند و به اجرای برنامه ادامه می دهد.

نصب ماژول در لینوکس

برای سهولت و ساده‌تر شدن مراحل نصب، توزیع شامل مجموعه‌ای از اسکریپت‌ها است که نصب بسته‌های لازم برای کامپایل، مونتاژ ماژول و ثبت ماژول را به عنوان پسوند برای PHP خودکار می‌کند. با توجه به تنوع گسترده توزیع ها سیستم عامل, گزینه های مختلفتنظیمات و ویژگی های ساخت پسوند برای php، باید بدانید که در برخی موارد، هنگام نصب یک ماژول، ممکن است نیاز به اقدامات اضافی وجود داشته باشد که توسط اسکریپت های اسمبلی اجرا نمی شوند.

برای شروع مراحل نصب خودکار، توزیع را در هر دایرکتوری، به عنوان مثال، morpher باز کنید:

# mkdir morpher # شکل دهنده سی دی # tar xf ../morpher.tar # سی دی php

اسکریپت ساخت را با دستور زیر اجرا کنید:

# بش ساخت.ش

در صورت موفقیت، فایل ماژول morpher.so کامپایل شده و به فهرست پسوندهای php منتقل می شود. ماژول در پیکربندی php ثبت می شود و عملکرد ماژول به طور خودکار با استفاده از یک تست بررسی می شود. خروجی متن اسکریپت اسمبلی باید حاوی پیامی باشد که آزمایش موفقیت آمیز را نشان می دهد:

تست های در حال اجرا... ... انجام شد.

ماژول شما آماده استفاده است. اکنون می توان دایرکتوری را حذف کرد:

# شکل دهنده rm -r

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

می توانید با دستور زیر ساخت ماژول را بدون اعمال اضافی شروع کنید:

# bash compile.sh

فایل تمام شده در دایرکتوری morpher/php/modules قرار خواهد گرفت. باید در فهرست پسوندهای PHP قرار گیرد، به عنوان مثال:

# php-config --extension-dir/usr/lib/php5/20121212 # mv modules/morpher.so /usr/lib/php5/20121212/

فهرست برنامه افزودنی ممکن است در سیستم شما متفاوت باشد.

# bash setup.sh

یا خودتان نام پسوند را در فایل php.ini مشخص کنید. می‌توانید با اجرای دستی یک اسکریپت آزمایشی PHP از خط فرمان، عملکرد افزونه را بررسی کنید:

# php -f test.phpتست های در حال اجرا... ... انجام شد.

خطاهای احتمالی در هنگام مونتاژ و راه های رفع آنها

خطا: /usr/bin/ld: نمی تواند -lm را پیدا کند

دلیل: بسته glibc-static را نصب نکرده اید.

خطا: .../include/php/php_config.h:2526:30: خطا: فراخوانی «isnan(double&)» بارگذاری شده مبهم است. (شماره خط ممکن است در نسخه PHP و پیکربندی شما متفاوت باشد)

مشکل بسیار محبوبی که با آن روبرو شده است برنامه نویسان وب، این انحطاط کلمات در PHP. به عنوان مثال، باید نمایش دهید که چند دقیقه پیش یک پیام باقی مانده است. شما به سادگی می توانید یک عدد و یک کلمه بنویسید " دقایقاما پس از آن بسیار عجیب نوشته خواهد شد، برای مثال، 1 دقیقه", "2 دقیقهو غیره. در واقع بدون انحطاط کلمات در PHPشما نمی توانید این کار را انجام دهید، مگر اینکه، البته، بخواهید به زبان روسی بنویسید.

این مشکل برای مبتدیان بسیار دشوار به نظر می رسد، اما، در واقع، الگوی خاصی برای انحطاط کلمات وجود دارد. خودت ببین: " 1 دقیقه، 2 دقیقه، 5 دقیقه، 11 دقیقه، 19 دقیقه، 21 دقیقه، 22 دقیقه، 25 دقیقه و غیره"الگویی را می بینید؟ 1, 21, 31, 41 - همیشه خواهد بود " دقیقهاگر رقم کم اهمیت بیشتر باشد 1و کمتر 5 ، در حالی که خود عدد هنگام تقسیم بر 100 باقی مانده بیشتر دارد 20 (یعنی مثلاً یک عدد نیست 12 و نه 112 ، سپس وجود خواهد داشت " دقایق". در موارد دیگر " دقایق".

تابع getWord ($number، $پسوند) (
$keys = آرایه (2، 0، 1، 1، 1، 2);
$mod = $number % 100;
$suffix_key = ($mod > 7 && $mod< 20) ? 2: $keys;
بازگشت $پسوند[$suffix_key];
}
$array = array("دقیقه"، "دقیقه"، "دقیقه"); $n = 21;

echo "$n $word
";
$n = 11;
$word = getWord($n، $array);
echo "$n $word
";
$n = 4;
$word = getWord($n، $array);
echo "$n $word
";
?>

با اجرای این اسکریپت آن را خواهید دید انحطاط کلمات در PHPبا یک انفجار اتفاق می افتد فقط می توانم اضافه کنم که علاوه بر " دقایق"ممکن است وجود داشته باشد" روز", "ساعت", "انسان", "کامپیوتر" و تمام اسم های دیگر که بسته به عدد کاهش می یابد.

جاوا اسکریپت در مرورگر شما مسدود شده است. لطفا جاوا اسکریپت را برای عملکرد سایت فعال کنید!

API برای انحراف کلمه، گرفتن جنسیت (مذکر، مؤنث)، حروف کوچک، انحراف و سایر ویژگی های یک کلمه

API انحراف کلمه

گزینه ها:
عطف کردن- یک کلمه یا فهرستی از کلمات که با فاصله از هم جدا شده اند. گزینه های زیر فقط در صورت انتقال یک کلمه در دسترس هستند.
رده جزء کلام
توصیفگرمثالشرح
سیمادراسم
پقرمزصفت
KR_APILزیباصفت کوتاه
نامحدودبرومصدر
جیآیندهفعل شخصی
مشارکتپیاده رویشرکت کننده
مشارکترفتنشرکت کننده
KR_PARTICIPLEساخته شدهمضارع کوتاه
عددهشتعددی (کمی)
NUMBER-Pهشتمشماره ترتیبی
ام‌اساوضمیر-اسم
MS-PREDCهیچ چیضمیر اعتباری
MS-Pهرصفت اسمی
نسردقید
اجدادجالب هستمحمول
ترجیح می دهندزیربهانه، مستمسک
اتحاد. اتصالواتحاد. اتصال
بینآخحرف ندا
زود زودخوبذره
INVODNقطعاکلمه مقدماتی
PHRAZخلیج های دست و پا زدن، zgiواحد عبارت شناسی
گرم– . مشخص شده با "," (کاما) از هم جدا شده است. برای حذف، "-" (منهای) را قبل از گرام نشان دهید.
گراماشرح
جنس
آقایمردانه
zhrزنانه
چهارشنبهجنسیت خنثی
mr-zhrجنسیت عمومی (یتیم، مست)
عدد
واحدهامفرد
plجمع
مورد
آنهااسمی
rdجنسی
dtداتیو
vnاتهامی
تلویزیونوسیله
و غیرهحرف اضافه
صداآوازی (پدر، خدا)
2 مصدر دوم یا حالت اضافه دوم
زمان
nstزمان حال
ارادهزمان آینده
prshزمان گذشته
صورت
1 لیتراولین فرد
2 لیترشخص دوم
3 لیترشخص ثالث
جانوری
odجان دادن
ولیبی جان
چشم انداز
St.نمای کامل
nsگونه های ناقص
گذرا
npانتقال
neغیر گذرا
سوگند - تعهد
dstصدای فعال
صفحهحالت مجهول
دیگر
0 تغییرناپذیر
bezlفعل غیر شخصی
pvlحالت امری (واجب)
جاذبهدارایی (استفاده نشده)
قبلیفوق العاده (برای صفت ها)
مقایسه کنیددرجه مقایسه ای (برای صفت ها)
کیفیتصفت کیفی
ویژگی های معنایی
نامنام (ایوان، میخائیل)
زننام خانوادگی (ایوانف، سیدوروف)
گزارشنام خانوادگی (ایوانوویچ، میخائیلوویچ)
lokنام نام (مسکو، لنا، اورست)
abbrمخفف (KPSS، RONO)
orgسازمان
سوالقید پرسشی
نشان می دهدقید نمایشی
زبان عامیانهاصطلاحات تخصصی
تجزیهمحاوره ای
قوسباستان گرایی
HRHغلط املایی
شاعرشاعرانه
پروفسورحرفه ای گری
اطلاعات- نمایش هر فرم به صورت آرایه ای با اطلاعات اضافی

Http://site/service/api.php?inflect=Magadan&json

("0":"MAGADAN"،"1":"MAGADAN"،"2":"MAGADAN"،"3":"MAGADAN،"4":"MAGADAN"،"5":"MAGADAN،" 6":"ماگادانی"،"7":"ماگادانا"،"8":"ماگادانا"،"9":"ماگادانا"،"محدودیت":38)

Http://site/service/api.php?inflect=Magadan












Http://site/service/api.php?inflect=Rostov-on-Don&xml

<0>روستوف-آن-دون <1>روستوف-آن-دون <2>روستوف-آن-دون <3>روستوف-آن-دون <4>روستوف-آن-دون 46

برای به دست آوردن تمام صفت های جمع بی جان از کلمه "عروسی" تماس بگیرید:

Https://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN&info
گرفتن:
("0":("word":"WEDDING"، "partofspeech":"P"، "grammems":["DT"، "QUALITY"، "MN"، "NO"، "OD"])، " 1":("word":"WEDDING"، "partofspeech":"P"، "grammems":["IM"، "QUALITY"، "MN"، "BUT"، "OD"])، "2" :("word":"WEDDING"،"partofspeech":"P"،"grammems":["VN"،"KACH"،"MN"،"BUT"])، "3":("word": "WEDDING"، "partofspeech":"P"، "grammems":["QUALITY"، "MN"، "BUT"، "OD"، "RD"])، "4":("word":"WEDDING ""partofspeech":"P"،"grammems":["QUALITY"،"MN"،"BUT"،"OD"،"PR"])، "5":("word":"WEDDING" " partofspeech":"P"،"grammems":["QUALITY"، "MN"، "NO"، "OD"، "TV"]) ,"limit":19) بدون پارامتر اطلاعات:
http://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN
("0":"عروسی"،"1":"عروسی"،"2":"عروسی"، "3":"عروسی"، "4":"عروسی"،"5":"عروسی،" حد": 19)

API برای دریافت جنسیت کلمه، نام: مرد، زن

API برای دریافت جنسیت: مرد، زن با نام. با استفاده از این API می توانید جنسیت کاربر را با استفاده از نام کاربری دریافت کنید. با این کار نیازی به پر کردن فرم اضافی در حین ثبت نام نیست.



اشتراک گذاری: