Skloňování celého jména - NameCaseLib PHP Framework. Skloňování slov v PHP Skloňování do genitivu php

Často je potřeba přechylovat jména v PHP. Souhlasíte s tím, že věta " Přidat jako přítele Ilyu"Zní to mnohem hůř než" Přidejte Ilyu jako přítele". Proto Skloňování jmen podle velkých a malých písmen v PHP To je vyžadováno poměrně často a v tomto článku vám řeknu, jak to můžete implementovat na svůj web.

Hned řeknu, že bohužel neexistuje žádná ideální možnost. První možnost je velmi zřejmá: najít databázi jmen, která budou ve všech případech, a přidat tuto tabulku do své. Poté podle jména v nominativním případě vyhledejte odpovídající případ v databázi. Nevýhody jsou zde zřejmé: obrovská databáze, nemůže pokrýt všechna jména, další zatížení serveru.

Druhou možností je napsat si vlastní třída skloňování jmen v PHP, nebo použijte již hotový. Vzhledem k tomu, že pravidla v ruštině jsou poměrně složitá a navíc existuje spousta výjimek, budete potřebovat velmi velkou knihovnu, a to ani zdaleka 100% záchrana. Nejoblíbenější ze všech knihoven zabývajících se Skloňování jmen v PHP, je NameCaseLib .

Po stažení této knihovny a umístění na svůj web ji můžete používat takto:

Require_once "NCL.NameCase.ru.php"; // Připojte ruskou knihovnu
$case = new NCLNameCaseRu(); // Vytvoří objekt třídy NCLNameCaseRu
$array = $case->q("Rusakov Michail Jurijevič"); // Dostaneme pole 6 prvků odpovídajících 6 případům, ve kterých se objeví vstupní řetězec
print_r($array); // Výstup pole
?>

Jak vidíte, používání knihovny je velmi jednoduché. Na druhou stranu moje hlavní rada by byla tato: Pokud je to možné, vyhněte se nutnosti slova úplně skloňovat.. Přesto občas lidé zavedou něco, co se nedá nijak naklonit, a pokusy o navození budou vypadat směšně. Není nutné psát" Přidejte Ilyu jako přítele"Lze to napsat jednoduše" Přidat jako přítele„Na stránce Ilya.

Modul morpher.so je určen pro pádové skloňování slov a slovních spojení - příjmení, křestní jména a patronymie, názvy měst a zboží - v ruštině a ukrajinštině.

Funkce skloňování po pádech

Jeden milion dolarů jde dozNaberezhnye Chelny", "tyč"); ?>!

V důsledku toho dostaneme:

Jeden milion dolarů dostane Vasilij Pupkin z Naberezhnye Chelny!

Funkce morpher_inflect ohýbá frázi v nominativním případě (první argument) na libovolný pád (druhý argument). Případ může mít následující významy:

Všechny řetězce předané do knihovny musí být v kódování UTF-8. Výsledek je vrácen také v UTF-8.

Odpovídající funkce pro ukrajinský jazyk se nazývá morpher_ukr_inflect. Zatím funguje pouze s příjmeními, křestními jmény a patronymií a od ruštiny se liší v názvech případů:

Překlad do množného čísla zatím nebyl v ukrajinské verzi implementován.

Funkce rozdělení jména na komponenty

Funkce morpher_split_fio rozdělí vstupní řetězec na pole příjmení, křestní jméno a druhé jméno

F: Pupkin I: Vasily O:

Pluralizační funkce

Pokud do druhého parametru přidáte řetězec "mn", výsledek bude v množném čísle:

Zbývající skladem 238 .

Ve skladu zbývá 238 pokerů.

Pokud je první parametr již množný, vrátí se následující:

#ERROR: Parametr 1 "text" je množné číslo.

Funkce určení rodu

" y " , " f " => " y " , " n " => " oh " , " p " => " y " ); $name = "experti"; $rod = morpher_get_gender ($name); echo "Respektujeme vás." $ends [ $rod ] . " ". $jméno . " !\n " ; ?>

