Deklinacija punog imena - NameCaseLib PHP Framework. Deklinacija riječi u PHP-u Deklinacija u genitiv php

Često postoji potreba mijenjati imena u PHP-u. Složite se da izraz " Dodaj kao prijatelja Ilya"zvuči puno gore od" Dodaj Ilyu kao prijatelja". Zato Deklinacija imena po padežima u PHP-u To je vrlo često potrebno, au ovom članku ću vam reći kako to možete implementirati na svoju web stranicu.

Odmah ću reći da, nažalost, ne postoji idealna opcija. Prva je opcija vrlo očita: pronađite bazu podataka imena koja će biti u svim padežima i dodajte ovu tablicu svojoj. Zatim po imenu u nominativu potražite odgovarajući padež u bazi podataka. Nedostaci su ovdje očiti: ogromna baza podataka, ne može pokriti sva imena, dodatno opterećenje na poslužitelju.

Druga opcija je da napišete svoje klasa deklinacije imena u PHP-u, ili koristite gotovu. Budući da su pravila u ruskom jeziku prilično složena, plus postoji puno iznimaka, stoga će biti potrebna vrlo velika biblioteka, a čak je i to daleko od 100% spašavanje. Najpopularnija od svih knjižnica koje se bave Deklinacija imena u PHP-u, je NameCaseLib .

Nakon što preuzmete ovu biblioteku i postavite je na svoje web mjesto, možete je koristiti ovako:

Require_once "NCL.NameCase.ru.php"; // Povežite rusku knjižnicu
$slučaj = novi NCLNameCaseRu(); // Kreirajte objekt klase NCLNameCaseRu
$array = $case->q("Rusakov Mikhail Yurievich"); // Dobivamo niz od 6 elemenata koji odgovaraju 6 slučajeva u kojima će se pojaviti ulazni niz
ispis_r($niz); // Izlaz niza
?>

Kao što vidite, korištenje knjižnice vrlo je jednostavno. S druge strane, moj glavni savjet bi bio sljedeći: Ako je moguće, izbjegavajte potpuno mijenjanje riječi.. Ipak, ponekad će ljudi uvesti nešto što se nikako ne može sklonosti, a pokušaji da se to inducira izgledat će smiješni. Nije potrebno pisati " Dodaj Ilyu kao prijatelja"Može se jednostavno napisati" Dodaj kao prijatelja"na Ilyjinoj stranici.

Modul morpher.so dizajniran je za deklinaciju velikih i malih slova riječi i izraza - prezimena, imena i patronimika, imena gradova i dobara - na ruskom i ukrajinskom jeziku.

Funkcija deklinacije po padežima

Milijun dolara ide naizNaberežnije Čelni" , " štap " ); ?> !

Kao rezultat dobivamo:

Milijun dolara ide Vasiliju Pupkinu iz Naberežnih Čelna!

Funkcija morpher_inflect mijenja frazu u nominativnom padežu (prvi argument) u bilo koji padež (drugi argument). Slučaj može imati sljedeća značenja:

Svi nizovi proslijeđeni biblioteci moraju biti u UTF-8 kodiranju. Rezultat se također vraća u UTF-8.

Odgovarajuća funkcija za ukrajinski jezik zove se morpher_ukr_inflect. Za sada radi samo s prezimenima, imenima i patronimima i razlikuje se od ruskog u nazivima padeža:

Prijevod u množinu još nije implementiran u ukrajinskoj verziji.

Funkcija rastavljanja imena na komponente

Funkcija morpher_split_fio dijeli ulazni niz u niz prezimena, imena, srednjeg imena

F: Pupkin I: Vasilij O:

Funkcija pluralizacije

Ako drugom parametru dodate niz "mn", rezultat će biti u množini:

Preostalo na skladištu 238 .

U skladištu je ostalo 238 žarača.

Ako je prvi parametar već množina, vratit će se sljedeće:

#GREŠKA: Parametar 1 "tekst" je množina.

Funkcija određivanja roda

" y " , " f " => " y " , " n " => " oh " , " p " => " y " ); $name = "stručnjaci"; $rod = morpher_get_gender ($name); jeka "Poštovanje". $završeci [ $rod ] . " ". $ime. " !\n " ; ?>

