Täisnime kääne – NameCaseLib PHP Framework. Sõnade käände PHP-s Käände genitiivi käände php

Sageli on vajadus käänake nimesid PHP-s. Nõus, et fraas " Lisa sõbraks Ilya"kõlab palju hullemini kui" Lisa Ilya oma sõbraks". Sellepärast Nimede käänded suur- ja suurtähe järgi PHP-s Seda nõutakse üsna sageli ja selles artiklis räägin teile, kuidas saate seda oma veebisaidil rakendada.

Ma ütlen kohe, et kahjuks pole ideaalset võimalust. Esimene võimalus on väga ilmne: leidke nimede andmebaas, mis on kõigil juhtudel olemas, ja lisage see tabel omale. Seejärel otsi nimetavas käändes nime järgi andmebaasist vastav kääne. Puudused on siin ilmselged: tohutu andmebaas, ei suuda kõiki nimesid katta, serveril on lisakoormus.

Teine võimalus on kirjutada ise nimede käände klass PHP-s või kasutage valmis. Kuna vene keele reeglid on üsna keerulised, lisaks on palju erandeid, vajate väga suurt raamatukogu ja isegi see pole kaugeltki 100% päästmine. Kõige populaarsem kõigist raamatukogudest, mis tegelevad Nimede käänded PHP-s, on NameCaseLib .

Pärast selle teegi allalaadimist ja veebisaidile paigutamist saate seda kasutada järgmiselt:

Require_once "NCL.NameCase.ru.php"; // Ühendage vene raamatukogu
$case = uus NCLNameCaseRu(); // Looge klassi NCLNameCaseRu objekt
$massiiv = $case->q("Rusakov Mihhail Jurjevitš"); // Saame 6-st elemendist koosneva massiivi, mis vastab 6-le juhtumile, mil sisendstring ilmub
print_r($massiiv); // Väljastage massiiv
?>

Nagu näete, on raamatukogu kasutamine väga lihtne. Teisest küljest oleks minu peamine nõuanne järgmine: Võimalusel vältige vajadust sõnu üldse käänata.. Sellegipoolest tutvustavad inimesed mõnikord midagi, millele ei saa kuidagi kalduda, ja katsed seda esile kutsuda näevad naeruväärsed. pole vaja kirjutada" Lisa Ilya oma sõbraks"Seda võib lihtsalt kirjutada" Lisa sõbraks"Ilja lehel.

Moodul morpher.so on mõeldud sõnade ja fraaside – perekonnanimede, eesnimede ja isanimede, linnade ja kaupade nimede – suur- ja suurtähtede lahutamiseks vene ja ukraina keeles.

Deklinatsioonifunktsioon juhtumite kaupa

Üks miljon dollarit lähebalatesNaberežnõje Tšelnõi" , " varras " ); ?> !

Selle tulemusena saame:

Üks miljon dollarit saab Naberežnõje Tšelnõi Vassili Pupkin!

Funktsioon morpher_inflec käänab fraasi nimetavas käändes (esimene argument) mis tahes käändeks (teine ​​argument). Juhtumil võib olla järgmine tähendus:

Kõik teeki edastatavad stringid peavad olema UTF-8 kodeeringus. Tulemus tagastatakse ka UTF-8-s.

Ukraina keele vastavat funktsiooni nimetatakse morpher_ukr_inflect. Siiani töötab see ainult perekonnanimede, eesnimede ja isanimedega ning erineb vene keelest juhtude nimede poolest:

Tõlki mitmusesse pole ukrainakeelses versioonis veel rakendatud.

Nime komponentideks jaotamise funktsioon

Funktsioon morpher_split_fio jagab sisendstringi perekonnanime, eesnime ja keskmise nime massiiviks

N: Puppkin I: Vassili O:

Mitmuse funktsioon

Kui lisate teisele parameetrile stringi "mn", on tulemus mitmuses:

Jääb laos 238 .

Lakku on jäänud 238 pokkerit.

Kui esimene parameeter on juba mitmuses, tagastatakse järgmine:

#VIGA: parameetri 1 "tekst" on mitmus.

Perekonna määramise funktsioon

" y " , " f " => " y " , " n " => " oh " , " p " => " y " ); $nimi = "eksperdid"; $varras = morpher_get_gender ($nimi); kaja "Me austame sind." $lõpud [ $rod ] . " ". $nimi . " !\n " ; ?>