K určení pohlaví příjmení, křestních jmen a patronymií v ukrajinštině použijte funkci morpher_ukr_get_gender. Vrátí pouze "m" (muž) nebo "f" (žena).

Funkce psaní čísel a peněžních částek

Funkce morpher_spell vygeneruje číslo a vloží danou měrnou jednotku do požadovaného případu:

kalendářní den" ); // 28 (dvacet osm) kalendářních dnů morpher_spell("1,2", "procento"); // 1,2 (jeden bod dva) procenta morpher_spell(2, "den"); // 2 (dva) dny ?>

Pokud potřebujete vložit slova do textu v určitém případě, zadejte velikost písmen jako třetí parametr:

Běhemkalendářní den", "R"); ?> .

Výsledkem je „Do 28 (28) kalendářních dnů.“

Přijatelné velikosti písmen: I, R, D, V, T, P a jejich analogy psané latinkou, viz. Tato funkce nepodporuje tvary předložek (predl-o a gde).

U názvů některých peněžních jednotek vytváří funkce morpher_spell pravopis takto:

Sto dvacet tři rublů 45 kopejek morpher_spell(123,45, "USD"); // Sto dvacet tři amerických dolarů 45 centů morpher_spell(123,45, "euro"); // Sto dvacet tři eur 45 centů?>

V případě potřeby můžete použít zkrácené názvy peněžních jednotek s tečkou nebo bez tečky:

Sto dvacet tři rublů. 45 kop morfer_spell(123,45, "$"); // Sto dvacet tři amerických dolarů 45 centů morpher_spell (123,45, " UAH " ); // Sto dvacet tři UAH. 45 kop?>

Nebo třípísmenné kódy měn mezinárodního standardu ISO 4217, např. RUB, USD, EUR atd. V tomto případě je název země automaticky součástí názvu měny:

Sto dvacet tři ruských rublů 45 kopejek morfer_spell(123,45, "UAH"); // Sto dvacet tři ukrajinské hřivny 45 kopejek morpher_spell(123,45, "KZT"); // Sto dvacet tři kazašských tenge 45 tiynů?>

Chyba při zpracování

Pokud dojde k chybě, všechny funkce knihovny vrátí řádek začínající "#ERROR: " .

#ERROR: Parametr 1 "text" by neměl být prázdný.
#ERROR: Parametr 2 „case“ by neměl být prázdný.
#ERROR: Parametr 1 „text“ není ruský.
#ERROR: Parametr 2 "case" je neplatný.
#ERROR: Parametr 1 "text" je množné číslo.

Pokud nechcete, aby uživatel viděl tyto zprávy, zkontrolujte počáteční podřetězec "#ERROR: ".

Funkce morpher_inflect očekává 2 parametry a morpher_get_gender - jeden. Pokud je zavoláno s nesprávným počtem parametrů, interpret PHP vydá varování a pokračuje ve spouštění programu.

Instalace modulu na Linux

Počínaje verzí 1.3.0 poskytujeme modul pro linuxovou verzi PHP ve formě předkompilovaných souborů morpher.so zabalených v archivu. Tyto soubory jsou vhodné pro použití v následujících distribucích Linuxu:

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

Jediné, co musíte udělat, je napsat nám, abychom získali morpher.so pro vaši distribuci, extrahovali morpher.so z archivu a morpher.so jako rozšíření PHP. Binární kompatibilita takového modulu s vaším systémem však není zaručena, protože modul stavíme pouze na „čistých“ systémech s výchozím nastavením a s verzí PHP, kterou správce systémových balíčků nabízí. Pokud je modul nekompatibilní, PHP jej nebude moci načíst jako rozšíření. Pokud žádný z hotových souborů modulu není vhodný pro váš systém, musíte modul sestavit z poskytnutého zdrojového kódu.

Pro pohodlí a zjednodušení postupu sestavení modulu obsahuje distribuční sada sadu skriptů, které automatizují instalaci balíčků nezbytných pro kompilaci, sestavení modulu a registraci modulu jako rozšíření pro PHP. Vzhledem k široké škále distribucí operačních systémů, různým možnostem konfigurace a funkcím rozšíření budovy pro php musíte pochopit, že v některých případech může být při instalaci modulu potřeba dalších akcí, které nejsou implementovány pomocí montážních skriptů.

