Pilna vārda deklinācija — NameCaseLib PHP Framework. Vārdu deklinācija PHP valodā Deklinācija ģenitīvā gadījumā php

Bieži vien ir vajadzība locīt vārdus PHP. Piekrītu, ka frāze " Pievienot kā draugu Ilya"izklausās daudz sliktāk nekā" Pievienot Ilju kā draugu". Tāpēc Vārdu deklinācija pēc reģistra PHP Tas ir nepieciešams diezgan bieži, un šajā rakstā es jums pastāstīšu, kā jūs varat to ieviest savā vietnē.

Uzreiz teikšu, ka diemžēl ideāla varianta nav. Pirmā iespēja ir ļoti acīmredzama: atrodiet vārdu datu bāzi, kas būs visos gadījumos, un pievienojiet šo tabulu savai. Pēc tam pēc nosaukuma nominatīvā gadījuma datubāzē meklējiet atbilstošo gadījumu. Trūkumi šeit ir acīmredzami: milzīga datu bāze, nevar aptvert visus nosaukumus, papildu slodze uz serveri.

Otra iespēja ir rakstīt savu vārdu deklināciju klase PHP, vai izmantojiet gatavu. Tā kā noteikumi krievu valodā ir diezgan sarežģīti, kā arī ir daudz izņēmumu, tāpēc jums būs nepieciešama ļoti liela bibliotēka, un pat tas ir tālu no 100% glābšana. Populārākā no visām bibliotēkām, kas nodarbojas ar Vārdu deklinācija PHP, ir NameCaseLib .

Pēc šīs bibliotēkas lejupielādes un ievietošanas savā vietnē varat to izmantot šādi:

Require_once "NCL.NameCase.ru.php"; // Savienojiet krievu bibliotēku
$case = jauns NCLNnameCaseRu(); // Izveidojiet klases NCLNameCaseRu objektu
$masīvs = $case->q("Rusakovs Mihails Jurjevičs"); // Mēs iegūstam 6 elementu masīvu, kas atbilst 6 gadījumiem, kuros parādīsies ievades virkne
print_r($masīvs); // Izvadiet masīvu
?>

Kā redzat, bibliotēkas lietošana ir ļoti vienkārša. No otras puses, mans galvenais padoms būtu šāds: Ja iespējams, izvairieties no nepieciešamības locīt vārdus.. Tomēr dažreiz cilvēki ieviesīs kaut ko tādu, kas nekādā veidā nevar būt pakļauts, un mēģinājumi to pamudināt izskatīsies smieklīgi. Nav nepieciešams rakstīt " Pievienot Ilju kā draugu"To var uzrakstīt vienkārši" Pievienot kā draugu"Iļjas lapā.

Modulis morpher.so ir paredzēts vārdu un frāžu reģistrēšanai - uzvārdi, vārdi un patronīmi, pilsētu un preču nosaukumi - krievu un ukraiņu valodā.

Deklinācijas funkcija pa gadījumiem

Viens miljons dolāru aiziet uznoNaberežnije Čelnijs" , " stienis " ); ?> !

Rezultātā mēs iegūstam:

Viens miljons dolāru tiek Vasilijam Pupkinam no Naberežnije Čelnija!

Funkcija morpher_inflec pārvērš frāzi nominatīvajā gadījumā (pirmais arguments) jebkurā gadījumā (otrais arguments). Lietam var būt šādas nozīmes:

Visām bibliotēkai nodotajām virknēm ir jābūt UTF-8 kodējumā. Rezultāts tiek atgriezts arī UTF-8.

Ukraiņu valodai atbilstošo funkciju sauc par morpher_ukr_inflec. Līdz šim tas darbojas tikai ar uzvārdiem, vārdiem un patronimiem un atšķiras no krievu valodas lietu nosaukumos:

Tulkojums daudzskaitlī ukraiņu valodā vēl nav ieviests.

Funkcija nosaukuma sadalīšanai komponentos

Funkcija morpher_split_fio sadala ievades virkni uzvārda, vārda un otrā vārda masīvā

F: ķirbis I: Vasilijs O:

