Declinarea în cazul genitiv php. API pentru declinarea cuvintelor, obținerea genului (masculin, feminin), caz, declinare și alte caracteristici ale unui cuvânt. API pentru obținerea cuvântului gen, nume: bărbat, femeie

Există adesea o nevoie flexează numele în PHP. Sunt de acord că expresia „ Adaugă ca prieten Ilya"suna mult mai rau decat" Adaugă Ilya ca prieten". De aceea Declinarea numelor după majuscule în PHP Acest lucru este necesar destul de des și în acest articol vă voi spune cum puteți implementa acest lucru pe site-ul dvs.

Voi spune imediat că, din păcate, nu există o opțiune ideală. Prima opțiune este foarte evidentă: găsiți o bază de date cu nume care va fi în toate cazurile și adăugați acest tabel la al tău. Apoi, după nume în cazul nominativ, căutați cazul corespunzător în baza de date. Dezavantajele aici sunt evidente: bază de date uriașă, nu poate acoperi toate numele, încărcare suplimentară pe server.

A doua opțiune este să-ți scrii propriul tău clasă de declinări de nume în PHP, sau folosiți unul gata făcut. Deoarece regulile în limba rusă sunt destul de complexe, plus există o mulțime de excepții, de aceea va fi necesară o bibliotecă foarte mare și chiar și aceasta este departe de a fi 100% salvarea. Cea mai populară dintre toate bibliotecile cu care se ocupă Declinarea numelor în PHP, este NameCaseLib .

După ce descărcați această bibliotecă și o plasați pe site-ul dvs. web, o puteți utiliza astfel:

Require_once "NCL.NameCase.ru.php"; // Conectați biblioteca rusă
$caz = nou NCLNameCaseRu(); // Creați un obiect din clasa NCLNameCaseRu
$matrice = $caz->q(„Rusakov Mihail Iurievici”); // Obținem o matrice de 6 elemente corespunzătoare a 6 cazuri în care va apărea șirul de intrare
print_r($array); // Se scoate matricea
?>

După cum puteți vedea, utilizarea bibliotecii este foarte simplă. Pe de altă parte, sfatul meu principal ar fi acesta: Dacă este posibil, evitați nevoia de a flexiona cu totul cuvintele.. Totuși, uneori oamenii vor introduce ceva care nu poate fi înclinat în niciun fel, iar încercările de a-l induce vor părea ridicol. Nu este necesar sa scrii " Adaugă Ilya ca prieten„Se poate scrie simplu” Adauga ca prieten„pe pagina Ilya.

Bună, Habrahabr!

Astăzi voi vorbi despre un cadru mic, dar foarte util - NameCaseLib.

Cred că mulți s-au confruntat cu o situație în care a fost necesar să refuze numele de familie, prenumele și patronimul unei persoane în funcție de caz. Acest cadru ne va ajuta să scăpăm de numeroase „biciclete”.

Instalare

Pentru ca NameCaseLib să funcționeze, avem nevoie de PHP5 și biblioteca php_mbstring pentru a lucra cu text în format UTF-8.

Grozav, acum tot ce rămâne este să conectați cadrul în sine, pentru aceasta vom descărca fișierele necesare.

NameCaseLib acceptă două limbi: rusă și ucraineană. Fișierul NCL.NameCase.ru.php conține reguli de declinare rusă, respectiv NCL.NameCase.ua.php, cele ucrainene. Dosarul NCL conține chiar „nucleul” cadrului, adică un set de funcții de bază.

Deci, să creăm un fișier în format .php și să verificăm funcționalitatea acestui cadru.

q(„Maksimov Alexander Vasilievich”); # Ieșiți matricea rezultată. (Notă: returnează o matrice indexabilă simplă) var_dump($array); ?>

În consecință, în același mod, putem refuza numele complete ucrainene conectând regulile de declinare ucrainene.

Dar să ne uităm în continuare la ce parametri conține metoda q, și cum altfel poate fi folosit?

Această metodă are 3 parametri, dintre care 2 pot fi omise. Primul parametru este numele complet al persoanei, al doilea este cazul (voi oferi o listă de constante mai jos; dacă cazul nu este specificat (NULL), atunci metoda returnează toate cazurile), iar al treilea este sexul persoanei. (Constantele sunt, de asemenea, date mai jos; dacă nu specificați genul (NULL), metoda îl va determina ea însăși)

constante