Chcete-li spustit automatickou instalaci, rozbalte distribuci do libovolného adresáře, například morpher:

# mkdir morfér # cd morfér # tar xf ../morpher.tar # cd php

Spusťte skript sestavení pomocí příkazu:

# bash build.sh

Pokud bude úspěšný, soubor modulu morpher.so se zkompiluje a přesune do adresáře php extensions. Modul se zaregistruje v konfiguraci php a funkčnost modulu se zkontroluje automaticky pomocí testu. Textový výstup skriptu sestavení by měl obsahovat zprávu o úspěšném testování:

Probíhají testy... ... hotovo.

Váš modul je připraven k použití. Adresář lze nyní smazat:

# rm -r morfér

Máte-li problémy se sestavením, musíte se ujistit, že jsou na vašem systému nainstalovány a nakonfigurovány všechny potřebné balíčky. Pro sestavení a provoz modulu musíte nainstalovat:

Pomocí příkazu můžete začít pouze budovat modul bez dalších akcí:

# bash kompilovat.sh

Po úspěšné kompilaci bude soubor morpher.so umístěn v adresáři morpher/php/modules.

Soubor morpher.so je třeba umístit do adresáře rozšíření PHP, například:

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

Adresář rozšíření se může ve vašem systému lišit.

# bash setup.sh

nebo zadejte název přípony sami v souboru php.ini. Funkčnost rozšíření můžete zkontrolovat ručním spuštěním testovacího PHP skriptu z příkazového řádku:

# php -f test.php Probíhající testy... ... hotovo.

Možné chyby při montáži a způsoby jejich odstranění

Chyba: /usr/bin/ld: nelze najít -lm

Důvod: Nemáte nainstalovaný balíček glibc-static.

Chyba: .../include/php/php_config.h:2526:30: chyba: volání přetíženého „isnan(double&)“ je nejednoznačné. (číslo řádku se může lišit podle vaší verze a konfigurace PHP)

Velmi oblíbený problém Weboví programátoři, Tento Skloňování slov v PHP. Potřebujete například zobrazit, před kolika minutami byla zpráva zanechána. Můžete jednoduše napsat číslo a slovo " minut". Ale pak to bude napsáno velmi zvláštně, například " 1 minuta", "2 minuty“ a tak dále. Ve skutečnosti bez Skloňování slov v PHP Nemůžete to udělat, pokud samozřejmě nechcete psát rusky.

Tento problém se začátečníkům bude zdát velmi obtížný, ale ve skutečnosti existuje určitý vzorec skloňování slov. Podívej se sám: " 1 minuta, 2 minuty, 5 minut, 11 minut, 19 minut, 21 minut, 22 minut, 25 minut a tak dále„Vidíš vzor? 1, 21, 31, 41 - vždy bude " minuta Pokud je nejméně významná číslice větší 1 a méně 5 , zatímco samotné číslo při dělení 100 má zbytek větší 20 (to není například číslo 12 a ne 112 ), pak tam bude " minut". V ostatních případech" minut".

funkce getWord($číslo, $přípona) (
$keys = array(2, 0, 1, 1, 1, 2);
$mod = $číslo % 100;
$suffix_key = ($mod > 7 && $mod< 20) ? 2: $keys;
return $suffix[$suffix_key];
}
$array = array("minuta", "minuty", "minuty"); $n = 21;

echo "$n $slovo
";
$n = 11;
$slovo = getWord($n, $pole);
echo "$n $slovo
";
$n = 4;
$slovo = getWord($n, $pole);
echo "$n $slovo
";
?>

Spuštěním tohoto skriptu to uvidíte Skloňování slov v PHP se stane s třeskem. Mohu pouze dodat, že kromě „ minut"může být" den", "hodina", "Člověk", "počítač“ a všechna ostatní podstatná jména, že klesat v závislosti na čísle.

JavaScript je ve vašem prohlížeči blokován. Povolte prosím JavaScript, aby stránka fungovala!

API pro deklinaci slov, získání rodu (mužského, ženského), pád, skloňování a další charakteristiky slova