Pluralizācijas funkcija

Ja otrajam parametram pievienosit virkni "mn", rezultāts būs daudzskaitlī:

Atlikums noliktavā 238 .

Noliktavā ir palikuši 238 pokeri.

Ja pirmais parametrs jau ir daudzskaitlī, tiks atgriezts šāds:

#KĻŪDA: 1. parametra "teksts" ir daudzskaitlī.

Ģints noteikšanas funkcija

" y " , " f " => " y " , " n " => " oh " , " p " => " y " ); $name = "eksperti"; $rod = morpher_get_gender ($nosaukums); atbalss "Mēs jūs cienām." $beidzas [ $rod ] . " ". $vārds . " !\n " ; ?>

Lai noteiktu uzvārdu, vārdu un uzvārdu dzimumu ukraiņu valodā, izmantojiet funkciju morpher_ukr_get_gender. Tas atgriež tikai "m" (vīrietis) vai "f" (sieviete).

Ciparu un naudas summu rakstīšanas funkcija

Funkcija morpher_spell veido skaitļa pareizrakstību un ievieto doto mērvienību vajadzīgajā gadījumā:

kalendārā diena" ); // 28 (divdesmit astoņas) kalendārās dienas morpher_spell("1,2", "procenti"); // 1,2 (viens komats divi) procenti morpher_spell(2, "diena"); // 2 (divas) dienas ?>

Ja jums ir jāievieto vārdi tekstā noteiktā gadījumā, norādiet reģistru kā trešo parametru:

Laikākalendārā diena" , " R " ); ?> .

Rezultātā mēs saņemam “28 (divdesmit astoņu) kalendāro dienu laikā”.

Pieņemamās reģistra vērtības: I, R, D, V, T, P un to analogi, rakstīti latīņu valodā, sk. Prepozīcijas formas (predl-o un gde) šajā funkcijā netiek atbalstītas.

Dažu naudas vienību nosaukumiem funkcija morpher_spell rada šādu rakstību:

Simts divdesmit trīs rubļi 45 kapeikas morpher_spell(123,45, "USD"); // Simts divdesmit trīs ASV dolāri 45 centi morpher_spell(123,45, "eiro"); // Simts divdesmit trīs eiro 45 centi?>

Ja vēlaties, varat izmantot saīsinātus naudas vienību nosaukumus ar punktu vai bez tā:

Simts divdesmit trīs rubļi. 45 kapeikas morpher_spell(123,45, "$"); // Simts divdesmit trīs ASV dolāri 45 centi morpher_spell (123,45, " UAH " ); // Simts divdesmit trīs UAH. 45 kapeikas?>

Vai arī starptautiskā standarta ISO 4217 valūtu trīs burtu kodi, piemēram, RUB, USD, EUR utt. Šajā gadījumā valūtas nosaukumā tiek automātiski iekļauts valsts nosaukums:

Simt divdesmit trīs Krievijas rubļi 45 kapeikas morpher_spell(123,45, "UAH"); // Simt divdesmit trīs Ukrainas grivnas 45 kapeikas morpher_spell(123.45, "KZT"); // Simt divdesmit trīs Kazahstānas tenge 45 tiyns?>

Kļūda apstrādē

Ja rodas kļūda, visas bibliotēkas funkcijas atgriež rindu, kas sākas ar "#ERROR:" .

#KĻŪDA: 1. parametra “text” lauks nedrīkst būt tukšs.
#KĻŪDA: 2. parametra lauks "case" nedrīkst būt tukšs.
#KĻŪDA: 1. parametra "teksts" nav krievu valoda.
#KĻŪDA: 2. parametra "case" nav derīgs.
#KĻŪDA: 1. parametra "teksts" ir daudzskaitlī.

Ja nevēlaties, lai lietotājs redzētu šos ziņojumus, pārbaudiet sākotnējo apakšvirkni "#ERROR:" .

Funkcija morpher_inflec paredz 2 parametrus, bet morpher_get_gender — vienu. Ja tiek izsaukts nepareizs parametru skaits, PHP tulks izdod brīdinājumu un turpina programmas izpildi.