Pentru a indica sexul, se folosesc constante:
  • NCL::$MAN – gen masculin
  • NCL::$FEMEIE – feminin

Pentru a indica cazurile limbii ruse:

  • NCL::$IMENITLN - caz nominativ
  • NCL::$RODITLN - caz genitiv
  • NCL::$DATELN - caz dativ
  • NCL::$VINITELN - caz acuzativ
  • NCL::$TVORITELN - caz instrumental
  • NCL::$PREDLOGN - caz prepozițional

Pentru a indica cazurile limbii ucrainene:

  • NCL::$UaNazyvnyi – plăcuță de identificare
  • NCL::$UaRodovyi – vedere generică
  • NCL::$UaDavalnyi – admin pe termen lung
  • NCL::$UaZnahidnyi – videoclip celebru
  • NCL::$UaOrudnyi – afișaj de arme
  • NCL::$UaMiszevyi – miscevyi vidminok
  • NCL::$UaKlychnyi – recunoaștere personală

Note

  1. Ordinea numelui nu contează.
  2. Nu contează în ce caz este indicat numele complet, după declinare, metoda returnează majusculele salvate.

Definiția part of full name

Folosind metoda getFullNameFormat, putem determina partea sau ce părți ale numelui complet folosim.

getFullNameFormat("Maksimov Alexander Vasilievich"); /* Obține un format ca: S F N, unde: - S - Nume - N - Prenume - F - Nume */ echo $fullName; ?>

Dar ce ar trebui să faceți dacă cadrul încă nu poate determina corect cum să refuzați numele ales?

În acest scop, biblioteca oferă metoda qFullName, care vă permite să specificați numele de familie, prenumele, patronimul și sexul unei persoane într-o anumită secvență.

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

Rezultate

NameCaseLib este un cadru cu adevărat ușor de utilizat, care include multe caracteristici utile. Site-ul are documentație completă în limba rusă.

JavaScript este blocat în browserul dvs. Vă rugăm să activați JavaScript pentru ca site-ul să funcționeze!

API pentru declinarea cuvintelor, obținerea genului (masculin, feminin), caz, declinare și alte caracteristici ale unui cuvânt

Word Declination API

Opțiuni:
refracta- un cuvânt sau o listă de cuvinte separate printr-un spațiu. Următoarele opțiuni sunt disponibile numai dacă este transmis un cuvânt.
parte de vorbire
DescriptorExempluDescriere
CMamăsubstantiv
Proșuadjectiv
KR_APILfrumoasaadjectiv scurt
INFINITIVmergeinfinitiv
Gvenireverb personal
Participiumers pe josparticipiu
PARTICIPIUmergândparticipiu
KR_PARTICIPLEconstruitparticipiu scurt
NUMĂRoptnumeral (cantitativ)
NUMĂR-PAl optuleaNumar ordinal
DOMNIȘOARĂElpronume-substantiv
MS-PREDCnimicpronume predicativ
MS-Poriceadjectiv pronominal
NMistoadverb
STRĂMOŞInteresantpredicat
PREFERAsubpretext
UNIUNEȘiuniune
ÎNTREAiinterjecţie
FRECVENTbine, ar fiparticulă
INVODNCu siguranțăcuvânt introductiv
PHRAZgolfuri zdrobite, zgiunitate frazeologică
grameme– . Specificate separate prin "," (virgulă). Pentru a exclude, indicați „-” (minus) înaintea gramului.
GrammemaDescriere
Gen
Domnulmasculin
zhrfeminin
miergen neutru
domnul-zhrgen general (orfan, bețiv)
Număr
unitatisingular
plplural
Caz
lornominativ
rdgenitiv
dtdativ
vnacuzativ
televizorinstrumental
etcprepozițională
sunetvocativ (tată, zeu)
2 al doilea genitiv sau al doilea caz prepozițional
Timp
nsttimp prezent
voiTimpul viitor
prshtimpul trecut
Față
1lprima persoana
2la doua persoană
3lterț
Animație
odanima
Darneînsufleţit
Vedere
Sf.priveliște perfectă
nsspecie imperfectă
Tranzitivitatea
nptranziție
neintranzitiv
Angajament
dstvoce activă
paginăvoce pasivă
Alte
0 imuabil
bezlverb impersonal
pvldispoziție imperativă (imperativ)
atracţieposesiv (nefolosit)
prevsuperlativ (pentru adjective)
comparaţiegrad comparativ (pentru adjective)
calitateadjectiv calitativ
Caracteristici semantice
Numenume (Ivan, Mihail)
femeieprenume (Ivanov, Sidorov)
raportpatronimic (Ivanovici, Mihailovici)
loktoponim (Moscova, Lena, Everest)
abrabreviere (KPSS, RONO)
orgorganizare
întrebareadverb interogativ
indicaadverb demonstrativ
argoujargon
descompunerecolocvial
arcarhaism
ASRgreșeală de scriere
poetpoetic
profprofesionalism
info– afișați fiecare formular ca o matrice cu informații suplimentare

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