Rozhraní API pro skloňování slov

Možnosti:
skloňovat- slovo nebo seznam slov oddělených mezerou. Následující možnosti jsou dostupné pouze v případě, že je přenášeno jedno slovo.
část mluvy
DeskriptorPříkladPopis
CMatkapodstatné jméno
PČervenépřídavné jméno
KR_APILKrásnákrátké přídavné jméno
INFINITIVjítinfinitiv
Gpříchodosobní sloveso
Participiumchůzeparticipium
PARTICIPIUMjítparticipium
KR_PARTICIPLEpostavenýkrátké příčestí
ČÍSLOosmčíselný (kvantitativní)
ČÍSLO-Posmýpořadové číslo
SLEČNAOnzájmeno-podstatné jméno
MS-PREDCnicpredikativní zájmeno
MS-Pžádnýzájmenné přídavné jméno
NChladnýpříslovce
PŘEDEKZajímavýpredikát
PŘÍPRAVKApodzáminka
SVAZAsvaz
MEZIAucitoslovce
ČASTOno, chtěl bychčástice
INVODNRozhodněúvodní slovo
PHRAZplovoucí zátoky, zgifrazeologická jednotka
grammy– . Zadáno oddělené "," (čárkou). Chcete-li vyloučit, uveďte před gramem "-" (mínus).
GrammemaPopis
Rod
panmužský
zhrženský
Ststřední rod
mr-zhrobecné pohlaví (sirotek, opilec)
Číslo
Jednotkyjednotné číslo
plmnožný
Pouzdro
jimjmenovaný
rdgenitiv
dtdativ
vnakuzativ
televizeinstrumentální
atdpředložkový
zvukvokativ (otec, bůh)
2 druhý genitiv nebo druhý předložkový pád
Čas
nstpřítomnost
vůleBudoucí čas
prshminulý čas
Tvář
1lprvní osoba
2ldruhá osoba
3ltřetí strana
Animace
odanimovat
Aleneživý
Pohled
Svatý.dokonalý výhled
nsnedokonalý druh
Tranzitivita
nppřechod
neintranzitivní
Slib
dstaktivní hlas
stranapasivní hlas
jiný
0 neměnný
bezlneosobní sloveso
pvlrozkazovací způsob (imperativ)
atrakcepřivlastňovací (nepoužito)
předchozísuperlativ (pro přídavná jména)
porovnatsrovnávací stupeň (pro přídavná jména)
kvalitníkvalitativní přídavné jméno
Sémantické rysy
názevjméno (Ivan, Michail)
femmepříjmení (Ivanov, Sidorov)
zprávapatronymum (Ivanovič, Michajlovič)
loktoponym (Moskva, Lena, Everest)
zkrzkratka (KPSS, RONO)
orgorganizace
otázkatázací příslovce
naznačitukazovací příslovce
slangžargon
rozkladhovorový
obloukarchaismus
HRHpřeklep
básníkpoetický
profprofesionalita
info– zobrazit každý formulář jako pole s dalšími informacemi

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

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

Chcete-li získat všechna neživá přídavná jména v množném čísle od slova „svatba“, zavolejte:

Https://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN&info
Dostat:
("0":("slovo":"SVATBA","partofspeech":"P","grammems":["DT","QUALITY","MN","NE","OD"]), " 1":("slovo":"SVATBA","partofspeech":"P","grammems":["IM","QUALITY","MN","ALE","OD"]), "2" :("word":"SVATBA","partofspeech":"P","grammems":["VN","KACH","MN","VUT"]), "3":("slovo": "WEDDING","partofspeech":"P","grammems":["QUALITY","MN","ALE","OD","RD"]), "4":("slovo":"SVATBA ","partofspeech":"P","grammems":["QUALITY","MN","ALE","OD","PR"]), "5":("word":"SVATBA" " partofspeech":"P","grammems":["QUALITY","MN","NO","OD","TV"]) ,,"limit":19) Bez parametru info:
http://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN
("0":"SVATBA","1":"SVATBA","2":"SVATBA","3":"SVATBA", "4":"SVATBA","5":"SVATBA"," limit":19)

