Č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:
$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 phpPokrenite skriptu za izgradnju s naredbom:
# bash graditi.shAko 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 morfAko 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.shNakon 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.shili 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 –
Deskriptor | Primjer | Opis |
---|---|---|
C | Majka | imenica |
P | Crvena | pridjev |
KR_APIL | lijep | kratki pridjev |
INFINITIV | ići | infinitiv |
G | dolazak | osobni glagol |
Particip | hodanje | particip |
PARTICIP | ide | particip |
KR_PARTICIPLE | izgrađena | kratki particip |
BROJ | osam | broj (kvantitativno) |
BROJ-P | osmi | Redni broj |
MS | On | zamjenica-imenica |
MS-PREDC | ništa | predikativna zamjenica |
MS-P | bilo koji | zamjenički pridjev |
N | Cool | prilog |
PREDAK | Zanimljiv | predikativni |
PRIPREMA | pod, ispod | izgovor |
UNIJA | I | unija |
IZMEĐU | jao | uzvikivanje |
ČESTO | pa, bi | čestica |
INVODN | Sigurno | uvodna riječ |
PHRAZ | floundering bays, zgi | frazeološka jedinica |
Gramema | Opis | |
---|---|---|
Rod | ||
gosp | muški | |
zhr | ženski | |
oženiti se | srednjeg roda | |
mr-zhr | opći rod (siroče, pijanica) | |
Broj | ||
jedinice | jednina | |
pl | plural | |
Slučaj | ||
ih | nominativ | |
rd | genitiv | |
dt | dativ | |
vn | akuzativ | |
televizor | instrumental | |
itd | prijedložni | |
zvuk | vokativ (otac, bog) | |
2 | drugi genitiv ili drugi prijedložni padež | |
Vrijeme | ||
nst | sadašnjost | |
htjeti | Futur | |
prsh | prošlo vrijeme | |
Lice | ||
1l | prva osoba | |
2l | druga osoba | |
3l | Treća strana | |
Živopisnost | ||
od | animirati | |
Ali | neživo | |
Pogled | ||
Sv. | savršen pogled | |
ns | nesavršene vrste | |
tranzitivnost | ||
np | tranzicija | |
ne | neprelazni | |
Zalog | ||
dst | aktivan glas | |
stranica | pasivni glas | |
ostalo | ||
0 | nepromjenjiv | |
bezl | bezlični glagol | |
pvl | zapovjedni način (imperativ) | |
privlačnost | posesivan (ne koristi se) | |
prev | superlativ (za pridjeve) | |
usporediti | komparativ stupnja (za pridjeve) | |
kvaliteta | kvalitativan pridjev | |
Semantičke značajke | ||
Ime | ime (Ivan, Mihail) | |
femme | prezime (Ivanov, Sidorov) | |
izvješće | patronim (Ivanovič, Mihajlovič) | |
lok | toponim (Moskva, Lena, Everest) | |
skr | kratica (KPSS, RONO) | |
org | organizacija | |
pitanje | upitni prilog | |
naznačiti | pokazni prilog | |
sleng | žargon | |
raspad | kolokvijalni | |
arh | arhaizam | |
HRH | slovoslagač | |
pjesnik | pjesnički | |
prof | profesionalizam |
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
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.
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Метод q - склоняет Фамилию, Имя и Отчество человека по правилам пола. $array = $case->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
- Redoslijed naziva nije bitan.
- 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.
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Метод getFullNameFormat - разбивает строку и возвращает формат, в котором записано имя. $fullName = $case->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.
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Параметры метода: qFullName(Фамилия, Имя, Отчество, пол, падеж, формат); Все параметры являются необязательными, если, например, не указать пол - система сама определит его. echo $nc->qFullName("Maksimov", "Aleksandar", "Vasilijevič", NCL::$MAN, NCL::$TVORITELN, "S N F")."\n"; ?>