Moduļa instalēšana operētājsistēmā Linux

Sākot ar versiju 1.3.0, mēs nodrošinām PHP Linux versijas moduli iepriekš kompilētu morpher.so failu veidā, kas iesaiņoti arhīvā. Šie faili ir piemēroti lietošanai šādos Linux izplatījumos:

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

Viss, kas jums jādara, ir jāraksta mums, lai iegūtu morpher.so savam izplatīšanai, izņemiet morpher.so no arhīva un morpher.so kā PHP paplašinājumu. Taču šāda moduļa binārā savietojamība ar jūsu sistēmu netiek garantēta, jo moduli veidojam tikai uz “tīrām” sistēmām ar noklusējuma iestatījumiem un ar to PHP versiju, ko piedāvā sistēmas pakotņu pārvaldnieks. Ja modulis nav saderīgs, PHP nevarēs to ielādēt kā paplašinājumu. Ja neviens no gatavajiem moduļa failiem nav piemērots jūsu sistēmai, jums ir jāizveido modulis no nodrošinātā pirmkoda.

Moduļu montāžas procedūras ērtībai un vienkāršošanai izplatīšanas komplektā ir iekļauts skriptu komplekts, kas automatizē kompilēšanai nepieciešamo pakotņu instalēšanu, moduļu montāžu un moduļu reģistrāciju kā PHP paplašinājumu. Ņemot vērā plašo operētājsistēmu izplatīšanu, dažādas konfigurācijas iespējas un php paplašinājumu komplektēšanas iespējas, jums jāsaprot, ka dažos gadījumos, instalējot moduli, var būt nepieciešamas papildu darbības, kuras neīsteno montāžas skripti.

Lai sāktu automātisko instalēšanas procedūru, izsaiņojiet izplatīšanu jebkurā direktorijā, piemēram, morpher:

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

Palaidiet veidošanas skriptu ar komandu:

# bash build.sh

Ja tas izdosies, moduļa fails morpher.so tiks apkopots un pārvietots uz php paplašinājumu direktoriju. Modulis tiks reģistrēts php konfigurācijā, un moduļa funkcionalitāte tiks pārbaudīta automātiski, izmantojot testu. Montāžas skripta teksta izvadē jāiekļauj ziņojums, kas norāda uz veiksmīgu testēšanu:

Notiek pārbaudes... ... pabeigts.

Jūsu modulis ir gatavs lietošanai. Tagad direktoriju var izdzēst:

# rm -r morpher

Ja jums ir problēmas ar būvniecību, jums ir jāpārliecinās, vai jūsu sistēmā ir instalētas un konfigurētas visas nepieciešamās pakotnes. Lai saliktu un darbinātu moduli, jāinstalē:

Jūs varat sākt tikai moduļa veidošanu bez papildu darbībām ar komandu:

# bash compile.sh

Pēc veiksmīgas kompilācijas fails morpher.so atradīsies direktorijā morpher/php/modules.

Fails morpher.so ir jāievieto PHP paplašinājumu direktorijā, piemēram:

# php-config -- paplašinājuma direktorijs/usr/lib/php5/20121212 # mv modules/morpher.so /usr/lib/php5/20121212/

Paplašinājuma direktorijs jūsu sistēmā var atšķirties.

# bash setup.sh

vai pats norādiet paplašinājuma nosaukumu failā php.ini. Varat pārbaudīt paplašinājuma funkcionalitāti, manuāli palaižot testa PHP skriptu no komandrindas:

# php -f test.php Notiek pārbaudes... ... pabeigts.

Iespējamās kļūdas montāžas laikā un to novēršanas veidi

Kļūda: /usr/bin/ld: nevar atrast -lm

Iemesls: jums nav instalēta glibc-static pakotne.

Kļūda: .../include/php/php_config.h:2526:30: kļūda: pārslogotas 'isnan(double&)' izsaukums ir neskaidrs. (rindas numurs var atšķirties atkarībā no jūsu PHP versijas un konfigurācijas)

