Skloňovanie priezvisk v prístupe. Ako skloňovať malé a veľké písmená v Exceli? Situácie, kedy funkcia nemusí fungovať správne

Súbor obsahuje procedúry pre 7.7 a 8.x. Do procedúry sa odovzdá reťazec vo formáte Priezvisko Krstné meno Patronymické.

UPD 26.11.10: s vďakou - nová verzia funkcie. Nemám testované! Otázky o práci tejto verzie - jemu, z nejakého dôvodu ju nechce šíriť :)

Funkcia CaseName(ValueName,Case=1,InitialsOnly=False, Value pDelimiter=".")
Ak TypeValue (celé meno)<>Potom zadajte ("String")
Show("Neplatný reťazec odovzdaný ""Veľké písmená celého mena!"""); Návrat celého mena;
Koniec Ak;

// odstránenie viacerých medzier
Zatiaľ čo 1=1 slučka
Celé meno = skrátené LP (StrReplace(Name, " "," "));
If Find(Name," ")=0 Then Abort EndIf;
EndCycle;

If TypeValue(Case)=Type("String") Then
podložka = AbbrLP(NReg(Lev(Prípad,1)));
Ak Find("irdwtp",pad)=0 Potom

Koniec Ak;
ElseIf TypeValue(Case)=Type("Číslo") Potom
Ak (prípad<1) или (Падеж>6) Potom
Report("Nesprávne veľké a malé písmená boli odovzdané ""prípad celého mena""!"); Návrat celého mena;
Koniec Ak;
case=case-1;
Koniec Ak;

Celé meno=AblP(НReg(celé meno)); // toto je pohodlnejšie

// vlastný analyzátor zloženia
Priezvisko="";
Pre d=1 Cyklus StrLength (Názov).
znaky=Priemer (cele meno, th, 1);

Priezvisko=Priezvisko+postava;
EndCycle;
s=d+l; // prekročil medzeru
Meno="";

znaky=Priemer (cele meno, th, 1);
If chars=" " Then Abort EndIf;
Meno=Meno+postava;
EndCycle;
s=d+l; // prekrížte druhú medzeru
Stredné meno="";
Pre y=s Podľa StrLength(celé meno) cyklu
znaky=Priemer (cele meno, th, 1);
If chars=" " Then Abort EndIf;
Stredné meno = Stredné meno + symbol;
EndCycle;

// teraz máme oddelene Priezvisko, Krstné meno a Patronymum.
// začína sa skutočný blok analýzy obsahu a prípadov

// návrat, ak je sám nominatívom. Ak je nastavená možnosť ReturnOnlyInitials, skonvertujte ju na iniciály
If (Left(Case,1)="And") alebo (Case=1) Then
Ak NIE JE Iba iniciály alebo Nájsť (Názov, ".") Potom
Návrat celého mena; // buď už skonvertovaný reťazec, alebo ho netreba konvertovať
Koniec Ak;
NewName = TReg(Priezvisko) + " " + Vreg(Lev(Meno,1)) + pSeparator + Vreg(Lev(Stredné meno,1)) + pSeparator;
Návrat SokrLP (Nové celé meno); // v prípade, že oddeľovač je medzera. Posledný rez
Koniec Ak;

// analýza pohlavia M/F
If Right(Patronymic,1)="a" Then Gender="F" Else Gender="M" EndIf;

// vytvorí štruktúru tabuľky, ktorá ukladá koncovky slov
current=New ValueTable;
StringType=NewTypeDescription("String",NewStringQualifiers(3));
NumberType=NewTypeDescription("Number",NewNumberQualifiers(1,0));
current.Columns.Add("StarOk",StringType); // stará koncovka 2 znaky
// stĺpce s novými koncovkami slov
current.Columns.Add("p"); // rodič
current.Columns.Add("d"); // datív
current.Columns.Add("in"); // akuzatív
current.Columns.Add("t"); // kreatívne
current.Columns.Add("n"); // predložkový
// na určenie, koľko písmen z konca slova sa má odrezať,
current.Columns.Add("NumberSlice",NumberType); // počet vystrihnutých písmen

Vowels="aeeouiyyayu"; // zoznam samohlások ako reťazec

// ======== spracovanie priezviska ==========
// vyplňte tabuľku údajmi pre priezvisko