Perekonnanimede, eesnimede ja isanimede soo määramiseks ukraina keeles kasutage funktsiooni morpher_ukr_get_gender. See tagastab ainult "m" (mees) või "f" (naine).

Numbrite ja rahasummade kirjutamise funktsioon

Funktsioon morpher_spell moodustab arvu õigekirja ja seab antud mõõtühiku soovitud käände:

kalendripäev" ); // 28 (kakskümmend kaheksa) kalendripäeva morpher_spell("1,2", "protsent"); // 1,2 (üks koma kaks) protsenti morpher_spell(2, "day"); // 2 (kaks) päeva ?>

Kui peate teatud käändes teksti sisestama sõnu, määrake kolmanda parameetrina suurtäht:

ajalkalendripäev" , " R " ); ?> .

Selle tulemusena saame „28 (kahekümne kaheksa) kalendripäeva jooksul”.

Aktsepteeritavad tõstuväärtused: I, R, D, V, T, P ja nende analoogid, kirjutatud ladina keeles, vt. See funktsioon ei toeta eessõnavorme (predl-o ja gde).

Mõnede rahaühikute nimede puhul loob funktsioon morpher_spell sellise kirjapildi:

Sada kakskümmend kolm rubla 45 kopikat morpher_spell(123,45, "USD"); // Sada kakskümmend kolm USA dollarit 45 senti morpher_spell(123,45, "euro"); // Sada kakskümmend kolm eurot 45 senti?>

Soovi korral võite kasutada rahaühikute lühendatud nimetusi, punktiga või ilma:

Sada kakskümmend kolm rubla. 45 kopikat morpher_spell(123,45, "$"); // Sada kakskümmend kolm USA dollarit 45 senti morpher_spell (123.45, " UAH " ); // Sada kakskümmend kolm UAH. 45 kopikat?>

Või rahvusvahelise standardi ISO 4217 kolmetähelised valuutakoodid, nt RUB, USD, EUR jne. Sel juhul lisatakse valuuta nimetusse automaatselt riigi nimi:

Sada kakskümmend kolm Vene rubla 45 kopikat morpher_spell(123,45, "UAH"); // Sada kakskümmend kolm Ukraina grivnat 45 kopikat morpher_spell(123.45, "KZT"); // Sada kakskümmend kolm Kasahstani tenge 45 tiyns?>

Viga töötlemisel

Kui ilmneb tõrge, tagastavad kõik teegi funktsioonid rea, mis algab sõnadega "#ERROR:" .

#ERROR: parameetri 1 "tekst" väli ei tohi olla tühi.
#ERROR: parameetri 2 "case" väli ei tohi olla tühi.
#VIGA: Parameeter 1 "tekst" ei ole venekeelne.
#VIGA: parameetri 2 "juht" on kehtetu.
#VIGA: parameetri 1 "tekst" on mitmus.

Kui te ei soovi, et kasutaja neid sõnumeid näeks, kontrollige algset alamstringi "#ERROR:" .

Funktsioon morpher_inflec eeldab 2 parameetrit ja morpher_get_gender ühte. Kui kutsutakse välja vale parameetrite arvuga, annab PHP-tõlk hoiatuse ja jätkab programmi täitmist.

Mooduli installimine Linuxile

Alates versioonist 1.3.0 pakume PHP Linuxi versiooni jaoks moodulit eelkompileeritud morpher.so failide kujul, mis on pakitud arhiivi. Need failid sobivad kasutamiseks järgmistes Linuxi distributsioonides:

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

Kõik, mida pead tegema, on meile kirjutada, et hankida oma distributsiooni jaoks fail morpher.so, ekstrakt morpher.so arhiivist ja morpher.so PHP laiendusena. Kuid sellise mooduli binaarne ühilduvus teie süsteemiga ei ole garanteeritud, kuna me ehitame mooduli ainult "puhastele" süsteemidele vaikeseadetega ja PHP versiooniga, mida süsteemipaketihaldur pakub. Kui moodul ei ühildu, ei saa PHP seda laiendusena laadida. Kui ükski valmis mooduli failidest ei sobi teie süsteemile, peate mooduli koostama antud lähtekoodist.

