Declinarea PHP după cazuri din numere. Declinarea numelui complet – Framework PHP NameCaseLib

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.

O sa spun imediat asta varianta ideala, vai, nu. 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% mântuirea. 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, al meu sfatul principal vor fi urmatoarele: 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” Adaugă ca prieten„pe pagina Ilya.

Cutie cu nisip

domnule Olimpia 16 noiembrie 2013 la ora 15:01

Declinarea numelui complet - Framework PHP NameCaseLib

  • PHP

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 rusești, 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 – notă personală

  1. Note
  2. Ordinea numelui nu contează.

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ținem un format ca: S F N, unde: - S - Nume - N - Prenume - F - Nume */ echo $fullName; ?>

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ă.

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 lua 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 238 .

plural

Rămâne în stoc

Î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 patronimicelor î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ăReturnează doar „m” (mascul) sau „f” (feminin). 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:

Valori acceptabile de caz: I, R, D, V, T, P și analogii lor scrise cu litere latine, 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 standard international

ISO 4217, cum ar fi RUB, USD, EUR etc. În acest caz, numele țării este inclus automat în numele unității monetare: 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 kazahi 45 de tiyns

Gestionarea erorilor

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, Pentru comoditatea și simplificarea procedurii de instalare, distribuția include un set de scripturi care automatizează instalarea pachetelor necesare pentru compilare, asamblare module și înregistrare a modulelor ca extensie pentru PHP. Având în vedere varietatea largă de distribuții sistem de operare

diverse opțiuni

# configurațiile și caracteristicile de construire a 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

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

Fișierul terminat va fi în directorul morpher/php/modules. 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 a le elimina

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)

O problemă foarte populară cu care se confruntă Programatori web, Aceasta 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. Vezi 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 mereu" minut„. Dacă cifra cea mai puțin semnificativă este mai mare 1 si mai putin 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 fi " minute". În 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;
$n = 21;
";
$cuvânt = getWord($n, $array);
$n = 11;
$n = 21;
";
?>

$n = 4; Declinarea cuvintelor în PHP Rulând acest script, veți vedea asta minute se întâmplă cu o bubuitură. Pot să adaug doar că pe lângă " "ar putea fi"", "zi", "oră", "Uman calculator " și toate celelalte substantive care.

declin în funcție de numeral

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

API-ul Word Declination
Parametri: 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 vorbireDescriptorExemplu
DescriereCMamă
substantivProşu
adjectivKR_APILfrumos
adjectiv scurtINFINITIVmerge
infinitivGvenire
verb personalParticipiumers pe jos
participiuCOMUNIUNEmergând
ComuniuneKR_PARTICIPLEconstruit
participiu scurtNUMĂRopt
numeral (cantitativ)NUMĂR-Pal optulea
număr ordinalDOMNIȘOARĂEl
pronume-substantivMS-PREDCnimic
pronume predicativMS-Porice
adjectiv pronominalNRece
adverbSTRĂMOŞInteresant
predicativPREFERAsub
pretextUNIUNEŞi
uniuneÎNTREAi
interjecţieFRECVENTei bine, ar fi
particulăINVODNCu siguranţă
cuvânt introductivPHRAZgolfuri zdrobite, zgi
unitate frazeologică grameme
– . Specificate separate prin "," (virgulă). Pentru a exclude înainte de gram, indicați „-” (minus)Exemplu
Grammema
GenDl
masculinzhr
femininmier
neutrudomnul-zhr
gen general (orfan, bețiv)
Numărunitati
singularpl
plural
Cazei
nominativrd
genitivdt
dativvn
acuzativtelevizor
instrumentalpr
prepoziționalăsunet
2 vocativ (tată, zeu)
al doilea genitiv sau al doilea caz prepozițional
Timpnst
timpul prezentvoinţă
timpul viitorprsh
timpul trecut
Faţă1l
persoana întâi2l
persoana a doua3l
terț
Animațieod
animaDar
neînsufleţit
VedereSf.
aspect perfectns
aspect imperfect
Tranzitivitateanp
tranziţiene
intranzitiv
Gajdst
voce activăpagină
voce pasivă
0 Alte
imuabilbezl
verb impersonalpvl
dispoziție imperativă (imperativ)atracţie
posesiv (nefolosit)prev
superlativ (pentru adjective)comparaţie
grad comparativ (pentru adjective)calitate
adjectiv calitativ
Caracteristici semanticeNume
nume (Ivan, Mihail)femeie
prenume (Ivanov, Sidorov)raport
patronimic (Ivanovici, Mihailovici)lok
toponim (Moscova, Lena, Everest)abr
abreviere (KPSS, RONO)org
organizareadverb interogativ
indicaadverb demonstrativ
argoujargon
descompunerecolocvial
arcarhaism
ASRgreșeală de tipar
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.