Ak gender="M" Potom
string=aktualny.Pridat(); // Ivanov
string.StarOk="*s";

rows.CountSlice=0;

Riadok=aktualny.Pridat(); // krasinsky
string.StarOk="*th";
string.r="wow"; string.d="mu"; line.in="th"; string.t="im"; string.p="ohm";
rows.CountSlice=2;

Riadok=aktualny.Pridat(); // všemohúci
line.Starok="sch";
string.r="jeho"; string.d="k nemu"; string.in="jeho"; string.t="im"; string.p="jesť";
rows.CountSlice=2;

Riadok=aktualny.Pridat(); // Biely
string.StarOk="th";
string.r="wow"; string.d="mu"; line.in="th"; string.t="th"; string.p="ohm";
rows.CountSlice=2;

Riadok=aktualny.Pridat(); // bledý
string.StarOk="*th";

rows.CountSlice=1;

Riadok=aktualny.Pridat(); // rabinovič
string.StarOk="*h";

rows.CountSlice=0;

Riadok=aktualny.Pridat(); // opravy, zaliznyak
string.StarOk="*k";
string.r="ka"; string.d="ku"; line.in="ka"; string.t="com"; string.p="ke";
rows.CountSlice=2;

Riadok=aktualny.Pridat(); // shinkar
string.StarOk="*b";
string.r="i"; string.d="u"; string.in="i"; string.t="jesť"; string.p="e";
rows.CountSlice=1;

Riadok=aktualny.Pridat(); // perelman, oganesyan
string.StarOk="*n";

rows.CountSlice=0;

Riadok=aktualny.Pridat(); // jahňacina
string.StarOk="in";
string.r="a"; string.d="y"; line.in="a"; string.t="th"; string.p="e";
rows.CountSlice=0;

ElseIf Gender="F" Potom
string=aktualny.Pridat(); // Sklodovskaja
line.StarOk="th";
string.r="oops"; string.d="oops"; line.in="th"; string.t="oops"; string.p="oops";
rows.CountSlice=2;

Riadok=aktualny.Pridat(); // ivanova
string.StarOk="*a";
string.r="oops"; string.d="oops"; line.in="y"; string.t="oops"; string.p="oops";
rows.CountSlice=1;
Koniec Ak;


If Not EmptyString(Lastname) Then
pb=Right(Priezvisko,3); count="StarOk"; // hľadať to
newPriezvisko=Priezvisko; // ak sa nič nezmení, tak áno
stro=aktuálny.Nájsť(pb, počet);
Ak prísne<>


Inak
// posledné tri znaky striktne nenájdeme, hľadáme dva znaky len podľa posledného
pb=Right(Priezvisko,2);
stro=aktuálny.Nájsť(pb, počet);
Ak prísne<>Nedefinované Potom
Stem=Lev(Priezvisko, StrLength(Priezvisko)-stro.CountSlice);
novePriezvisko=Zaklad+Abb(stro[pad]);
V opačnom prípade // ak sa nenašli dvaja, hľadáme jedného
pb="*"+Right(pb,1);
stro=aktuálny.Nájsť(pb, počet);
Ak prísne<>
Stem=Lev(Priezvisko, StrLength(Priezvisko)-stro.CountSlice);
novePriezvisko=Zaklad+Abb(stro[pad]);


stro=aktuálny.Nájsť(pb, počet);
Ak prísne<>Undefined Potom // nájdené pohľadom
Stem=Lev(Priezvisko, StrLength(Priezvisko)-stro.CountSlice);
novePriezvisko=Zaklad+Abb(stro[pad]);
Koniec Ak;
Koniec Ak;
Koniec Ak;
Koniec Ak;
Inak
newPriezvisko="";
Koniec Ak;

// ======== spracovanie názvu ==========
// vyplňte tabuľku údajmi pre názov
aktualne.Clear();

Ak Gender="M" Potom
// spracovávať výnimky
If Name="lev" Then Name="lev" EndIf;
If Name="paul" Then Name="paul" EndIf;

Riadok=aktualny.Pridat(); // Sergej
string.starok="*th";
string.r="i"; string.d="u"; string.in="i"; string.t="jesť"; string.p="e";
row.cutoff=1;

Riadok=aktualny.Pridat(); // Ivan + Lev + Pavel
string.starok="*s";
string.r="a"; string.d="y"; line.in="a"; string.t="ohm"; string.p="e";
row.cutoff=0;