Mugavuse ja mooduli kokkupanemise protseduuri lihtsustamise huvides sisaldab jaotuskomplekt komplekti skripte, mis automatiseerivad kompileerimiseks vajalike pakettide paigaldamise, mooduli kokkupanemise ja mooduli registreerimise PHP laiendusena. Arvestades operatsioonisüsteemi distributsioonide laia valikut, erinevaid konfiguratsioonivõimalusi ja php laienduste kokkupanemise funktsioone, peate mõistma, et mõnel juhul võib mooduli installimisel tekkida vajadus täiendavate toimingute järele, mida montaažiskriptid ei rakenda.

Automaatse installiprotseduuri alustamiseks pakkige distributsioon lahti mis tahes kataloogi, näiteks morpher:

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

Käivitage ehitusskript käsuga:

# bash build.sh

Kui see õnnestub, kompileeritakse mooduli fail morpher.so ja teisaldatakse see php-laiendite kataloogi. Moodul registreeritakse php konfiguratsioonis ja mooduli funktsionaalsust kontrollitakse automaatselt testi abil. Assamblee skripti tekstiväljund peaks sisaldama teadet, mis näitab edukat testimist:

Käimas testid... ... tehtud.

Teie moodul on kasutamiseks valmis. Kataloogi saab nüüd kustutada:

# rm -r morpher

Kui teil on ehitamisega probleeme, peate veenduma, et kõik vajalikud paketid on teie süsteemi installitud ja konfigureeritud. Mooduli kokkupanemiseks ja kasutamiseks peate installima:

Saate alustada lihtsalt mooduli ehitamist ilma täiendavate toiminguteta käsuga:

# bash compile.sh

Pärast edukat kompileerimist asub fail morpher.so kataloogis morpher/php/modules.

Fail morpher.so tuleb paigutada PHP laienduste kataloogi, näiteks:

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

Laienduse kataloog võib teie süsteemis erineda.

# bash setup.sh

või määrake laiendi nimi failis php.ini ise. Laienduse funktsionaalsust saate kontrollida, käivitades käsitsi käsurealt PHP testskripti:

# php -f test.php Käimas testid... ... tehtud.

Võimalikud vead kokkupanekul ja nende kõrvaldamise viisid

Viga: /usr/bin/ld: -lm ei leitud

Põhjus: teil pole installitud paketti glibc-static.

Viga: .../include/php/php_config.h:2526:30: viga: ülekoormatud 'isnan(double&)' kutse on mitmetähenduslik. (rea number võib teie PHP versioonis ja konfiguratsioonis erineda)

Väga populaarne probleem Veebi programmeerijad, See Sõnade käänded PHP-s. Näiteks peate kuvama, mitu minutit tagasi sõnum jäeti. Võite lihtsalt kirjutada numbri ja sõna " minutit". Aga siis kirjutatakse väga imelikult, näiteks " 1 minutit", "2 minutit" ja nii edasi. Tegelikult ilma Sõnade käänded PHP-s Seda ei saa teha, kui muidugi just vene keeles kirjutada ei taha.

Probleem tundub algajatele väga keeruline, kuid tegelikult on sõnade deklinatsioonil teatud muster. Vaata ise: " 1 minut, 2 minutit, 5 minutit, 11 minutit, 19 minutit, 21 minutit, 22 minutit, 25 minutit ja nii edasi"Kas näete mustrit? 1, 21, 31, 41 - jääb alatiseks" minut". Kui vähima tähtsusega number on suurem 1 ja vähem 5 , samas kui arv ise jagatuna arvuga 100 ülejääk on suurem 20 (see ei ole näiteks arv 12 ja mitte 112 ), siis tuleb " minutit". Muudel juhtudel" minutit".

funktsioon getWord($number, $sufiks) (
$võtmed = massiiv(2, 0, 1, 1, 1, 2);
$mod = $number % 100;
$suffix_key = ($mod > 7 && $mod< 20) ? 2: $keys;
return $sufiks[$sufiksi_võti];
}
$massiiv = array("minut", "minutid", "minutid"); $n = 21;

echo "$n $word
";
$n = 11;
$sõna = getWord($n, $massiiv);
echo "$n $word
";
$n = 4;
$sõna = getWord($n, $massiiv);
echo "$n $word
";
?>

Selle skripti käivitamisel näete seda Sõnade käänded PHP-s juhtub pauguga. Võin ainult lisada, et lisaks " minutit"võib olla" päeval", "tund", "Inimene", "arvuti" ja kõik muud nimisõnad, mis langus sõltuvalt numbrist.

JavaScript on teie brauseris blokeeritud. Saidi toimimiseks lubage JavaScript!