Da biste odredili rod prezimena, imena i patronimika na ukrajinskom, koristite funkciju morpher_ukr_get_gender. Vraća samo "m" (muški) ili "f" (ženski).

Funkcija pisanja brojeva i novčanih iznosa

Funkcija morpher_spell generira broj i stavlja zadanu mjernu jedinicu u željeno veliko i malo slova:

kalendarski dan" ); // 28 (dvadeset osam) kalendarskih dana morpher_spell("1,2", "postotak"); // 1,2 (jedan zarez dva) posto morpher_spell(2, "dan"); // 2 (dva) dana ?>

Ako trebate umetnuti riječi u tekst u određenom slučaju, navedite slučaj kao treći parametar:

Tijekomkalendarski dan" , " R " ); ?> .

Kao rezultat, dobivamo "U roku od 28 (dvadeset osam) kalendarskih dana."

Prihvatljive vrijednosti velikih i malih slova: I, R, D, V, T, P i njihovi analozi napisani latiničnim slovima, vidi. Prijedložni oblici (predl-o i gdje) nisu podržani u ovoj funkciji.

Za nazive nekih novčanih jedinica, funkcija morpher_spell proizvodi pravopis poput ovog:

Sto dvadeset i tri rublje 45 kopejki morpher_spell(123,45, "USD"); // Sto dvadeset tri američka dolara 45 centi morpher_spell(123.45, "euro"); // Sto dvadeset tri eura 45 centi?>

Po želji možete koristiti skraćene nazive novčanih jedinica, sa ili bez točke:

Sto dvadeset i tri rublje. 45 kopejki morpher_spell(123.45, "$"); // Sto dvadeset tri američka dolara 45 centi morpher_spell (123,45, " UAH " ); // Sto dvadeset i tri UAH. 45 kopejki?>

Ili troslovne kodove valute međunarodnog standarda ISO 4217, kao što su RUB, USD, EUR itd. U ovom slučaju naziv zemlje automatski se uključuje u naziv valute:

Sto dvadeset tri ruske rublje 45 kopejki morpher_spell(123,45, "UAH"); // Sto dvadeset i tri ukrajinske grivne 45 kopejki morpher_spell(123,45, "KZT"); // Sto dvadeset tri kazahstanska tenge 45 tiyna?>

Obrada pogreške

Ako dođe do pogreške, sve funkcije knjižnice vraćaju redak koji počinje s "#ERROR: ".

#GREŠKA: Parametar 1 "text" ne smije biti prazan.
#GREŠKA: Parametar 2 "slučaj" ne smije biti prazan.
#GREŠKA: Parametar 1 "text" nije ruski.
#GREŠKA: Parametar 2 "slučaj" je nevažeći.
#GREŠKA: Parametar 1 "tekst" je množina.

Ako ne želite da korisnik vidi ove poruke, provjerite početni podniz "#ERROR: ".

Funkcija morpher_inflect očekuje 2 parametra, a morpher_get_gender - jedan. Ako se pozove s pogrešnim brojem parametara, PHP interpreter izdaje upozorenje i nastavlja s izvođenjem programa.

Instalacija modula na Linux

Počevši od verzije 1.3.0, nudimo modul za Linux verziju PHP-a u obliku unaprijed kompajliranih morpher.so datoteka zapakiranih u arhivu. Ove su datoteke prikladne za korištenje na sljedećim distribucijama Linuxa:

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

Sve što trebate učiniti je pisati nam da dobijemo morpher.so za vašu distribuciju, izdvojiti morpher.so iz arhive i morpher.so kao PHP ekstenziju. Međutim, binarna kompatibilnost takvog modula s vašim sustavom nije zajamčena, jer gradimo modul samo na "čistim" sustavima sa zadanim postavkama i s verzijom PHP-a koju nudi upravitelj paketa sustava. Ako je modul nekompatibilan, PHP ga neće moći učitati kao proširenje. Ako nijedna od gotovih datoteka modula nije prikladna za vaš sustav, tada trebate izgraditi modul iz priloženog izvornog koda.

Radi praktičnosti i pojednostavljenja postupka sastavljanja modula, distribucijski komplet uključuje skup skripti koje automatiziraju instalaciju paketa potrebnih za kompilaciju, sastavljanje modula i registraciju modula kao proširenja za PHP. Uzimajući u obzir široku paletu distribucija operativnih sustava, razne mogućnosti konfiguracije i značajke izgradnje proširenja za php, morate razumjeti da u nekim slučajevima, prilikom instaliranja modula, može postojati potreba za dodatnim radnjama koje nisu implementirane skriptama sklopa.