Riadok=aktualny.Pridat(); // nikita
string.starok="*a";

row.cutoff=1;

Riadok=aktualny.Pridat(); // poklona
string.starok="ka";

row.cutoff=1;

Riadok=aktualny.Pridat(); // Jeremiáš
string.starok="ia";

row.cutoff=1;

Riadok=aktualny.Pridat(); // ilya
string.starok="*i";

row.cutoff=1;

Riadok=aktualny.Pridat(); // Igor
string.starok="*ь";
string.r="i"; string.d="u"; string.in="i"; string.t="jesť"; string.p="e";
row.cutoff=1;

ElseIf Gender="F" Potom
// spracovávať výnimky
//If Name="olga" Then Name="olga" EndIf;

Riadok=aktualny.Pridat(); // Irina
string.starok="*a";
string.r="s"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
row.cutoff=1;

Riadok=aktualny.Pridat(); // Inga, Oľga
string.starok="ha";
string.r="and"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
row.cutoff=1;

Riadok=aktualny.Pridat(); // ester
string.starok="*ь";
string.r="and"; string.d="and"; line.in="b"; string.t="w"; string.p="and";
row.cutoff=1;

Riadok=aktualny.Pridat(); // Mária
string.starok="ia";
string.r="and"; string.d="and"; line.in="u"; string.t="ona"; string.p="and";
row.cutoff=1;

Riadok=aktualny.Pridat(); // sophia
string.starok="*i";
string.r="and"; string.d="e"; line.in="u"; string.t="ona"; string.p="e";
row.cutoff=1;
Koniec Ak;

// stôl je plný. spočítaj posledné 2 písmená a hľadaj ich
If Not EmptyString(Name) Then
pb=Spravo(meno,2); count="StarOk"; // hľadať to
newName=Meno; // ak sa nič nezmení, tak áno
stro=aktuálny.Nájsť(pb, počet);
Ak prísne<>Undefined Potom // okamžite nájdené prísne


Inak // nie je striktne nájdené, hľadáme len toho posledného
pb="*"+Right(pb,1);
stro=aktuálny.Nájsť(pb, počet);
Ak prísne<>Nedefinované Potom // nájdené posledným
Zaklad=Lev(Nazov, StrDlzka(Nazov)-str. Pocet Slice);
newName=base+abbrlp(stro[pad]);
Inak // posledné sa nenašlo, hľadáme písmená podľa typu
pb="*"+?(Nájsť(Vowers,Right(pb,1))=0,"s","g");
stro=aktuálny.Nájsť(pb, počet);
Ak prísne<>Undefined=1 Potom // nájdené podľa typu
Zaklad=Lev(Nazov, StrDlzka(Nazov)-str. Pocet Slice);
newName=base+abbrlp(stro[pad]);
Koniec Ak;
Koniec Ak;
Koniec Ak;
Inak
newName="";
Koniec Ak;

// ======== Spracujeme priezvisko, tu je to jednoduchšie ==========
aktualne.Clear();

Ak Gender="M" Potom
string=aktualny.Pridat();
string.r="a"; string.d="y"; line.in="a"; string.t="jesť"; string.p="e";
row.cutoff=0;
ElseIf Gender="F" Potom
string=aktualny.Pridat();
string.r="s"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
row.cutoff=1;
Koniec Ak;
If Not EmptyString (Patronymic) Then
Základ \u003d Leo (Patronymic, StrLength (Patronymic) - aktuálny. Počet rezov);
novéPatronymické meno = Základ + Skrátené LP (aktuálne [pad]);
Inak
new patronymic="";
Koniec Ak;

IfOnlyInitials Then
noveMeno=Lev(novéMeno,1); newPatronymický=Lev(novýPatronym,1);
Koniec Ak;

// nastavenie prvých písmen na veľké písmená
newPriezvisko=ВReg(Lev(novéPriezvisko,1))+Mid(novéPriezvisko,2);
newName=ВReg(Lev(newName,1))+Average(newName,2);
newPatronymic=ВReg(Lev(newPatronymic,1))+Mid(newPatronymic,2);

