Сандардың Php төмендеуі. Сөздің кемуі, жынысын алу (еркек, әйелдік), регистр, регистрация және сөздің басқа сипаттамаларына арналған API

Өте танымал мәселеге тап болды Веб-бағдарламашылар, Бұл РНР тіліндегі сөздердің септелуі. Мысалы, хабардың қанша минут бұрын қалғанын көрсету керек. Сіз жай ғана сан мен сөз жаза аласыз " минут". Бірақ содан кейін ол өте біртүрлі жазылады, мысалы, " 1 минут", "2 минут" және т.б. Шын мәнінде, онсыз РНР тіліндегі сөздердің септелуіӘрине, орысша жазғың келмесе, қолыңнан келмейді.

Жаңадан бастағандар үшін мәселе өте қиын болып көрінеді, бірақ, шын мәнінде, сөздердің тұйықталуының белгілі бір заңдылығы бар. Өзіңіз қараңыз: « 1 минут, 2 минут, 5 минут, 11 минут, 19 минут, 21 минут, 22 минут, 25 минут және т.б.«Үлгі көрдіңіз бе? 1, 21, 31, 41 - әрқашан болады» минут". Ең аз мәнді сан үлкенірек болса 1-шіжәне одан аз 5 , ал санның өзі бөлінген кезде 100 қалдығы үлкенірек 20 (мысалы, сан емес 12 және жоқ 112 ), содан кейін болады " минут". Басқа жағдайларда " минут".

getWord функциясы ($сан, $суффикс) (
$keys = массив(2, 0, 1, 1, 1, 2);
$mod = $саны % 100;
$суффикс_кілт = ($mod > 7 && $mod< 20) ? 2: $keys;
қайтару $suffix[$suffix_key];
}
$массив = массив("минут", "минут", "минут"); $n = 21;

echo "$n $сөз
";
$n = 11;
$сөз = getWord($n, $массив);
echo "$n $сөз
";
$n = 4;
$сөз = getWord($n, $массив);
echo "$n $сөз
";
?>

Бұл сценарийді іске қосу арқылы сіз мұны көресіз РНР тіліндегі сөздердің септелуісоққымен болады. Мен мұны ғана қоса аламын « минут«бар болуы мүмкін» күні", "сағат", "Адам", "компьютер" және басқа барлық зат есімдер санына байланысты төмендейді.

JavaScript браузеріңізде бұғатталған. Сайт жұмыс істеуі үшін JavaScript қосыңыз!

Сөздің кемуі, жынысын алу (ер, әйел), регистр, регистр және сөздің басқа сипаттамаларына арналған API

Word Declension API

Опциялар:
әсер ету- бос орынмен бөлінген сөз немесе сөздер тізімі. Келесі опциялар бір сөз жіберілген жағдайда ғана қолжетімді.
сөз бөлігі
ДескрипторМысалСипаттама
CАназат есім
Пқызылсын есім
KR_APILәдеміқысқа сын есім
ИНФИНИТИВбаруинфинитив
Гкеле жатыржеке етістік
Жіктік жалғаужаяужіктік жалғау
ҚАТЫСТЫҚбарадыжіктік жалғау
KR_PARTICIPLEсалынғанқысқа шақ
NUMBERсегізсандық (сандық)
САН-Бсегізіншіреттік сан
ХАНЫМОлесімдік-зат есім
MS-PREDCештеңепредикативті есімдік
MS-Pкез келгенесімдік сын есім
НКереметүстеу
АРҒЫ АТАҚызықтыпредикат
АРТЫҚСЫЗастындасылтау
ОДАЖәнеодақ
АРАСЫНДАОйсөз тіркесі
ЖИІжақсы, болар едібөлшек
INVODNӘринекіріспе сөз
PHRAZақшыл шығанақтар, згифразеологиялық бірлік
граммемалар– . "," (үтір) арқылы бөлінген. Алып тастау үшін грамманың алдында «-» (минус) белгілеңіз.
ГраммемаСипаттама
Тұқым
Мырзаеркектік
жрәйелдік
Сәрбейтарап жыныс
мырза-жржалпы жыныс (жетім, маскүнем)
Сан
бірлікжалғыз сан
пкөпше түр
Іс
оларноминативті
rdтектік
дтдативтік
vnайыптауыш
теледидараспаптық
т.бпредлог
дыбысшақырушы (әке, құдай)
2 екінші тектік немесе екінші предлогтық шақ
Уақыт
стқазіргі уақыт
ерікКелешек шақ
prshөткен уақыт
Бет
бірінші адам
екінші адам
үшінші жақ
Анимация
odжандандыру
Бірақжансыз
Көру
St.тамаша көрініс
nsжетілмеген түрлер
Өтпелілік
npөту
жоқенжар
Кепіл
дстбелсенді дауыс
бетпассивті дауыс
Басқа
0 өзгермейтін
безлтұлғасыз етістік
pvlимперативті көңіл-күй (императивті)
аттракциониелік (қолданылмайтын)
алдыңғыүстемдік (сын есімдер үшін)
салыстырусалыстырмалы дәреже (сын есімдер үшін)
сапасысапалық сын есім
Семантикалық ерекшеліктері
Атыаты (Иван, Михаил)
әйелтегі (Иванов, Сидоров)
есеп беруәкесінің аты (Иванович, Михайлович)
локтопоним (Мәскеу, Лена, Эверест)
аббраббревиатура (KPSS, RONO)
orgұйымдастыру
сұрақсұраулы етістік
көрсетудемонстрациялық үстеу
жаргонжаргон
ыдырауауызекі тіл
аркаархаизм
HRHқате
ақынпоэтикалық
профкәсібилік
ақпарат– әрбір пішінді қосымша ақпараты бар массив ретінде көрсету

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