Za početak postupka automatske instalacije raspakirajte distribuciju u bilo koji direktorij, na primjer, morpher:

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

Pokrenite skriptu za izgradnju s naredbom:

# bash graditi.sh

Ako bude uspješno, datoteka modula morpher.so bit će kompajlirana i premještena u direktorij php proširenja. Modul će biti registriran u php konfiguraciji, a funkcionalnost modula će se automatski provjeriti testom. Tekstualni izlaz skripte sklopa trebao bi sadržavati poruku koja ukazuje na uspješno testiranje:

Izvođenje testova... ... obavljeno.

Vaš modul je spreman za korištenje. Imenik se sada može izbrisati:

# rm -r morf

Ako imate problema s verzijom, morate provjeriti jesu li svi potrebni paketi instalirani i konfigurirani na vašem sustavu. Za sastavljanje i rad modula morate instalirati:

Možete započeti samo s izgradnjom modula bez dodatnih radnji pomoću naredbe:

# bash prevesti.sh

Nakon uspješne kompilacije, datoteka morpher.so nalazit će se u direktoriju morpher/php/modules.

Datoteku morpher.so treba smjestiti u direktorij PHP proširenja, na primjer:

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

Direktorij proširenja može biti drugačiji na vašem sustavu.

# bash setup.sh

ili sami navedite naziv ekstenzije u datoteci php.ini. Funkcionalnost proširenja možete provjeriti ručnim pokretanjem testne PHP skripte iz naredbenog retka:

# php -f test.php Izvođenje testova... ... obavljeno.

Moguće greške tijekom montaže i načini njihovog uklanjanja

Pogreška: /usr/bin/ld: ne može pronaći -lm

Razlog: Nemate instaliran glibc-static paket.

Pogreška: .../include/php/php_config.h:2526:30: pogreška: poziv preopterećenog 'isnan(double&)' je dvosmislen. (broj retka može se razlikovati ovisno o vašoj PHP verziji i konfiguraciji)

Vrlo popularan problem s kojim se suočavaju Web programeri, ovo Deklinacija riječi u PHP-u. Na primjer, trebate prikazati prije koliko minuta je poruka ostavljena. Možete jednostavno napisati broj i riječ " minuta". Ali onda će biti napisano vrlo čudno, na primjer, " 1 minuta", "2 minute" i tako dalje. Zapravo, bez Deklinacija riječi u PHP-u Ne možete to osim, naravno, ako ne želite pisati na ruskom.

Problem će se početnicima činiti vrlo teškim, ali zapravo postoji određeni obrazac deklinacije riječi. Pogledajte sami: " 1 minuta, 2 minute, 5 minuta, 11 minuta, 19 minuta, 21 minuta, 22 minute, 25 minuta i tako dalje"Vidite uzorak? 1, 21, 31, 41 - uvijek će biti " minuta". Ako je najmanje značajna znamenka veća 1 i manje 5 , dok je sam broj kada se podijeli sa 100 ima ostatak veći 20 (to je, na primjer, nije broj 12 a ne 112 ), tada će biti " minuta". U drugim slučajevima " minuta".

funkcija getWord($broj, $sufiks) (
$ključevi = niz(2, 0, 1, 1, 1, 2);
$mod = $broj % 100;
$suffix_key = ($mod > 7 && $mod< 20) ? 2: $keys;
vrati $suffix[$suffix_key];
}
$array = array("minute", "minute", "minute"); $n = 21;

echo "$n $riječ
";
$n = 11;
$word = getWord($n, $array);
echo "$n $riječ
";
$n = 4;
$word = getWord($n, $array);
echo "$n $riječ
";
?>

Pokretanjem ove skripte vidjet ćete to Deklinacija riječi u PHP-u događa se s praskom. Mogu samo dodati da uz " minuta"moglo bi biti" dan", "sat", "ljudski", "Računalo" i sve ostale imenice koje deklinirati ovisno o broju.

JavaScript je blokiran u vašem pregledniku. Omogućite JavaScript kako bi stranica radila!