Ļoti populāra problēma Tīmekļa programmētāji, Šis Vārdu deklinācija PHP. Piemēram, jums ir jāparāda, cik pirms minūtēm tika atstāts ziņojums. Jūs varat vienkārši uzrakstīt ciparu un vārdu " minūtes". Bet tad tas būs ļoti dīvaini rakstīts, piemēram, " 1 minūte", "2 minūtes" un tā tālāk. Patiesībā bez Vārdu deklinācija PHP Jūs to nevarat izdarīt, ja vien, protams, nevēlaties rakstīt krieviski.

Iesācējiem problēma šķitīs ļoti sarežģīta, taču patiesībā vārdu deklinācijai ir zināms modelis. Paskaties pats: " 1 minūte, 2 minūtes, 5 minūtes, 11 minūtes, 19 minūtes, 21 minūte, 22 minūtes, 25 minūtes un tā tālāk"Redzi modeli? 1, 21, 31, 41 - vienmēr būs" minūte". Ja vismazāk nozīmīgais cipars ir lielāks 1 un mazāk 5 , savukārt pats skaitlis, dalīts ar 100 atlikums ir lielāks 20 (tas, piemēram, nav skaitlis 12 un nē 112 ), tad būs " minūtes". Citos gadījumos" minūtes".

funkcija getWord($skaitlis, $sufikss) (
$taustiņi = masīvs(2, 0, 1, 1, 1, 2);
$mod = $skaitlis % 100;
$suffix_key = ($mod > 7 && $mod< 20) ? 2: $keys;
return $suffix[$suffix_key];
}
$masīvs = masīvs("minūte", "minūtes", "minūtes"); $n = 21;

echo "$n $word
";
$n = 11;
$vārds = getWord($n, $masīvs);
echo "$n $word
";
$n = 4;
$vārds = getWord($n, $masīvs);
echo "$n $word
";
?>

Palaižot šo skriptu, jūs to redzēsit Vārdu deklinācija PHP notiek ar blīkšķi. Es varu tikai piebilst, ka papildus " minūtes"varētu būt" diena", "stunda", "Cilvēks", "dators" un visi citi lietvārdi, kas samazinās atkarībā no cipara.

JavaScript jūsu pārlūkprogrammā ir bloķēts. Lūdzu, iespējojiet JavaScript, lai vietne darbotos!

API vārda deklinācijai, dzimuma iegūšanai (vīrišķais, sievišķais), reģistram, deklinācijai un citām vārda pazīmēm

Word Declension API