// a teraz je všetko spolu
If InitialsOnly Then // ak je zadaný formát iniciál
novéMeno=novéPriezvisko+" "+novéMeno+pOddeľovač+novéPatronymické+pOddeľovač;
Inak
novéMeno=novéPriezvisko+" "+novéMeno+" "+novéPatronym;
Koniec Ak;

If Find(celé meno, ".") Then // V prípade, že vstupný parameter je Priezvisko s iniciálami. Nedotýkajte sa iniciálok
noveMeno = novePriezvisko + " " + TReg(Meno) + Treg(Patronym);
Koniec Ak;

Návrat SokrLP (nové celé meno);
EndFunctions

Tu môžete získať odpovede na otázky o programe Microsoft Excel 57638 471543
44519 357828
Najlepšie odporúčané témy z hlavného fóra 14 80
Ak ste šťastným majiteľom Macu 😉 217 1059

21. september 2018 06:21:34

Časť pre umiestnenie zaplatené otázky, projekty a úlohy a hľadať pre ne vykonávateľov. 2100 13379
Ak ste si stiahli alebo zakúpili doplnok PLEX pre Microsoft Excel a máte otázky alebo požiadavky, kliknite sem. 310 1587
808 11620
Diskusia o funkčnosti, pravidlách atď. 269 3464

Teraz online (hostí: 590, užívateľov: 12, z toho skrytých: 3) ,

Dnes má narodeniny (37), (32), (28), (37), (36), (52)

Celkový počet registrovaných užívateľov: 83105

Zúčastnil sa diskusie: 31843

Celkový počet tém: 105875

skloňovanie veľkých a malých písmen v exceli

V kapitole Iné jazyky a technológie na otázku, či je možné automaticky skloňovať podstatné mená vo formáte Excel, uvádzané autorom Zufar najlepšia odpoveď je Dobrý deň.
Ak hovoríme o celom mene, pracovných názvoch alebo oddeleniach, potom môžete. Pravda, toto je nástroj skôr pre vývojárov. Na to však môže prísť aj používateľ. Príklady obsahujú hotové makrá pre Excel.
Veľa štastia!
PS Vyhľadajte na Googli kľúč „Skloňovanie priezvisk, mien a priezvisk podľa pádov“

22 odpovedí

Ahoj! Tu je výber tém s odpoveďami na vašu otázku: je možné automaticky skloňovať podstatné mená vo formáte Excel

Odpoveď od spláchnuť
Nie, táto funkcia nie je podporovaná v Exceli. V konkrétnom prípade však môžete použiť funkciu IF na výber jednej alebo druhej možnosti.

Odpoveď od Proscénium
Ste v kategórii „Programovanie“, takže vám nikto nemôže zakázať napísať si vlastnú funkciu vo VBA, ktorá bude robiť túto dobročinnú prácu. A práve riešenie problému v tomto formáte je celkom reálne.

Odpoveď od krstiť
Počul som, že reforma ruského jazyka prešla, ale nevedel som si ani predstaviť zavedenie „podstatných mien vo formáte Excel“)))))))

Vlastná funkcia pre MS Excel

Skloňovanie celého mena podľa pádov

Funkcia umožňuje zobraziť priezvisko, krstné meno a priezvisko uvedené v nominatívnom prípade vo forme akéhokoľvek iného prípadu.

Oblasť použitia:

Funkciu je vhodné použiť na automatizáciu generovania dokumentov v MS Excel (alebo na uľahčenie ich vytvárania manuálne), kde musí byť uvedený celý názov nie v nominatívnom prípade: rôzne druhy zmlúv, hotovostné príkazy, potvrdenia, odsúhlasovacie úkony, objednávky , protokoly, splnomocnenia a pod.

Funkcia je tiež nenahraditeľná, ak automatizačné nástroje implementujú tvorbu vyššie uvedených dokumentov v aplikácii MS Word na základe údajov v tabuľkách MS Excel.

Príklady použitia:

  • v zmluve: „v osobe prednostu Baranov Petr Vjačeslavovič«
  • v peňažných zárukách: „vydané Gnatyuk Pavel Vasilievič"," prijaté od Gritsenko Irina Sergejevna«
  • v plnej moci: „Poverujem vedením vozidla Smirnitsky Vitalij Valerijevič«
  • v poradí: „vymenovať Stepašová Oľga Nikolajevna«
  • v zápisnici: „bol vypracovaný protokol Dvoržeckij Nikita Ivanovič«