("0":"MAGADAN","1":"MAGADAN","2":"MAGADAN","3":"MAGADAN","4":"MAGADAN","5":"MAGADAN"," 6":"MAGADANY","7":"MAGADANA","8":"MAGADANA","9":"MAGADANA","limit":38)

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












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

<0>ROSTOV-PE-DON <1>ROSTOV-PE-DON <2>ROSTOV-PE-DON <3>ROSTOV-PE-DON <4>ROSTOV-PE-DON 46

Pentru a obține toate adjectivele neînsuflețite la plural din cuvântul „nunță” apelați:

Https://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN&info
Obține:
("0":("cuvânt":"NUNTĂ","partofspeech":"P","grammeme":["DT","CALITATE","MN","NU","OD"]), " 1":("cuvânt":"NUNTĂ","partofspeech":"P","grammeme":["IM","CALITATE","MN","DAR","OD"]), "2" :("cuvânt":"NUNTĂ","partofspeech":"P","grammeme":["VN","KACH","MN","DAR"]), "3":("cuvânt": "NUNTA","partofspeech":"P","grammeme":["CALITATE","MN","DAR","OD","RD"]), "4":("word":"NUNTA ","partofspeech":"P","grammeme":["CALITATE","MN","DAR","OD","PR"]), "5":("cuvânt":"NUNTĂ" " partofspeech":"P","grammems":["QUALITY","MN","NO","OD","TV"]) ,,"limit":19) Fără parametrul info:
http://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN
("0":"NUNTA","1":"NUNTA","2":"NUNTA","3":"NUNTA", "4":"NUNTA","5":"NUNTA"," limită":19)

API pentru obținerea cuvântului gen, nume: bărbat, femeie

API pentru obținerea sexului: bărbat, femeie după nume. Folosind acest API, puteți obține sexul utilizatorului folosind numele de utilizator. Acest lucru va elimina necesitatea de a completa un formular suplimentar în timpul înregistrării.

O problemă foarte populară cu care se confruntă Programatori web, Acest Declinarea cuvintelor în PHP. De exemplu, trebuie să afișați cu câte minute în urmă a fost lăsat un mesaj. Puteți scrie pur și simplu un număr și un cuvânt " minute". Dar atunci va fi scris foarte ciudat, de exemplu, " 1 minut", "2 minute" și așa mai departe. De fapt, fără Declinarea cuvintelor în PHP Nu o poți face decât dacă, desigur, vrei să scrii în rusă.

Problema va părea foarte dificilă pentru începători, dar, de fapt, există un anumit tipar pentru declinarea cuvintelor. Convinge-te singur: " 1 minut, 2 minute, 5 minute, 11 minute, 19 minute, 21 minute, 22 minute, 25 minute și așa mai departe„Vezi un model? 1, 21, 31, 41 - va fi tot timpul " minut„. Dacă cifra cea mai puțin semnificativă este mai mare 1și mai puțin 5 , în timp ce numărul însuși atunci când este împărțit la 100 are un rest mai mare 20 (adică, de exemplu, nu un număr 12 si nu 112 ), atunci va exista " minute". In alte cazuri " minute".

funcția getWord($număr, $sufix) (
$keys = array(2, 0, 1, 1, 1, 2);
$mod = $numar % 100;
$sufix_key = ($mod > 7 && $mod< 20) ? 2: $keys;
returnează $sufix[$suffix_key];
}
$array = array("minut", "minute", "minute"); $n = 21;

echo „$n $cuvânt
";
$n = 11;
$cuvânt = getWord($n, $array);
echo „$n $cuvânt
";
$n = 4;
$cuvânt = getWord($n, $array);
echo „$n $cuvânt
";
?>