API sõna deklinatsiooni, soo (mehelik, naiselik), suurtähtede, käände ja muude sõna omaduste hankimiseks

Word Declension API

Valikud:
käänata- tühikuga eraldatud sõna või sõnade loend. Järgmised valikud on saadaval ainult ühe sõna edastamisel.
kõne osa
KirjeldajaNäideKirjeldus
CEmanimisõna
Ppunaneomadussõna
KR_APILiluslühike omadussõna
INFINITIIVNEmineinfinitiiv
Gtulemasisiklik tegusõna
OSALIKkõndidesosastav
OSALIKlähebosastav
KR_PARTICIPLEehitatudlühike osalause
NUMBERkaheksaarv (kvantitatiivne)
NUMBER-Pkaheksasjärgarv
PRLTaasesõna-nimisõna
MS-PREDCmitte midagipredikatiivne asesõna
MS-Pükskõik millinepronominaalne omadussõna
NLahemäärsõna
ESIVANEHuvitavpredikaat
ETTEVALMISTUSallettekäändeks
LIITJaliit
VAHELOehvahelehüüe
SAGEnoh, oleksosakest
INVODNKindlastisissejuhatav sõna
PHRAZlebavad lahed, zgifraseoloogiline üksus
grammemid– . Määratud eraldades "," (koma). Välistamiseks märkige grammi ette “-” (miinus).
GrammemaKirjeldus
Perekond
härramehelik
zhrnaiselik
kolmapneutraalne sugu
mr-zhrüldine sugu (orb, joodik)
Number
ühikutainsus
plmitmuses
Juhtum
neidnimetav
rdgenitiiv
dtdaativ
vnsüüdistav
TVinstrumentaalne
jneeessõna
helivokatiiv (isa, jumal)
2 teine ​​genitiiv või teine ​​eessõna kääne
Aeg
nstpraegune aeg
taheTulevik
prshminevikuvorm
Nägu
1lesimene isik
2lteine ​​inimene
3lkolmas osapool
Animatsioon
odanimeerima
Agaelutu
Vaade
St.täiuslik vaade
nsebatäiuslikud liigid
Transitiivsus
npüleminek
neintransitiivne
Pant
dstaktiivne hääl
lehelpassiivne hääl
muud
0 muutumatu
bezlumbisikuline tegusõna
pvlimperatiivne meeleolu (imperative)
atraktsioonomastav (ei kasutata)
eelmineülivõrde (omadussõnade jaoks)
võrdlemavõrdlev aste (omadussõnade jaoks)
kvaliteetkvalitatiivne omadussõna
Semantilised omadused
Niminimi (Ivan, Mihhail)
femmeperekonnanimi (Ivanov, Sidorov)
aruanneisanimi (Ivanovitš, Mihhailovitš)
loktoponüüm (Moskva, Lena, Everest)
lühendlühend (KPSS, RONO)
orgorganisatsioon
küsimusküsiv määrsõna
näidatademonstratiivne määrsõna
slängžargoon
laguneminekõnekeel
archarhaism
HRHkirjaviga
luuletajapoeetiline
profprofessionaalsus
info– kuvage iga vorm lisateabega massiivina

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












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

<0>ROSTOV-ON-DON <1>ROSTOV-ON-DON <2>ROSTOV-ON-DON <3>ROSTOV-ON-DON <4>ROSTOV-ON-DON 46

Kõigi elutute mitmuse omadussõnade saamiseks sõnast "pulm" helistage:

Https://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN&info
Hankige:
("0":("word":"WEDDING","partofspeech":"P","grammems":["DT","QUALITY","MN","NO","OD"]), " 1":("sõna":"PULM","kõneosa":"P","grammeems":["IM","QUALITY","MN","BUT","OD"]), "2" :("sõna":"PULM","kõneosa":"P","grammeems":["VN","KACH","MN","BUT"]), "3":("sõna": "PULM","kõneosa":"P","grammems":["QUALITY","MN","BUT","OD","RD"]), "4":("sõna":"PULM ","kõneosa":"P","grammems":["KVALITEET","MN","BUT","OD","PR"]), "5":("sõna":"PULM" " partofspeech":"P","grammems":["QUALITY","MN","NO","OD","TV"]) ,,"limit":19) Ilma teabeparameetrita:
http://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN
("0":"PULM","1":"PULM","2":"PULM","3":"PULM", "4":"PULM","5":"PULM"," piir":19)

