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:
$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:01Declinarea 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.
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Метод q - склоняет Фамилию, Имя и Отчество человека по правилам пола. $array = $case->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ă
- Note
- 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
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Метод getFullNameFormat - разбивает строку и возвращает формат, в котором записано имя. $fullName = $case->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; ?>
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Параметры метода: qFullName(Фамилия, Имя, Отчество, пол, падеж, формат); Все параметры являются необязательными, если, например, не указать пол - система сама определит его. echo $nc->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 morphertar xf ../morpher.tar
# cd phpDacă 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 morpherDacă 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.shFiș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.shsau 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 DeclinationParametri: 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 | Descriptor | Exemplu |
---|---|---|
Descriere | C | Mamă |
substantiv | P | roşu |
adjectiv | KR_APIL | frumos |
adjectiv scurt | INFINITIV | merge |
infinitiv | G | venire |
verb personal | Participiu | mers pe jos |
participiu | COMUNIUNE | mergând |
Comuniune | KR_PARTICIPLE | construit |
participiu scurt | NUMĂR | opt |
numeral (cantitativ) | NUMĂR-P | al optulea |
număr ordinal | DOMNIȘOARĂ | El |
pronume-substantiv | MS-PREDC | nimic |
pronume predicativ | MS-P | orice |
adjectiv pronominal | N | Rece |
adverb | STRĂMOŞ | Interesant |
predicativ | PREFERA | sub |
pretext | UNIUNE | Şi |
uniune | ÎNTRE | Ai |
interjecţie | FRECVENT | ei bine, ar fi |
particulă | INVODN | Cu siguranţă |
cuvânt introductiv | PHRAZ | golfuri zdrobite, zgi |
– . Specificate separate prin "," (virgulă). Pentru a exclude înainte de gram, indicați „-” (minus) | Exemplu | |
---|---|---|
Grammema | ||
Gen | Dl | |
masculin | zhr | |
feminin | mier | |
neutru | domnul-zhr | |
gen general (orfan, bețiv) | ||
Număr | unitati | |
singular | pl | |
plural | ||
Caz | ei | |
nominativ | rd | |
genitiv | dt | |
dativ | vn | |
acuzativ | televizor | |
instrumental | pr | |
prepozițională | sunet | |
2 | vocativ (tată, zeu) | |
al doilea genitiv sau al doilea caz prepozițional | ||
Timp | nst | |
timpul prezent | voinţă | |
timpul viitor | prsh | |
timpul trecut | ||
Faţă | 1l | |
persoana întâi | 2l | |
persoana a doua | 3l | |
terț | ||
Animație | od | |
anima | Dar | |
neînsufleţit | ||
Vedere | Sf. | |
aspect perfect | ns | |
aspect imperfect | ||
Tranzitivitatea | np | |
tranziţie | ne | |
intranzitiv | ||
Gaj | dst | |
voce activă | pagină | |
voce pasivă | ||
0 | Alte | |
imuabil | bezl | |
verb impersonal | pvl | |
dispoziție imperativă (imperativ) | atracţie | |
posesiv (nefolosit) | prev | |
superlativ (pentru adjective) | comparaţie | |
grad comparativ (pentru adjective) | calitate | |
adjectiv calitativ | ||
Caracteristici semantice | Nume | |
nume (Ivan, Mihail) | femeie | |
prenume (Ivanov, Sidorov) | raport | |
patronimic (Ivanovici, Mihailovici) | lok | |
toponim (Moscova, Lena, Everest) | abr | |
abreviere (KPSS, RONO) | org | |
organizare | adverb interogativ | |
indica | adverb demonstrativ | |
argou | jargon | |
descompunere | colocvial | |
arc | arhaism | |
ASR | greșeală de tipar | |
poet | poetic | |
prof | profesionalism |
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
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.