Rulând acest script, veți vedea asta Declinarea cuvintelor în PHP se întâmplă cu o bubuitură. Pot să adaug doar că pe lângă " minute"ar putea fi acolo" zi", "ora", "Uman", "calculator" și toate celelalte substantive care declin în funcție de numeral.

Modulul morpher.so este conceput pentru declinarea în caz de caz a cuvintelor și expresiilor - nume de familie, prenume și patronimice, nume de orașe și bunuri - în rusă și ucraineană.

Funcția de declinare pe cazuri

Un milion de dolari merge ladinNaberezhnye Chelny" , " tija " ); ?> !

Ca rezultat obținem:

Un milion de dolari merge lui Vasily Pupkin din Naberezhnye Chelny!

Funcția morpher_inflect flexează o frază în cazul nominativ (primul argument) în orice caz (al doilea argument). Cazul poate avea următoarele semnificații:

Toate șirurile transmise bibliotecii trebuie să fie în codificare UTF-8. Rezultatul este returnat și în UTF-8.

Funcția corespunzătoare pentru limba ucraineană se numește morpher_ukr_inflect. Până acum funcționează numai cu nume de familie, prenume și patronimice și diferă de rusă în numele cazurilor:

Traducerea la plural nu a fost încă implementată în versiunea ucraineană.

Funcția de împărțire a unui nume în componente

Funcția morpher_split_fio împarte șirul de intrare într-o matrice de nume de familie, prenume, al doilea nume

F: Dovleacul I: Vasily O:

Funcția de pluralizare

Dacă adăugați șirul „mn” la al doilea parametru, rezultatul va fi la plural:

Rămâne în stoc 238 .

În depozit au rămas 238 de poker.

Dacă primul parametru este deja plural, atunci vor fi returnate următoarele:

#EROARE: Parametrul 1 „text” este plural.

Funcția de determinare a genului

" y " , " f " => " y " , " n " => " oh " , " p " => " y " ); $name = „experți”; $rod = morpher_get_gender ($nume); ecou „Respect”. $desineri [ $rod ] . " " . $nume . " !\n " ; ?>

Pentru a determina genul numelor de familie, prenumelor și patronimilor în ucraineană, utilizați funcția morpher_ukr_get_gender. Returnează doar „m” (mascul) sau „f” (feminin).

Funcția de a scrie numere și sume bănești

Funcția morpher_spell formează ortografia numărului și pune unitatea de măsură dată în cazul dorit:

zi calendaristică" ); // 28 (douăzeci și opt) de zile calendaristice morpher_spell("1.2", "procent"); // 1,2 (un virgulă doi) la sută morpher_spell(2, „zi”); // 2 (două) zile ?>

Dacă trebuie să inserați cuvinte în text într-un anumit caz, specificați majusculele ca al treilea parametru:

Pe parcursulzi calendaristică" , " R " ); ?> .

Ca rezultat, obținem „În termen de 28 (douăzeci și opt) de zile calendaristice”.

Valori acceptabile de caz: I, R, D, V, T, P și analogii lor scrisi în latină, vezi. Formele de prepoziție (predl-o și gde) nu sunt acceptate în această funcție.

Pentru numele unor unități monetare, funcția morpher_spell produce o scriere ca aceasta:

O sută douăzeci și trei de ruble 45 de copeici morpher_spell(123.45, "USD"); // O sută douăzeci și trei de dolari SUA 45 de cenți morpher_spell(123,45, „euro”); // O sută douăzeci și trei de euro 45 de cenți?>

Dacă doriți, puteți utiliza nume abreviate ale unităților monetare, cu sau fără punct:

O sută douăzeci și trei de ruble. 45 de copeici morpher_spell(123.45, "$"); // O sută douăzeci și trei de dolari SUA 45 de cenți morpher_spell (123.45, " UAH " ); // O sută douăzeci și trei de UAH. 45 de copeici?>

Sau coduri valutare din trei litere ale standardului internațional ISO 4217, cum ar fi RUB, USD, EUR etc. În acest caz, numele țării este inclus automat în numele monedei:

O sută douăzeci și trei de ruble rusești 45 de copeici morpher_spell(123.45, "UAH"); // O sută douăzeci și trei de grivne ucrainene 45 de copeici morpher_spell(123.45, "KZT"); // O sută douăzeci și trei de tenge kazah 45 de tiyns?>

Eroare la procesare

Dacă apare o eroare, toate funcțiile bibliotecii returnează o linie care începe cu „#ERROR:” .