API za deklinaciju riječi, dobivanje roda (muški, ženski), padeža, deklinacije i drugih karakteristika riječi

API za deklinaciju riječi

Mogućnosti:
pregibati se- riječ ili popis riječi odvojenih razmakom. Sljedeće opcije dostupne su samo ako se prenosi jedna riječ.
dio govora
DeskriptorPrimjerOpis
CMajkaimenica
PCrvenapridjev
KR_APILlijepkratki pridjev
INFINITIVićiinfinitiv
Gdolazakosobni glagol
Participhodanjeparticip
PARTICIPideparticip
KR_PARTICIPLEizgrađenakratki particip
BROJosambroj (kvantitativno)
BROJ-PosmiRedni broj
MSOnzamjenica-imenica
MS-PREDCništapredikativna zamjenica
MS-Pbilo kojizamjenički pridjev
NCoolprilog
PREDAKZanimljivpredikativni
PRIPREMApod, ispodizgovor
UNIJAIunija
IZMEĐUjaouzvikivanje
ČESTOpa, bičestica
INVODNSigurnouvodna riječ
PHRAZfloundering bays, zgifrazeološka jedinica
gramame– . Navedeno odvojeno sa "," (zarez). Da biste isključili, označite "-" (minus) ispred grama.
GramemaOpis
Rod
gospmuški
zhrženski
oženiti sesrednjeg roda
mr-zhropći rod (siroče, pijanica)
Broj
jedinicejednina
plplural
Slučaj
ihnominativ
rdgenitiv
dtdativ
vnakuzativ
televizorinstrumental
itdprijedložni
zvukvokativ (otac, bog)
2 drugi genitiv ili drugi prijedložni padež
Vrijeme
nstsadašnjost
htjetiFutur
prshprošlo vrijeme
Lice
1lprva osoba
2ldruga osoba
3lTreća strana
Živopisnost
odanimirati
Alineživo
Pogled
Sv.savršen pogled
nsnesavršene vrste
tranzitivnost
nptranzicija
neneprelazni
Zalog
dstaktivan glas
stranicapasivni glas
ostalo
0 nepromjenjiv
bezlbezlični glagol
pvlzapovjedni način (imperativ)
privlačnostposesivan (ne koristi se)
prevsuperlativ (za pridjeve)
usporeditikomparativ stupnja (za pridjeve)
kvalitetakvalitativan pridjev
Semantičke značajke
Imeime (Ivan, Mihail)
femmeprezime (Ivanov, Sidorov)
izvješćepatronim (Ivanovič, Mihajlovič)
loktoponim (Moskva, Lena, Everest)
skrkratica (KPSS, RONO)
orgorganizacija
pitanjeupitni prilog
naznačitipokazni prilog
slengžargon
raspadkolokvijalni
arharhaizam
HRHslovoslagač
pjesnikpjesnički
profprofesionalizam
info– prikazati svaki obrazac kao niz s dodatnim informacijama

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