API pro získání slovního rodu, jména: muž, žena

API pro získání pohlaví: muž, žena podle jména. Pomocí tohoto rozhraní API můžete získat pohlaví uživatele pomocí uživatelského jména. Odpadne tak nutnost vyplňovat při registraci další formulář.

Dobrý den, Habrahabr!

Dnes budu mluvit o malém, ale velmi užitečném frameworku – NameCaseLib.

Myslím, že mnozí se setkali se situací, kdy bylo nutné odmítnout příjmení, křestní jméno a patronymii jednotlivě. Tento rámec nám pomůže zbavit se mnoha „kol“.

Instalace

Aby NameCaseLib fungoval, potřebujeme PHP5 a knihovnu php_mbstring pro práci s textem ve formátu UTF-8.

Skvělé, nyní zbývá pouze připojit samotný framework, k tomu si stáhneme potřebné soubory.

NameCaseLib podporuje dva jazyky: ruštinu a ukrajinštinu. Soubor NCL.NameCase.ru.php obsahuje ruská deklinační pravidla, NCL.NameCase.ua.php, respektive ukrajinská. Složka NCL obsahuje samotné „jádro“ frameworku, tedy sadu základních funkcí.

Pojďme si tedy vytvořit soubor ve formátu .php a zkontrolovat funkčnost tohoto frameworku.

q("Maksimov Alexander Vasilievich"); # Výstup výsledného pole. (Poznámka: vrací jednoduché indexovatelné pole) var_dump($array); ?>

V souladu s tím můžeme stejným způsobem odmítnout ukrajinská celá jména spojením ukrajinských pravidel skloňování.

Podívejme se ale ještě na to, jaké parametry metoda obsahuje q a jak se to dá ještě využít?

Tato metoda má 3 parametry, 2 z nich lze vynechat. Prvním parametrem je celé jméno osoby, druhým je případ (níže uvedu seznam konstant; pokud případ není uveden (NULL), pak metoda vrátí všechny případy) a třetím je pohlaví osoby. (Konstanty jsou také uvedeny níže; pokud neuvedete pohlaví (NULL), metoda jej určí sama)

Konstanty

K označení pohlaví se používají konstanty:
  • NCL::$MAN – mužský rod
  • NCL::$WOMAN – žena

Pro označení případů ruského jazyka:

  • NCL::$IMENITLN - nominativní případ
  • NCL::$RODITLN - pád genitivu
  • NCL::$DATELN - dativní případ
  • NCL::$VINITELN - případ akuzativu
  • NCL::$TVORITELN - instrumentální pouzdro
  • NCL::$PREDLOGN - pád předložek

Pro označení případů ukrajinského jazyka:

  • NCL::$UaNazyvnyi – jmenovka
  • NCL::$UaRodovyi – obecný pohled
  • NCL::$UaDavalnyi – dlouholetý admin
  • NCL::$UaZnahidnyi – slavné video
  • NCL::$UaOrudnyi – zobrazení zbraní
  • NCL::$UaMiszevyi – miscevyi vidminok
  • NCL::$UaKlychnyi – osobní poznámka

Poznámky

  1. Na pořadí jména nezáleží.
  2. Nezáleží na tom, v jakém případě je uvedeno celé jméno, po skloňování metoda vrací uloženou velikost písmen.

Definice části celého jména

Pomocí metody getFullNameFormat můžeme určit část, respektive jaké části celého jména používáme.

getFullNameFormat("Maksimov Alexander Vasilievich"); /* Dostaneme formát jako: S F N, kde: - S - Příjmení - N - Jméno - F - Druhé jméno */ echo $fullName; ?>

Co byste ale měli dělat, pokud framework stále nedokáže správně určit, jak odmítnout vámi zvolené jméno?

Pro tento účel knihovna poskytuje metodu qFullName, která umožňuje zadat příjmení, jméno, patronymii a pohlaví osoby v určitém pořadí.

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

Výsledek

NameCaseLib je opravdu uživatelsky přívětivý framework, který obsahuje mnoho užitečných funkcí. Stránka má kompletní dokumentaci v ruštině.