API sõna sugu, nimi: mees, naine hankimiseks

API soo hankimiseks: mees, naine nime järgi. Selle API abil saate kasutajanime abil teada saada kasutaja soo. See välistab vajaduse täita registreerimisel täiendavat vormi.

Tere, Habrahabr!

Täna räägin väikesest, kuid väga kasulikust raamistikust - NameCaseLib.

Arvan, et paljud on kokku puutunud olukorraga, kus inimese perekonnanimi, eesnimi ja isanimi tuli juhtumite kaupa tagasi lükata. See raamistik aitab meil vabaneda paljudest "jalgratastest".

Paigaldamine

NameCaseLibi töötamiseks vajame UTF-8 vormingus tekstiga töötamiseks PHP5 ja php_mbstring teeki.

Suurepärane, nüüd jääb üle vaid raamistik ise ühendada, selleks laadime alla vajalikud failid.

NameCaseLib toetab kahte keelt: vene ja ukraina keelt. Fail NCL.NameCase.ru.php sisaldab venekeelseid käändereegleid, NCL.NameCase.ua.php vastavalt ukraina omasid. NCL-kaust sisaldab raamistiku tuuma, see tähendab põhifunktsioonide komplekti.

Niisiis, loome .php-vormingus faili ja kontrollime selle raamistiku funktsionaalsust.

q ("Maksimov Aleksander Vassiljevitš"); # Väljutage saadud massiiv. (Märkus: tagastab lihtsa indekseeritava massiivi) var_dump($massiivi); ?>

Vastavalt sellele saame samamoodi keelduda ukraina täisnimedest, ühendades ukraina keele käändereeglid.

Kuid vaatame siiski, milliseid parameetreid meetod sisaldab q, ja kuidas seda veel kasutada saab?

Sellel meetodil on 3 parameetrit, millest 2 võib ära jätta. Esimene parameeter on isiku täisnimi, teine ​​suur- ja suurtäht (allpool esitan konstantide loendi; kui suurtähte pole määratud (NULL), tagastab meetod kõik juhtumid) ja kolmas on isiku sugu. (Altpool on toodud ka konstandid; kui te ei määra sugu (NULL), määrab meetod selle ise)

Konstandid

Soo märkimiseks kasutatakse konstante:
  • NCL::$MAN – meessugu
  • NCL::$WOMAN – naine

Vene keele juhtude märkimiseks:

  • NCL::$IMENITLN – nimetavas käändes
  • NCL::$RODITLN – genitiivtäht
  • NCL::$DATELN – daatiivne kääne
  • NCL::$VINITELN – akusatiiv
  • NCL::$TVORITELN - instrumentaalkohver
  • NCL::$PREDLOGN – eessõna kääne

Ukraina keele juhtude märkimiseks:

  • NCL::$UaNazyvnyi – nimesilt
  • NCL::$UaRodovyi – üldvaade
  • NCL::$UaDavalnyi – pikaajaline administraator
  • NCL::$UaZnahidnyi – kuulus video
  • NCL::$UaOrudnyi – relvade väljapanek
  • NCL::$UaMiszevyi – miscevyi vidminok
  • NCL::$UaKlychnyi – isiklik märkus

Märkmed

  1. Nime järjekord ei oma tähtsust.
  2. Pole tähtis, millisel juhul näidatakse täisnime, pärast käänet tagastab meetod salvestatud tähtede.

Täisnime osa määratlus

Kasutades meetodit getFullNameFormat, saame määrata osa või milliseid täisnime osi kasutame.

getFullNameFormat("Maksimov Aleksander Vassiljevitš"); /* Saame vormingu nagu: S F N, kus: - S - Perekonnanimi - N - Eesnimi - F - Keskmine nimi */ echo $fullName; ?>

Aga mida peaksite tegema, kui raamistik ei suuda ikkagi õigesti määrata, kuidas teie valitud nime tagasi lükata?

Selleks pakub teek meetodit qFullName, mis võimaldab teatud järjekorras määrata inimese perekonnanime, eesnime, isanime ja sugu.

qFullName("Maksimov", "Aleksander", "Vasiljevitš", NCL::$MAN, NCL::$TVORITELN, "S N F")."\n"; ?>

Tulemused

NameCaseLib on tõeliselt kasutajasõbralik raamistik, mis sisaldab palju kasulikke funktsioone. Saidil on täielik venekeelne dokumentatsioon.