("0":"МАГАДАН","1":"МАГАДАН","2":"МАГАДАН","3":"МАГАДАН","4":"МАГАДАН","5":"МАГАДАН"," 6":"МАГАДАНА","7":"МАГАДАНА","8":"МАГАДАНА","9":"МАГАДАНА","лимит":38)

Http://site/service/api.php?inflect=Магадан












Http://site/service/api.php?inflect=Ростов-на-Дону&xml

<0>РОСТОВ-НА-ДОН <1>РОСТОВ-НА-ДОН <2>РОСТОВ-НА-ДОН <3>РОСТОВ-НА-ДОН <4>РОСТОВ-НА-ДОН 46

«Үйлену» сөзінен барлық жансыз сын есімдерді алу үшін көпшеқоңырау шалу:

Https://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN&info
Алу:
("0":("сөз":"ҮЙЛЕНУ","сөйлеу бөлігі":"P","грамммалар":["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)

Gender сөзін алуға арналған API, аты: ер, әйел

Жыныс алу үшін API: аты бойынша ер, әйел. Осы API арқылы сіз пайдаланушы атын пайдаланып пайдаланушының жынысын ала аласыз. Бұл тіркеу кезінде қосымша форманы толтыру қажеттілігін жояды.

Сәлем, Хабрахабр!

Бүгін мен шағын, бірақ өте пайдалы құрылым - NameCaseLib туралы айтатын боламын.

Менің ойымша, көптеген адамдар адамның тегін, атын және әкесінің атын жеке бас тартуға тура келетін жағдайға тап болды. Бұл шеңбер бізге көптеген «велосипедтерден» арылуға көмектеседі.

Орнату

NameCaseLib жұмыс істеуі үшін бізге PHP5 және UTF-8 пішіміндегі мәтінмен жұмыс істеу үшін php_mbstring кітапханасы қажет.

Тамаша, енді жақтаудың өзін қосу ғана қалды, ол үшін біз қажетті файлдарды жүктеп аламыз.

NameCaseLib екі тілді қолдайды: орыс және украин. NCL.NameCase.ru.php файлында ресейлік өшіру ережелері бар, сәйкесінше NCL.NameCase.ua.php украиндық. NCL қалтасында рамканың ең «өзегі», яғни негізгі функциялар жиынтығы бар.

Сонымен, .php форматында файл жасап, осы рамканың функционалдығын тексерейік.

q("Максимов Александр Васильевич"); # Алынған массивді шығарыңыз. (Ескерту: қарапайым индекстелетін массивді қайтарады) var_dump($array); ?>

Тиісінше, дәл осылай украиндық толық атауларды украиндық азайту ережелерін байланыстыру арқылы бас тарта аламыз.

Бірақ әлі де әдісте қандай параметрлер бар екенін қарастырайық q, және оны тағы қалай пайдалануға болады?

Бұл әдістің 3 параметрі бар, оның 2 параметрін өткізіп жіберуге болады. Бірінші параметр - адамның толық аты-жөні, екіншісі - жағдай (төменде тұрақтылар тізімін беремін; егер жағдай көрсетілмесе (NULL), онда әдіс барлық жағдайларды қайтарады), үшіншісі - адамның жынысы. (Тұрақтылар да төменде берілген; жынысты (NULL) көрсетпесеңіз, әдіс оны өзі анықтайды)

Тұрақтылар

Жынысты көрсету үшін тұрақтылар қолданылады:
  • NCL::$MAN – еркек жынысы
  • NCL::$ӘЙЕЛ – әйел

Орыс тілінің жағдайларын көрсету үшін:

  • NCL::$IMENITLN – номинативті жағдай
  • NCL::$RODITLN – генитивтік жағдай
  • NCL::$DATELN – нақты жағдай
  • NCL::$VINITELN – айыптауыш
  • NCL::$TVORITELN - аспаптық корпус
  • NCL::$PREDLOGN – предлогтық шақ

Жағдайларды көрсету үшін украин тілі:

  • NCL::$UaNazyvnyi – тақтайша
  • NCL::$UaRodovyi – жалпы көрініс
  • NCL::$UaDavalnyi – ұзақ мерзімді әкімші
  • NCL::$УаЗнахидный – әйгілі бейне
  • NCL::$UaOrudnyi – қаруды көрсету
  • NCL::$UaMiszevyi – miscevyi vidminok
  • NCL::$UaKlychny – жеке жазба

Ескертпелер

  1. Атаудың реті маңызды емес.
  2. Қай жағдайда толық атау көрсетілгені маңызды емес, азайтудан кейін әдіс әріптердің сақталған регистрін қайтарады.

Толық есімнің бөлігінің анықтамасы

getFullNameFormat әдісін қолдану арқылы біз толық аттың бөлігін немесе қандай бөліктерін қолданып жатқанымызды анықтай аламыз.

getFullNameFormat("Максимов Александр Васильевич"); /* Біз келесі пішімді аламыз: S F N, мұнда: - S - Фамилия - N - Аты - F - Әкесінің аты */ echo $fullName; ?>

Бірақ жүйе таңдаған атыңыздан бас тарту жолын дұрыс анықтай алмаса, не істеу керек?

Осы мақсатта кітапхана qFullName әдісін ұсынады, ол белгілі бір ретпен адамның тегін, атын, әкесінің атын және жынысын көрсетуге мүмкіндік береді.

qFullName("Максимов", "Александр", "Васильевич", NCL::$MAN, NCL::$TVORITELN, "S N F")."\n"; ?>

Нәтижелер

NameCaseLib - көптеген пайдалы мүмкіндіктерді қамтитын шын мәнінде пайдаланушыға ыңғайлы құрылым. Сайтта орыс тілінде толық құжаттама бар.

morpher.so модулі орыс және украин тілдеріндегі сөздер мен сөз тіркестерінің – тегі, аты және әкесінің аты, қалалар мен тауарлардың атаулары – регистрлерді азайтуға арналған.

Жағдайлар бойынша азайту функциясы

Бір миллион доллар кетедібастапНабережные Челны" , " таяқ " ); ?> !

Нәтижесінде біз аламыз:

Бір миллион доллар Набережные Челныдан келген Василий Пупкинге беріледі!

morpher_inflect функциясы номинативті жағдайда (бірінші аргумент) кез келген регистрге (екінші аргумент) фразаны қосады. Іс келесі мағыналарды қабылдауы мүмкін:

Кітапханаға жіберілген барлық жолдар UTF-8 кодтауында болуы керек. Нәтиже UTF-8 ішінде де қайтарылады.

Украин тіліне сәйкес функция morpher_ukr_inflect деп аталады. Әзірге ол тек тегімен, атымен және әкесінің атымен жұмыс істейді және орыс тілінен істер атауларымен ерекшеленеді:

Көпше түрге аудару украин тіліндегі нұсқада әлі жүзеге асырылған жоқ.

Атауды құрамдас бөліктерге бөлу қызметі

morpher_split_fio функциясы енгізу жолын тегі, аты, әкесінің аты массивіне бөледі

F: Асқабақ I: Василий О:

Көпшелеу функциясы

Екінші параметрге «mn» жолын қоссаңыз, нәтиже көпше түрде болады:

Қоймада қалды 238 .

Қоймада 238 покер қалды.

Бірінші параметр әлдеқашан көпше болса, келесі қайтарылады:

#ERROR: 1-параметр "мәтін" көпше.

Түрді анықтау функциясы

" y " , " f " => " y " , " n " => " oh " , " p " => " y " ); $name = "сарапшылар"; $rod = morpher_get_gender ($name); echo "Біз сізді құрметтейміз". $аяқтары [ $rod ] . « . $атауы. " !\n " ; ?>

Украин тіліндегі тегінің, атының және әкесінің атының жынысын анықтау үшін morpher_ukr_get_gender функциясын пайдаланыңыз. Ол тек «m» (ер) немесе «f» (әйел) қайтарады.

Сандар мен ақшалай сомаларды жазу қызметі

morpher_spell функциясы санды жасайды және берілген өлшем бірлігін қажетті жағдайда қояды:

күнтізбелік күн" ); // 28 (жиырма сегіз) күнтізбелік күн morpher_spell("1,2", "пайыз"); // 1,2 (бір ұпай екі) пайыз morpher_spell(2, "күн"); // 2 (Екі) күн ?>

Егер мәтінге белгілі бір жағдайда сөздерді енгізу қажет болса, регистрді үшінші параметр ретінде көрсетіңіз:

кезіндекүнтізбелік күн" , " 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, " грн " ); // Жүз жиырма үш грн. 45 тиын?>

Немесе RUB, USD, EUR және т.б. сияқты ISO 4217 халықаралық стандартының үш әріпті валюта кодтары. Бұл жағдайда атау ақша бірлігіЕл атауы автоматты түрде қосылады:

Жүз жиырма үш орыс рублі 45 тиын morpher_spell(123,45, "грн"); // Жүз жиырма үш украин гривені 45 копеек morpher_spell(123,45, "теңге"); // Жүз жиырма үш қазақ теңгесі 45 тиын?>

Өңдеу қатесі

Қате орын алса, барлық кітапхана функциялары "#ERROR: " деп басталатын жолды қайтарады.

#ҚАТЕ: 1-параметр "мәтін" бос болмауы керек.
#ҚАТЕ: 2-параметр "регистр" бос болмауы керек.
#ҚАТЕ: 1-параметр "мәтін" орысша емес.
#ERROR: 2-параметр "жағдай" жарамсыз.
#ERROR: 1-параметр "мәтін" көпше.

Пайдаланушының бұл хабарларды көруін қаламасаңыз, "#ERROR:" бастапқы ішкі жолын тексеріңіз.

morpher_inflect функциясы 2 параметрді, ал morpher_get_gender бір параметрді күтеді. Параметрлердің қате санымен шақырылған жағдайда, PHP интерпретаторы ескерту береді және бағдарламаны орындауды жалғастырады.

Модульді Linux жүйесінде орнату

1.3.0 нұсқасынан бастап біз мұрағатта оралған алдын ала құрастырылған morpher.so файлдары түрінде PHP Linux нұсқасына арналған модульді ұсынамыз. Бұл файлдар келесі Linux дистрибутивтерінде пайдалануға жарамды:

  • Debian (Джесси, Стретч, Уизи);
  • Ubuntu (Trusty, Xenial, Cosmic, Bionic);
  • CentOS 7.

Тарату үшін morpher.so алу үшін бізге хат жазсаңыз болды, мұрағаттан morpher.so және PHP кеңейтімі ретінде morpher.so шығарып алыңыз. Дегенмен, мұндай модульдің сіздің жүйеңізбен екілік үйлесімділігіне кепілдік берілмейді, өйткені біз модульді тек әдепкі параметрлері бар «таза» жүйелерде және жүйелік пакет менеджері ұсынатын PHP нұсқасымен құрастырамыз. Егер модуль үйлесімсіз болса, PHP оны кеңейтім ретінде жүктей алмайды. Дайын модуль файлдарының ешқайсысы сіздің жүйеңізге сәйкес келмесе, модульді берілген бастапқы кодтан құрастыру керек.

Модульдерді құрастыру процедурасын ыңғайлы ету және жеңілдету үшін тарату жинағы компиляцияға, модульді құрастыруға және PHP кеңейтімі ретінде модульді тіркеуге қажетті пакеттерді орнатуды автоматтандыратын сценарийлер жиынтығын қамтиды. Операциялық жүйе дистрибутивтерінің алуан түрлілігін, әртүрлі конфигурация опцияларын және PHP кеңейтімдерін құру мүмкіндіктерін ескере отырып, кейбір жағдайларда модульді орнату кезінде құрастыру сценарийлерімен орындалмайтын қосымша әрекеттер қажет болуы мүмкін екенін түсінуіңіз керек.

Процедураны бастау үшін автоматты орнатутаратуды кез келген каталогқа ашыңыз, мысалы, morpher:

# mkdir морфері # CD морфері # tar xf ../morpher.tar # CD php

Құрастыру сценарийін пәрменмен іске қосыңыз:

# bash build.sh

Сәтті болса, morpher.so модуль файлы құрастырылады және php кеңейтімдері каталогына жылжытылады. Модуль php конфигурациясында тіркеледі және модульдің функционалдығы тест арқылы автоматты түрде тексеріледі. Құрастыру сценарийінің мәтіндік шығысында сынақтың сәтті өткенін көрсететін хабарлама болуы керек:

Тесттер орындалуда... ... орындалды.

Модуль пайдалануға дайын. Каталогты енді жоюға болады:

# rm -r морфер

Құрастыруда қиындықтар туындаса, жүйеде барлық қажетті бумалардың орнатылғанына және конфигурацияланғанына көз жеткізу керек. Модульді құрастыру және пайдалану үшін мыналарды орнату керек:

Пәрмен арқылы қосымша әрекеттерсіз модульді құруды бастауға болады:

# bash compile.sh

Сәтті компиляциядан кейін morpher.so файлы morpher/php/modules каталогында орналасады.

Morpher.so файлын 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-де атауларды инфлекттеу. деген сөзбен келісесіз. Дос ретінде қосу Илья«әлдеқайда нашар естіледі» Ильяны дос ретінде қосыңыз«. Сондықтан РНР тілінде атауларды регистр бойынша азайтуБұл өте жиі талап етіледі және осы мақалада мен мұны сіздің веб-сайтыңызға қалай енгізуге болатынын айтамын.

Мен бірден айтамын, өкінішке орай, идеалды нұсқа жоқ. Бірінші нұсқа өте айқын: барлық жағдайда болатын атаулардың дерекқорын табыңыз және осы кестені өзіңізге қосыңыз. Содан кейін номинативті жағдайда аты бойынша дерекқордан сәйкес істі іздеңіз. Бұл жерде кемшіліктер анық: үлкен дерекқор, барлық атауларды қамту мүмкін емес, серверге қосымша жүктеме.

Екінші нұсқа - өз бетінше жазу PHP тіліндегі атауларды азайту класы, немесе дайынды пайдаланыңыз. Орыс тіліндегі ережелер өте күрделі болғандықтан, көптеген ерекшеліктер бар, сондықтан өте үлкен кітапхана қажет болады, тіпті бұл алыс. 100% құтқару. Барлық кітапханалардың ішіндегі ең танымалы РНР тіліндегі атауларды азайту, бұл NameCaseLib.

Бұл кітапхананы жүктеп алып, оны веб-сайтыңызға орналастырғаннан кейін оны келесідей пайдалануға болады:

Бір рет талап ету "NCL.NameCase.ru.php"; // Орыс кітапханасын қосыңыз
$case = new NCLNameCaseRu(); // NCLNameCaseRu сыныбының нысанын жасаңыз
$array = $case->q("Русаков Михаил Юрьевич"); // Біз енгізу жолы пайда болатын 6 жағдайға сәйкес 6 элементтен тұратын массив аламыз
print_r($массив); // Жиымды шығару
?>

Көріп отырғаныңыздай, кітапхананы пайдалану өте қарапайым. Екінші жағынан, менің негізгі кеңесім мынау: Мүмкін болса, сөздерді мүлде бұрмалау қажеттілігінен аулақ болыңыз.. Дегенмен, кейде адамдар ешбір жолмен бейім болмайтын нәрсені енгізеді және оны итермелеу әрекеті күлкілі болып көрінеді. Жазудың қажеті жоқ» Ильяны дос ретінде қосыңыз«Оны қарапайым жазуға болады» Достарға қосу«Ильяның парақшасында.