Čo sa implementuje:

  • priezviská so všetkými koncovkami bežnými na území krajín SNŠ "-ov", "-ev", "-in", "-yan (ts)", "-sky (-tsky)", "-sky (- tsky)" "", "-th", "-th", "-ich", "-ets", "-nko", "-uk", "-yuk", "-ich", "-iya", atď.: Pavlov, Zinoviev, Gagarin, Petrosjan, Vysockij, Trubetskoy, Tsoi, Zadorozhny, Sadovnichy, Sedych, Dolgikh, Soskovets, Nesterenko, Goncharuk, Danilyuk, Rabinovič, Danelia, Kvasha, Vrubel, Kozak, Kazachok, atď. ako zodpovedajúce ženské priezviská
  • zohľadňujú sa rozdiely v skloňovaní mužských a ženských priezvisk: Weaver Viktor a Weaver Svetlana, Kozovets Anton a Kozovets Ekaterina
  • zložené priezviská sú spracované správne: napríklad Mamin-Sibiryak, Saltykov-Shchedrin, Nemirovič-Danchenko, Lebedev-Kumach
  • cudzie priezviská sa neskloňujú: Galois, Morois, Defoe, Dali, Meringue, Verdi, Garcia, Hemingway atď.
  • patronymiká s časticami „-ogly“, „-kyzy“, „ibn“ sú úspešne spracované: Mammadov Polad Murtuza oglu -> Mamedov Polad Murtuza oglu, Gassan Abdurakhman ibn Khattab -> Hassan Abdurakhman ibn Khattab, Abu Ali ibn Sina -> Abu Ali ibn Sinai
  • pohlavie (muž/žena) sa automaticky určí podľa rodného priezviska a na základe toho sa vyberú vhodné pravidlá skloňovania
  • v situáciách, keď je ťažké automaticky určiť pohlavie (prostredné meno je cudzie alebo chýba), môžete zadať pohlavie ako parameter funkcie
  • je možný výstup v skrátenej forme „priezvisko + iniciály“: Polozov N. A., Vasilyeva A. K., Dvorzhetsky E. E.
  • možnosť využitia ako nadstavby(možno použiť vo všetkých spisoch na tomto pracovisku), a vo formulári kód vložený do súboru(funkcia bude fungovať v tomto súbore na akomkoľvek pracovisku - je vhodné, ak súbor napr. pošleme protistrane)
  • otvorený zdrojový kód - ak chcete, môžete si algoritmus preštudovať alebo ho upraviť

Ako sa pripojiť?

Program je jeden súbor s názvom bdgFIOPropisyu.bas. Aby ste ju mohli použiť v konkrétnom súbore, funkcia musí byť importovaná do tohto súboru. Na to potrebujete:

  1. otvorte súbor MS Excel, v ktorom chcete funkciu použiť
  2. vstúpte do editora VBA stlačením klávesovej skratky "Alt + F11" alebo cez ponuku:
  3. v hlavnej ponuke editora VBA vyberte položku „Súbor“ -> „Importovať súbor ...“:
  4. v zobrazenom okne výberu súboru vyberte súbor bdgFIOPropisyu.bas a kliknite na tlačidlo "Otvoriť":

Všetko, programový kód sa naimportuje a dá sa použiť.

Ako použiť?

Tu je niekoľko ďalších príkladov jeho použitia:

Situácie, v ktorých môže funkcia fungovať nesprávne:

Napriek tomu, že existuje pomerne veľa situácií, kedy môže byť fungovanie funkcie neuspokojivé, pravdepodobnosť, že sa v praktickej práci stretnete s takýmto úplným názvom, je pomerne malá, pretože v 99,9 % prípadov sa priezviská nachádzajúce sa na území Ruska odmietajú podľa všeobecných pravidiel.
Okrem toho je potrebné poznamenať, že iné algoritmy a programy tiež nemôžu zaručiť správnosť výsledku v 100% prípadov - ruský jazyk je príliš veľký a výkonný na to, aby bol opísaný súborom logických pravidiel (pozri nižšie o vplyve postavenie prízvuku v slove, pôvod priezviska, o závislosti písania ženskej podoby priezviska od písania mužského rodu a pod.).

  • Podľa pravidiel ruského jazyka sa skloňuje muž a žena cudzí jazyk Priezviská končiace na „-a“ a „-ya“ závisia od miesta prízvuku v slove a od pôvodu priezviska.
    Všetky priezviská končiace na neprízvučný„-a“ po spoluhláskach sa skloňujú: Seneca -> Seneca, Petrarcha -> Petrarcha, Smetana -> Smetana, Kurosawa -> Kurosawa, Glinka -> Glinka, Okudžava -> Okudžava atď. Skloňovanie priezvisk s šok„-a“ na konci závisí od pôvodu: priezviská francúzskeho pôvodu sa neskloňujú: Dumá, Degá, Fermá, Petipá atď., priezviská iného pôvodu (zo slovanských a orientálnych jazykov) sa skloňujú: Mitta -> Mitty, Kvasha -> Kvashi, Panvica -> Panvice, Poker -> Pokery, Hamza -> Hamza atď.
    Podobne aj priezviská francúzskeho pôvodu so zdôrazneným „-ya“ na konci sú nesklonné: Zola, Troyat. Všetky ostatné priezviská na "-ya" sú odmietnuté: Golovnya -> Golovny, Danelia -> Danilia, Beria -> Beria, Goya -> Goya.
    Keďže nie je možné programovo určiť polohy prízvuku a pôvod priezviska, algoritmus programu predpokladá, že všetky takéto priezviská sa skloňujú podľa všeobecných pravidiel. Preto francúzske priezviská s prízvukom na koncovke spracuje program nesprávne: Dumas -> Dumas, Zola -> Zoli, Petipa -> Petipa.
  • Mužské priezviská končiace na "-y", "-y", "-oy" sa odmietajú ako prídavné mená Gorky -> Gorky, požehnaný -> požehnaný, obrnený -> obrnený. Výnimkou sú prípady, keď je priezvisko s takouto koncovkou všeobecným podstatným menom (Kozodoy, Vodopoy, Genii, Scenario) alebo je cudzieho pôvodu (Tsoi, Tskhoi, Choi). Keďže nie je možné programovo určiť, či priezvisko je takouto výnimkou, podmienečne sa akceptuje, že všetky priezviská s koncovkami „-y“, „-y“, „-y“ sa ako prídavné mená skloňujú. V drvivej väčšine prípadov to platí, výnimočne však pri priezviskách-podstatných menách bude výsledok funkcie chybný: Kozodoy Jakov -> Koza Jakov, Genius Stefan -> Genego Stefan.
    Výnimočne však algoritmus berie do úvahy skloňovanie priezvisk s týmito koncovkami a kratšími ako 5 písmen (hlavne kórejského pôvodu): Tsoi Viktor -> Tsoi Viktor.
  • V niektorých prípadoch je správne skloňovanie ženského priezviska končiace na „-ina“, „-ova“ možné iba vtedy, ak je známe skloňovanie zodpovedajúceho mužského priezviska: Zhemchuzhina Lyudmila, Malina Svetlana možno odmietnuť ako v obvyklej forme: Zhemchuzhina Lyudmila -> Zhemchuzhina Lyudmila, Malina Svetlana -> Malina Svetlana (ak zodpovedajúce mužské priezviská sú napríklad Zhemchuzhin Boris a Malin Oleg) a vo forme podstatného mena: Zhemchuzhina Lyudmila -> Zhemchuzhina Lyudmila, Malina Svetlana -> Malina Svetlana (ak sú mužské formy priezviska, napríklad Zhemchuzhina Boris a Malina Oleg).
    Nie je možné brať do úvahy takéto nuansy v algoritme, takže všetky ženské priezviská sú spracovávané funkciou podľa rovnakých pravidiel (ako prídavné mená), čo môže v niektorých prípadoch viesť k nesprávnym výsledkom.
  • Podobná situácia je pri mužských a ženských priezviskách zakončených na „-ov (a)“, „-ev (a)“, „-in (a)“, ktoré sú homonymné so všeobecným podstatným menom: Borov, Lev, Filin, Barin. , Korov, Sova, Maľba, Perie, Starovek atď.). Totožnosť priezviska a podstatného mena nie je možné programovo určiť žiadnymi formálnymi znakmi, preto skloňovanie takýchto priezvisk podľa jednotných všeobecných pravidiel vedie k nesprávnym výsledkom tvaru: Lev Pavel -> Levy Pavel, Filin Sergey -> Filin Sergey, Korov Ksenia -> Korovaya Kseniya, Sova Olga -> Sova Olga, Maľba od Ally -> Maľba od Ally.
  • Mužské priezviská končiace na mäkké znamenie majú tendenciu: Vrubel Michail -> Vrubel Michail, Gogol Nikolai -> Gogol Nikolai atď. Pri skloňovaní však koncovky takýchto priezvisk závisia od toho, o aké podstatné mená – mužské, ženské alebo stredné – ide.
    Pohlavie podstatného mena nie je možné určiť algoritmicky, preto v prípadoch, keď je mužské priezvisko podstatným menom ženského alebo stredného rodu, funkcia nebude fungovať správne: Stal Ivan -> Stal Ivan, Palina Victor -> Palina Victor.
  • Tvorenie inštrumentálneho prípadu priezvisk končiacich na „-zha“, „-tsa“, „-cha“, „-sha“, „-sha“ závisí od prízvuku v slove: ak je táto koncovka neprízvučná, potom keď skloňovanie sa mení na "-ey": Kapitsa Peter -> Kapitsa Peter, Cloud Fedor -> Cloud Fedor; ak je koncovka prízvukovaná, nahrádza sa „-oy“: Kvasha Igor -> Kvasha Igor, Candle Ivan -> Candle Ivan. Podobne je to aj s priezviskami zakončenými na „-ets“: bez prízvuku sa koncovka zmení na „-em“: Palety Viktor -> Finger Viktor; v strese - na "-tej": Soskovets Oleg -> Soskovets Oleg.
    Ako je uvedené vyššie, nie je možné programovo určiť polohy stresu v slove, preto programový algoritmus predpokladá, že v slovách končiacich na „-zha“, „-tsa“, „-cha“, „-sha“, „ -sha“ , koncovka je neprízvučná (takýchto slov je viac), to znamená, že inštrumentálny pád je vždy tvorený koncovkou „-ey“. Naopak, pri slovách končiacich na „ets“ sa predpokladá, že koncovka je pod prízvukom, to znamená, že sa bude skloňovať s koncovkou „-om“. Preto sa v iných prípadoch budú pozorovať chyby formulára: Igor Kvasha, Ivan Svechey, Viktor Finger.
  • Podľa pravidiel ruského jazyka sa prvá časť dvojitého ruského priezviska odmietne, ak sa môže použiť ako priezvisko samo o sebe: dielo Mamin-Sibiryak, príbeh Saltykova-Shchedrina, opera Rimského-Korsakova atď. . Inak sa to nemení: obraz od Van Dycka, dobrodružstvá dona Juana, panoša dona Quijota atď. Takže napríklad v priezvisku Semenov-Tyan-Shansky je naklonená prvá časť, ale nie po druhé: diela Semenova-Tyan-Shanského.
    Opäť nie je možné algoritmicky určiť, či je zložka priezviska nezávislá, preto sa pre prácu predpokladá, že všetky časti zloženého priezviska by sa mali odmietnuť (vo väčšine prípadov je to tak), čo v počet situácií vedie k chybám: Van Dyck, Dona - Quijote, Semjonov-Tyan-Shansky.
  • Cudzie priezviská končiace na „-ov“ a „-in“ v inštrumentálnom prípade menia koncovku na „-th“: Benjamin Franklin, Charles Darwin, Charlie Chaplin, Alexander Green. „Ruské“ priezviská s podobnými koncovkami končia na „-y“: Ivanov, Gagarin, Fonvizin atď. Napriek tomu, že vyššie uvedené priezviská (Franklin, Darwin, Chaplin, Green) sú v algoritme brané do úvahy ako výnimky, je malá šanca, že sa vyskytnú ďalšie podobné cudzie priezviská - v tomto prípade výsledok funkcie bude nesprávne.

Pravidlá pre skloňovanie priezvisk a mien sa používajú v súlade s odsekmi 13.1 a 13.2 práce N. A. Eskovej. Ťažkosti pri skloňovaní podstatných mien. Vzdelávacie a metodické materiály k praktickým cvičeniam na kurze „Jazyk modernej polygrafie“(Štátny tlačový výbor ZSSR. Celozväzový inštitút pre pokročilú odbornú prípravu pracovníkov tlače. M., 1990).

Cena: 1500 rubľov