#EROARE: Parametrul 1 „text” nu trebuie să fie gol.
#EROARE: Parametrul 2 „caz” nu trebuie să fie gol.
#EROARE: Parametrul 1 „text” nu este rus.
#EROARE: Parametrul 2 „caz” este nevalid.
#EROARE: Parametrul 1 „text” este plural.

Dacă nu doriți ca utilizatorul să vadă aceste mesaje, verificați subșirul inițial „#ERROR:” .

Funcția morpher_inflect așteaptă 2 parametri, iar morpher_get_gender - unul. Dacă este apelat cu un număr greșit de parametri, interpretul PHP emite un avertisment și continuă să execute programul.

Instalarea modulului pe Linux

Începând cu versiunea 1.3.0, oferim modulul pentru versiunea Linux a PHP sub formă de fișiere morpher.so precompilate, ambalate într-o arhivă. Aceste fișiere sunt potrivite pentru utilizarea pe următoarele distribuții Linux:

  • Debian (Jessie, Stretch, Wheezy);
  • Ubuntu (Trusty, Xenial, Cosmic, Bionic);
  • CentOS 7.

Tot ce trebuie să faceți este să ne scrieți pentru a obține morpher.so pentru distribuția dvs., extrageți morpher.so din arhivă și morpher.so ca extensie PHP. Cu toate acestea, compatibilitatea binară a unui astfel de modul cu sistemul dumneavoastră nu este garantată, deoarece construim modulul doar pe sisteme „curate” cu setări implicite și cu versiunea PHP pe care o oferă managerul de pachete de sistem. Dacă un modul este incompatibil, atunci PHP nu îl va putea încărca ca extensie. Dacă niciunul dintre fișierele de modul gata făcute nu este potrivit pentru sistemul dvs., atunci trebuie să construiți modulul din codul sursă furnizat.

Pentru comoditatea și simplificarea procedurii de asamblare a modulelor, kitul de distribuție include un set de scripturi care automatizează instalarea pachetelor necesare pentru compilare, asamblare și înregistrare a modulelor ca extensie pentru PHP. Având în vedere varietatea largă de distribuții ale sistemelor de operare, diverse opțiuni de configurare și caracteristici ale asamblarii extensiilor pentru php, trebuie să înțelegeți că, în unele cazuri, la instalarea unui modul, poate fi nevoie de acțiuni suplimentare care nu sunt implementate de scripturile de asamblare.

Pentru a începe procedura de instalare automată, despachetați distribuția în orice director, de exemplu, morpher:

# mkdir morpher # cd morpher # tar xf ../morpher.tar # cd php

Rulați scriptul de compilare cu comanda:

# bash build.sh

Dacă are succes, fișierul modulului morpher.so va fi compilat și mutat în directorul de extensii php. Modulul va fi înregistrat în configurația php, iar funcționalitatea modulului va fi verificată automat cu ajutorul unui test. Ieșirea text a scriptului de asamblare ar trebui să conțină un mesaj care indică testarea reușită:

Executarea testelor... ... gata.

Modulul dvs. este gata de utilizare. Directorul poate fi acum șters:

# rm -r morpher

Dacă aveți probleme cu build-ul, trebuie să vă asigurați că toate pachetele necesare sunt instalate și configurate pe sistemul dumneavoastră. Pentru a asambla și a utiliza modulul trebuie să instalați:

Puteți începe doar să construiți modulul fără acțiuni suplimentare cu comanda:

# bash compile.sh

După compilarea cu succes, fișierul morpher.so va fi localizat în directorul morpher/php/modules.

Fișierul morpher.so trebuie să fie plasat în directorul de extensii PHP, de exemplu:

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

Directorul de extensii poate fi diferit pe sistemul dvs.

# bash setup.sh

sau specificați singur numele extensiei în fișierul php.ini. Puteți verifica funcționalitatea extensiei rulând manual un script PHP de testare din linia de comandă:

# php -f test.php Executarea testelor... ... gata.

Posibile erori în timpul asamblarii și modalități de eliminare

Eroare: /usr/bin/ld: nu poate găsi -lm

Motiv: Nu aveți instalat pachetul glibc-static.

Eroare: .../include/php/php_config.h:2526:30: eroare: apelul „isnan(double&)” supraîncărcat este ambiguu. (numărul liniei poate diferi în funcție de versiunea și configurația dvs. PHP)