("0":"MAGADAN","1":"MAGADAN","2":"MAGADAN","3":"MAGADAN","4":"MAGADAN","5":"MAGADAN"," 6":"MAGADANA","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-NA-DONU <1>ROSTOV-NA-DONU <2>ROSTOV-NA-DONU <3>ROSTOV-NA-DONU <4>ROSTOV-NA-DONU 46

Da biste dobili sve nežive pridjeve u množini od riječi "vjenčanje", pozovite:

Https://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN&info
Dobiti:
("0":("riječ":"VJENČANJE","dio govora":"P","grammems":["DT","QUALITY","MN","NO","OD"]), " 1":("riječ":"VJENČANJE","dio govora":"P","grammems":["IM","QUALITY","MN","BUT","OD"]), "2" :("riječ":"VJENČANJE","diogovor":"P","grammems":["VN","KACH","MN","ALI"]), "3":("riječ": "VJENČANJE","dio govora":"P","grammems":["QUALITY","MN","BUT","OD","RD"]), "4":("word":"VJENČANJE ","dio govora":"P","grammems":["QUALITY","MN","BUT","OD","PR"]), "5":("word":"VJENČANJE" " dio govora":"P","grammems":["QUALITY","MN","NO","OD","TV"]) ,,"limit":19) Bez info parametra:
http://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN
("0":"VJENČANJE","1":"VJENČANJE","2":"VJENČANJE","3":"VJENČANJE", "4":"VJENČANJE","5":"VJENČANJE"," granica":19)

API za dobivanje riječi spol, ime: muško, žensko

API za dobivanje spola: muško, žensko po imenu. Pomoću ovog API-ja možete dobiti spol korisnika pomoću korisničkog imena. To će eliminirati potrebu za ispunjavanjem dodatnog obrasca tijekom registracije.

Pozdrav, Habrakhabr!

Danas ću govoriti o malom, ali vrlo korisnom okviru - NameCaseLib.

Mislim da su se mnogi susreli sa situacijom u kojoj je bilo potrebno odbiti nečije prezime, ime i patronim po padežima. Ovaj okvir pomoći će nam da se riješimo brojnih “bicikla”.

Montaža

Da bi NameCaseLib radio, potrebni su nam PHP5 i biblioteka php_mbstring za rad s tekstom u UTF-8 formatu.

Super, sada ostaje samo povezati sam okvir, za to ćemo preuzeti potrebne datoteke.

NameCaseLib podržava dva jezika: ruski i ukrajinski. Datoteka NCL.NameCase.ru.php sadrži ruska pravila deklinacije, NCL.NameCase.ua.php, odnosno ukrajinska. Mapa NCL sadrži samu “jezgru” okvira, odnosno skup osnovnih funkcija.

Dakle, kreirajmo datoteku u .php formatu i provjerimo funkcionalnost ovog okvira.

q("Maksimov Aleksandar Vasiljevič"); # Ispis rezultirajućeg niza. (Napomena: vraća jednostavan niz koji se može indeksirati) var_dump($array); ?>

Sukladno tome, na isti način možemo odbiti ukrajinska puna imena povezivanjem ukrajinskih pravila deklinacije.

Ali ipak pogledajmo koje parametre metoda sadrži q, a kako se još može koristiti?

Ova metoda ima 3 parametra, od kojih se 2 mogu izostaviti. Prvi parametar je puno ime osobe, drugi je slučaj (dolje ću dati popis konstanti; ako slučaj nije naveden (NULL), tada metoda vraća sve slučajeve), a treći je spol osobe. (Konstante su također dane u nastavku; ako ne navedete spol (NULL), metoda će ga sama odrediti)

Konstante

Za označavanje spola koriste se konstante:
  • NCL::$MAN – muški rod
  • NCL::$WOMAN – žensko

Za označavanje slučajeva ruskog jezika:

  • NCL::$IMENITLN - nominativ
  • NCL::$RODITLN - genitiv
  • NCL::$DATELN - dativ
  • NCL::$VINITELN - akuzativ
  • NCL::$TVORITELN - instrumentalni padež
  • NCL::$PREDLOGN - prijedložni padež

Za označavanje slučajeva ukrajinskog jezika:

  • NCL::$UaNazyvnyi – pločica s imenom
  • NCL::$UaRodovyi – generički prikaz
  • NCL::$UaDavalnyi – dugogodišnji admin
  • NCL::$UaZnahidnyi – poznati video
  • NCL::$UaOrudnyi – prikaz oružja
  • NCL::$UaMiszevyi – miscevyi vidminok
  • NCL::$UaKlychnyi – osobna bilješka

Bilješke

  1. Redoslijed naziva nije bitan.
  2. Nije bitno kojim je velikim i malim slovima naznačeno puno ime, nakon deklinacije, metoda vraća spremljenu veličinu slova.

Definicija dijela punog imena

Pomoću metode getFullNameFormat možemo odrediti koji dio, odnosno koje dijelove punog imena koristimo.

getFullNameFormat("Maksimov Aleksandar Vasiljevič"); /* Dobivamo format poput: S F N, gdje: - S - Prezime - N - Ime - F - Srednje ime */ echo $fullName; ?>

Ali što biste trebali učiniti ako okvir i dalje ne može ispravno odrediti kako odbiti odabrano ime?

U tu svrhu knjižnica nudi metodu qFullName koja vam omogućuje da odredite prezime, ime, patronim i spol osobe u određenom nizu.

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

Rezultati

NameCaseLib je vrlo jednostavan okvir koji uključuje mnoge korisne značajke. Stranica ima kompletnu dokumentaciju na ruskom jeziku.