Iespējas:
locīt- vārds vai vārdu saraksts, kas atdalīts ar atstarpi. Tālāk norādītās iespējas ir pieejamas tikai tad, ja tiek pārraidīts viens vārds.
runas daļa
DeskriptorsPiemērsApraksts
CMātelietvārds
Psarkansīpašības vārds
KR_APILskaistsīss īpašības vārds
INFINITĪVAaizietinfinitīvs
Gnākpersoniskais darbības vārds
DAĻA DAĻApastaigasdivdabis
DAĻA DAĻAietdivdabis
KR_PARTICIPLEceltaīsais divdabis
NUMBERastoņicipars (kvantitatīvs)
NUMBER-Pastotaiskārtas skaitlis
JAUNKUNDZEViņšvietniekvārds-lietvārds
MS-PREDCnekaspredikatīvs vietniekvārds
MS-Pjebkurapronomināls īpašības vārds
NForšiapstākļa vārds
SENCISInteresantipredikāts
SAGATAVOŠANAzemiegansts
SAVIENĪBAUnsavienība
STARPAk!starpsauciens
BIEŽAnu būtudaļiņa
INVODNNoteiktiievadvārds
PHRAZplekstu līči, zgifrazeoloģiskā vienība
gramiem– . Norādīts, atdalot ar "," (komatu). Lai izslēgtu, pirms grama norādiet “-” (mīnus).
GrammemaApraksts
Ģints
Mrvīrišķīgs
zhrsievišķīgs
Trešdneitrāls dzimums
kungs-žrvispārējais dzimums (bārenis, dzērājs)
Numurs
vienībasvienskaitlis
pldaudzskaitlis
Lieta
viņiemnominatīvs
rdģenitīvs
dtdatīvs
vnakuzatīvs
TVinstrumentāls
uttprievārdi
skaņuaicinošs (tēvs, dievs)
2 otrais ģenitīvs vai otrais prievārda gadījums
Laiks
nstpašreizējais laiks
gribuNākotnes forma
prshpagātnes forma
Seja
1lpirmā persona
2lotrā persona
3ltrešā ballīte
Animācija
odanimēt
Betnedzīvs
Skatīt
Sv.ideāls skats
nsnepilnīga suga
Transitivitāte
nppāreja
neintransitīvs
Ķīla
dstAktīvā balss
lappusepasīvā balss
Cits
0 nemainīgs
bezlbezpersonisks darbības vārds
pvlimperatīvs noskaņojums (imperative)
pievilcībaīpašumtiesības (nav lietots)
iepriekjsuperlatīvais (īpašības vārdiem)
salīdzinātsalīdzinošais grāds (īpašības vārdiem)
kvalitātikvalitatīvs īpašības vārds
Semantiskās iezīmes
Vārdsvārds (Ivans, Mihails)
femmeuzvārds (Ivanovs, Sidorovs)
Ziņotpatronīms (Ivanovičs, Mihailovičs)
loktoponīms (Maskava, Ļena, Everests)
saīsinājumssaīsinājums (KPSS, RONO)
orgorganizācija
jautājumsjautājošs apstākļa vārds
norādītdemonstratīvs apstākļa vārds
slengsžargons
sadalīšanāssarunvaloda
arkaarhaisms
HRHdrukas kļūda
dzejniekspoētisks
profprofesionalitāte
info– parādīt katru veidlapu kā masīvu ar papildu informāciju

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?inflec=Magadan












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

<0>ROSTOVA PIE DONAS <1>ROSTOVA PIE DONAS <2>ROSTOVA PIE DONAS <3>ROSTOVA PIE DONAS <4>ROSTOVA PIE DONAS 46

Lai iegūtu visus nedzīvos daudzskaitļa īpašības vārdus no vārda "kāzas", zvaniet:

Https://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN&info
Gūt:
("0":("vārds":"KĀZAS","runas daļa":"P","grammems":["DT","KVALITĀTE","MN","NO","OD"]), " 1":("vārds":"KĀZAS","runas daļa":"P","grammems":["IM","KVALITĀTE","MN","BET","OD"]), "2" :("vārds":"KĀZAS","runas daļa":"P","grammems":["VN","KACH","MN","BET"]), "3":("vārds": "KĀZAS","runas daļa":"P","grammems":["KVALITĀTE","MN","BET","OD","RD"]), "4":("vārds":"KĀZAS" ""runas daļa":"P","grammems":["KVALITĀTE","MN","BUT","OD","PR"]), "5":("vārds":"KĀZAS" " runas daļa":"P","grammems":["KVALITĀTE","MN","NO","OD","TV"]) ,,"limit":19) Bez informācijas parametra:
http://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN
("0":"KĀZAS","1":"KĀZAS","2":"KĀZAS","3":"KĀZAS", "4":"KĀZAS","5":"KĀZAS"," ierobežojums":19)

API vārda dzimuma, vārda iegūšanai: vīrietis, sieviete

API dzimuma noteikšanai: vīrietis, sieviete pēc vārda. Izmantojot šo API, varat iegūt lietotāja dzimumu, izmantojot lietotājvārdu. Tas novērsīs nepieciešamību reģistrācijas laikā aizpildīt papildu veidlapu.

Sveiks, Habrahabr!

Šodien es runāšu par nelielu, bet ļoti noderīgu ietvaru - NameCaseLib.

Domāju, ka daudzi ir saskārušies ar situāciju, kad bija nepieciešams atteikt personas uzvārdu, vārdu un uzvārdu atsevišķi. Šis ietvars palīdzēs mums atbrīvoties no daudziem “velosipēdiem”.

Uzstādīšana

Lai NameCaseLib darbotos, mums ir nepieciešams PHP5 un php_mbstring bibliotēka, lai strādātu ar tekstu UTF-8 formātā.

Lieliski, tagad atliek tikai savienot pašu ietvaru, šim nolūkam mēs lejupielādēsim nepieciešamos failus.

NameCaseLib atbalsta divas valodas: krievu un ukraiņu. Fails NCL.NameCase.ru.php satur krievu deklinācijas noteikumus, NCL.NameCase.ua.php, attiecīgi, ukraiņu valodas. NCL mapē ir ietverts pats ietvara “kodols”, tas ir, pamatfunkciju kopums.

Tātad, izveidosim failu .php formātā un pārbaudīsim šī ietvara funkcionalitāti.

q ("Maksimovs Aleksandrs Vasiļjevičs"); # Izvadiet iegūto masīvu. (Piezīme: atgriež vienkāršu indeksējamu masīvu) var_dump($masīvs); ?>

Attiecīgi, tādā pašā veidā mēs varam atteikties no ukraiņu pilnajiem vārdiem, savienojot ukraiņu deklinācijas noteikumus.

Bet tomēr apskatīsim, kādus parametrus satur metode q, un kā vēl to var izmantot?

Šai metodei ir 3 parametri, no kuriem 2 var izlaist. Pirmais parametrs ir personas pilns vārds, otrais ir reģistrs (tālāk es sniegšu konstantu sarakstu; ja reģistrs nav norādīts (NULL), metode atgriež visus gadījumus), bet trešais ir personas dzimums. (Zemāk ir norādītas arī konstantes; ja nenorādīsiet dzimumu (NULL), metode to noteiks pati)

Konstantes

Lai norādītu dzimumu, tiek izmantotas konstantes:
  • NCL::$MAN – vīriešu dzimums
  • NCL::$WOMAN – sieviete

Lai norādītu krievu valodas gadījumus:

  • NCL::$IMENITLN — nominatīvais burts
  • NCL::$RODITLN — ģenitīvais burts
  • NCL::$DATELN — datīvu reģistrs
  • NCL::$VINITELN — akuzatīvs gadījums
  • NCL::$TVORITELN - instrumentālais korpuss
  • NCL::$PREDLOGN — prievārda reģistrs

Lai norādītu ukraiņu valodas gadījumus:

  • NCL::$UaNazyvnyi – nosaukuma plāksnīte
  • NCL::$UaRodovyi — vispārīgs skats
  • NCL::$UaDavalnyi – ilgtermiņa administrators
  • NCL::$UaZnahidnyi – slavens video
  • NCL::$UaOrudnyi – ieroču displejs
  • NCL::$UaMiszevyi – miscevyi vidminok
  • NCL::$UaKlychnyi – personīga piezīme

Piezīmes

  1. Nosaukuma secībai nav nozīmes.
  2. Nav svarīgi, kurā gadījumā tiek norādīts pilns vārds, pēc deklinācijas metode atgriež saglabāto burtu gadījuma raksturu.

Pilna vārda daļas definīcija

Izmantojot metodi getFullNameFormat, mēs varam noteikt daļu vai kuras pilnā vārda daļas mēs izmantojam.

getFullNameFormat("Maksimovs Aleksandrs Vasiļjevičs"); /* Mēs iegūstam formātu, piemēram: S F N, kur: - S - Uzvārds - N - Vārds - F - Vidējais vārds */ echo $fullName; ?>

Bet kas jums jādara, ja sistēma joprojām nevar pareizi noteikt, kā noraidīt jūsu izvēlēto vārdu?

Šim nolūkam bibliotēka nodrošina qFullName metodi, kas ļauj noteiktā secībā norādīt personas uzvārdu, vārdu, uzvārdu un dzimumu.

qFullName("Maksimovs", "Aleksandrs", "Vasiļjevičs", NCL::$MAN, NCL::$TVORITELN, "S N F")."\n"; ?>

Rezultāti

NameCaseLib ir patiešām lietotājam draudzīgs ietvars, kas ietver daudzas noderīgas funkcijas. Vietnē ir pilnīga dokumentācija krievu valodā.