Perekonnanimede käänded juurdepääsus. Kuidas teha Excelis tõstukäände? Olukorrad, kus funktsioon ei pruugi korralikult töötada

Fail sisaldab protseduure 7.7 ja 8.x jaoks. Protseduurile edastatakse string vormingus Perekonnanimi Eesnimi Isanimi.

UPD 26/11/10: tänuga – funktsiooni uus versioon. Ma pole testinud! Küsimused selle versiooni töö kohta - talle, millegipärast ei taha ta seda levitada :)

Funktsioon CaseName(Väärtusenimi,Case=1,InitialsOnly=False, Value pDelimiter=".")
Kui TypeValue (täisnimi)<>Type("String") Seejärel
Show("Vigane string edastati ""Täisnime suurtähtedele!"""); Täisnime tagastamine;
EndIf;

// mitme tühiku eemaldamine
Kuigi 1=1 Loop
Täisnimi = lühendatud LP (StrReplace(Nimi, " "," "));
Kui Leia(nimi," ")=0 Siis Katkesta EndIf;
EndCycle;

Kui TypeValue(Case)=Type("String") Siis
pad = AbbrLP(NReg(Lev(juht,1)));
Kui Find("irdwtp",pad)=0 Siis

EndIf;
ElseIf TypeValue(Case)=Type("Arv") Siis
Kui (juhtum<1) или (Падеж>6) Siis
Report("Vale suurtäht edastati ""täisnime juhtumile""!"); Täisnime tagastamine;
EndIf;
juhtum=juhtum-1;
EndIf;

Täisnimi=AblP(НReg(täisnimi)); // nii on mugavam

// oma koostise analüsaator
Perekonnanimi="";
Kui d=1 tsükli StrLength(Name) järgi
chars=Keskmine(täisnimi, th, 1);

Perekonnanimi=Perenimi+märk;
EndCycle;
s=d+1; // ületas tühiku
Name="";

chars=Keskmine(täisnimi, th, 1);
If chars=" " Siis Katkesta EndIf;
Nimi=Nimi+märk;
EndCycle;
s=d+1; // teise tühiku ületamine
Keskmine nimi="";
For y=s StrLength(täisnimi) Tsükkel
chars=Keskmine(täisnimi, th, 1);
If chars=" " Siis Katkesta EndIf;
Keskmine nimi = keskmine nimi + sümbol;
EndCycle;

// nüüd on meil perekonnanimi, eesnimi ja isanimi eraldi.
// algab tegelik sisu- ja juhtumianalüüsi plokk

// tagastab, kui ise on nimetav. Kui ReturnOnlyInitials on määratud, teisendage initsiaalideks
If (Left(Case,1)="Ja") või (Case=1) Siis
Kui EI OLE ainult initsiaalid või Find(nimi, ".") Siis
Täisnime tagastamine; // string on juba teisendatud või pole vaja teisendada
EndIf;
UusNimi = TReg(Perenimi) + " " + Vreg(Lev(Nimi,1)) + pSeparaator + Vreg(Lev(keskmine nimi,1)) + pSeparaator;
Return SokrLP (Uus täisnimi); // juhul kui eraldajaks on tühik. Viimane lõige
EndIf;

// analüüsida sugu M/F
If Right(Patronymic,1)="a" Then Gender="F" Else Gender="M" EndIf;

// luua tabeli struktuur, mis salvestab sõnalõpud
praegune=Uus väärtustabel;
StringType=NewTypeDescription("String",NewStringQualifiers(3));
NumberType=NewTypeDescription("Arv",UusNumberKvalifikaatorid(1,0));
praegune.Veerud.Add("StarOk",StringType); // vana lõpp 2 tähemärki
// veerud, mis salvestavad uusi sõnalõpusid
praegune.Veerud.Lisa("p"); // lapsevanem
praegune.Veerud.Lisa("d"); // daativ
praegune.Veerud.Add("in"); // akusatiiv
praegune.Veerud.Lisa("t"); // loominguline
praegune.Veerud.Lisa("n"); // eessõna
// et määrata, mitu tähte sõna lõpust ära lõigata,
praegune.Veerud.Add("NumberSlice",NumberType); // lõigatud tähtede arv

vokaalid="aeeouiyyayu"; // vokaalide loetelu stringina

// ======== töötle perekonnanime ==========
// täitke tabel perekonnanime andmetega

Kui gender="M" Siis
string=praegune.Lisa(); // Ivanov
string.StarOk="*s";

read.CountSlice=0;

Rida=praegune.Lisa(); // krasinsky
string.StarOk="*th";
string.r="vau"; string.d="mu"; line.in="th"; string.t="im"; string.p="ohm";
read.CountSlice=2;

Rida=praegune.Lisa(); // kõikvõimas
rida.Starok="sch";
string.r="tema"; string.d="temale"; string.in="tema"; string.t="im"; string.p="söö";
read.CountSlice=2;

Rida=praegune.Lisa(); // Valge
string.StarOk="th";
string.r="vau"; string.d="mu"; line.in="th"; string.t="th"; string.p="ohm";
read.CountSlice=2;

Rida=praegune.Lisa(); // kahvatu
string.StarOk="*th";

read.CountSlice=1;

Rida=praegune.Lisa(); // rabinovitš
string.StarOk="*h";

read.CountSlice=0;

Rida=praegune.Lisa(); // remont, zaliznyak
string.StarOk="*k";
string.r="ka"; string.d="ku"; line.in="ka"; string.t="com"; string.p="ke";
read.CountSlice=2;

Rida=praegune.Lisa(); // shinkar
string.StarOk="*b";
string.r="i"; string.d="u"; string.in="i"; string.t="sööma"; string.p="e";
read.CountSlice=1;

Rida=praegune.Lisa(); // perelman, oganesjan
string.StarOk="*n";

read.CountSlice=0;

Rida=praegune.Lisa(); // lambaliha
string.StarOk="in";
string.r="a"; string.d="y"; line.in="a"; string.t="th"; string.p="e";
read.CountSlice=0;

ElseIf Sugu = "F" Siis
string=praegune.Lisa(); // Sklodovskaja
rida.StarOk="th";
string.r="oops"; string.d="oops"; line.in="th"; string.t="oops"; string.p="oops";
read.CountSlice=2;

Rida=praegune.Lisa(); // ivanova
string.StarOk="*a";
string.r="oops"; string.d="oops"; line.in="y"; string.t="oops"; string.p="oops";
read.CountSlice=1;
EndIf;


Kui ei ole EmptyString(Perenimi) Siis
pb=Õige(Perenimi,3); count="StarOk"; // Otsi seda
newLastName=Perenimi; // kui midagi ei muutu, siis olgu
stro=current.Find(pb, count);
Kui rangelt<>


Muidu
// viimase kolme tegelase poolt rangelt ei leitud, kahte tegelast otsime ainult viimase järgi
pb=Õige(Perenimi,2);
stro=current.Find(pb, count);
Kui rangelt<>Määratlemata Siis
Tüvi=Lev(Perenimi, StrLength(Perenimi)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);
Muidu // kui kahte ei leita, siis otsime ühte
pb="*"+Parem(pb,1);
stro=current.Find(pb, count);
Kui rangelt<>
Tüvi=Lev(Perenimi, StrLength(Perenimi)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);


stro=current.Find(pb, count);
Kui rangelt<>Määratlemata Siis // leiti nägemise järgi
Tüvi=Lev(Perenimi, StrLength(Perenimi)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);
EndIf;
EndIf;
EndIf;
EndIf;
Muidu
uusPerekonnanimi="";
EndIf;

// ======== töötle nime ==========
// täitke tabel nime andmetega
praegune.Clear();

Kui Sugu = "M" Siis
// käsitlema erandeid
Kui Nimi="lõvi" Siis Nimi="lõvi" EndIf;
If Name="paul" Then Name="paul" EndIf;

Rida=praegune.Lisa(); // Sergei
string.starok="*th";
string.r="i"; string.d="u"; string.in="i"; string.t="sööma"; string.p="e";
rida.lõik=1;

Rida=praegune.Lisa(); // Ivan + Lev + Pavel
string.starok="*s";
string.r="a"; string.d="y"; line.in="a"; string.t="ohm"; string.p="e";
rida.lõik=0;

Rida=praegune.Lisa(); // nikita
string.starok="*a";

rida.lõik=1;

Rida=praegune.Lisa(); // kummardus
string.starok="ka";

rida.lõik=1;

Rida=praegune.Lisa(); // Jeremija
string.starok="ia";

rida.lõik=1;

Rida=praegune.Lisa(); // Ilja
string.starok="*i";

rida.lõik=1;

Rida=praegune.Lisa(); // igor
string.starok="*ь";
string.r="i"; string.d="u"; string.in="i"; string.t="sööma"; string.p="e";
rida.lõik=1;

ElseIf Sugu = "F" Siis
// käsitlema erandeid
//If Name="olga" Siis Name="olga" EndIf;

Rida=praegune.Lisa(); // Irina
string.starok="*a";
string.r="s"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
rida.lõik=1;

Rida=praegune.Lisa(); // Inga, Olga
string.starok="ha";
string.r="ja"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
rida.lõik=1;

Rida=praegune.Lisa(); // ester
string.starok="*ь";
string.r="ja"; string.d="ja"; line.in="b"; string.t="w"; string.p="ja";
rida.lõik=1;

Rida=praegune.Lisa(); // maria
string.starok="ia";
string.r="ja"; string.d="ja"; line.in="u"; string.t="tema"; string.p="ja";
rida.lõik=1;

Rida=praegune.Lisa(); // Sofia
string.starok="*i";
string.r="ja"; string.d="e"; line.in="u"; string.t="tema"; string.p="e";
rida.lõik=1;
EndIf;

// tabel on täis. lugege 2 viimast tähte ja otsige need üles
Kui mitte EmptyString(Name) Siis
pb=Parem(nimi,2); count="StarOk"; // Otsi seda
newName=Nimi; // kui midagi ei muutu, siis olgu
stro=current.Find(pb, count);
Kui rangelt<>Määratlemata Siis // leiti range kohe


Muidu // pole rangelt leitud, otsime ainult viimast
pb="*"+Parem(pb,1);
stro=current.Find(pb, count);
Kui rangelt<>Määratlemata Siis // leidis viimane
Base=Lev(Nimi, Str.Length(Nimi)-str. Count Slice);
newName=base+abbrlp(stro[pad]);
Muidu // viimast ei leitud, otsime tähti tüübi järgi
pb="*"+?(Leia(Vowers,Right(pb,1))=0,"s","g");
stro=current.Find(pb, count);
Kui rangelt<>Undefined=1 Seejärel // leiti tüübi järgi
Base=Lev(Nimi, Str.Length(Nimi)-str. Count Slice);
newName=base+abbrlp(stro[pad]);
EndIf;
EndIf;
EndIf;
Muidu
uusNimi="";
EndIf;

// ======== Töötleme isanime, siin on lihtsam ==========
praegune.Clear();

Kui Sugu = "M" Siis
string=praegune.Lisa();
string.r="a"; string.d="y"; line.in="a"; string.t="sööma"; string.p="e";
rida.lõik=0;
ElseIf Sugu = "F" Siis
string=praegune.Lisa();
string.r="s"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
rida.lõik=1;
EndIf;
Kui mitte EmptyString (patroonüüm), siis
Base \u003d Leo (Patronymic, StrLength (Patronymic) - praegune. Viilude arv);
uusPatroonüümne nimi = alus + lühendatud LP (praegune [pad]);
Muidu
uus isanimi="";
EndIf;

IfOnlyInitials Siis
uusNimi=Lõvi(uusNimi,1); newPatronymic=Lion(newPatronymic,1);
EndIf;

// määrake esitähed suurtähtedele
uusPerekonnanimi=ВReg(Lev(uusPerenimi,1))+Mid(uusPerekonnanimi,2);
uusNimi=ВReg(Lev(uusNimi,1))+Keskmine(uusNimi,2);
newPatronymic=ВReg(Lev(newPatronymic,1))+Mid(newPatronymic,2);

// ja nüüd on kõik koos
If InitialsOnly Siis // kui initsiaalide vorming on määratud
uusNimi=uusPerekonnanimi+" "+uusNimi+pSeparaator+uusPatroonüüm+pSeparaator;
Muidu
uusNimi=uusPerekonnanimi+" "+uusNimi+" "+uusPatronüüm;
EndIf;

If Find(täisnimi, ".") Siis // Juhul, kui sisendparameetriks on Initsiaalidega perekonnanimi. Ärge puudutage initsiaale
uusNimi = uusPerenimi + " " + TReg(eesnimi) + Treg(isanimi);
EndIf;

Return SokrLP (uus täisnimi);
Lõppfunktsioonid

Siit saate vastuseid küsimustele Microsoft Exceli kohta 57638 471543
44519 357828
Peafoorumi populaarseimad teemad 14 80
Kui olete õnnelik Maci omanik 😉 217 1059

21. september 2018 06:21:34

Sektsioon paigutamiseks makstud küsimusi, projekte ja ülesandeid ning otsida neile täitjaid. 2100 13379
Kui olete alla laadinud või ostnud Microsoft Exceli PLEX-i lisandmooduli ja teil on küsimusi või taotlusi, klõpsake siin. 310 1587
808 11620
Funktsionaalsuse, reeglite jms arutelu. 269 3464

Hetkel võrgus (külalisi: 590, kasutajaid: 12, neist peidetud: 3) ,

Täna on sünnipäev (37), (32), (28), (37), (36), (52)

Registreeritud kasutajaid kokku: 83105

Arutelus osales: 31843

Teemasid kokku: 105875

käändejuht Excelis

Peatükis Muud keeled ja tehnoloogiad autori antud küsimusele, kas Exceli formaadis on võimalik nimisõnu automaatselt käänata Zufar parim vastus on Head päeva.
Kui me räägime täisnimest, ametinimetustest või osakondadest, siis saate. Tõsi, see on tööriist rohkem arendajale. Kuid kasutaja saab ka selle välja mõelda. Näited sisaldavad Exceli jaoks valmis makrosid.
Edu!
PS Otsige Google'ist klahvi "Perekonnanimede, nimede ja isanimede käänamine juhtumite järgi"

22 vastust

Hei! Siin on valik teemasid koos vastustega teie küsimusele: kas Exceli vormingus on võimalik nimisõnu automaatselt käänata

Vastus alates loputama
Ei, seda funktsiooni Excel ei toeta. Kuid konkreetsel juhul saate ühe või teise valiku valimiseks kasutada funktsiooni IF.

Vastus alates Prostseen
Olete kategoorias "Programmeerimine", nii et keegi ei saa keelata teil kirjutada VBA-sse oma funktsiooni, mis seda heategevuslikku tööd teeb. Ja lihtsalt probleemi lahendus selles vormingus on üsna reaalne.

Vastus alates ristima
Kuulsin, et vene keele reform on läbi saanud, kuid ma ei osanud isegi ette kujutada, et võtaksin kasutusele "nimisõnad Exceli vormingus"))))))

Kohandatud funktsioon MS Exceli jaoks

Täisnime käände käände kaupa

Funktsioon võimaldab kuvada nimetavas käändes antud perekonnanime, eesnime ja isanime mis tahes muus käändes.

Kasutusala:

Funktsiooni on mugav kasutada MS Excelis dokumentide genereerimise automatiseerimiseks (või nende käsitsi loomise hõlbustamiseks), kus täisnime tuleb märkida mitte nimetavas käändes: mitmesugused lepingud, kassaorderid, kviitungid, vastavusaktid, orderid , protokollid, volikirjad jne.

Funktsioon on asendamatu ka juhul, kui automatiseerimisvahendid realiseerivad ülaltoodud dokumentide moodustamise MS Wordi rakenduses MS Exceli tabelite andmete põhjal.

Kasutamise näited:

  • lepingus: „pea isikus Baranov Petr Vjatšeslavovitš«
  • sularahakaartides: "välja antud Gnatyuk Pavel Vassiljevitš"," saadud Gritsenko Irina Sergeevna«
  • volikirjas: "Usaldan sõiduki haldamise Smirnitski Vitali Valerijevitš«
  • järjekorras: "määrama Stepašova Olga Nikolajevna«
  • protokollis: „aruanne koostati Dvoržetski Nikita Ivanovitš«

Mida rakendatakse:

  • perekonnanimed kõigi SRÜ riikide territooriumil levinud lõppudega "-ov", "-ev", "-in", "-yan (ts)", "-sky (-tsky)", "-sky (- tsky)", "-th", "-th", "-their", "-ets", "-nko", "-uk", "-yuk", "-ich", "-iya", jne: Pavlov, Zinovjev, Gagarin, Petrosjan, Võssotski, Trubetskoi, Tsoi, Zadorožnõi, Sadovnitšõ, Sedõhh, Dolgihh, Soskovets, Nesterenko, Gontšaruk, Daniljuk, Rabinovitš, Danelia, Kvaša, Vrubel, Kozak jne, nagu Kazatšok vastavate naiste perekonnanimedena
  • Arvesse võetakse meeste ja naiste perekonnanimede käände erinevusi: Weaver Viktor ja Weaver Svetlana, Kozovets Anton ja Kozovets Ekaterina
  • liitperekonnanimesid töödeldakse õigesti: näiteks Mamin-Sibiryak, Saltõkov-Štšedrin, Nemirovitš-Dantšenko, Lebedev-Kumach
  • võõrkeelsed perekonnanimed ei kahane: Galois, Morois, Defoe, Dali, Meringue, Verdi, Garcia, Hemingway jne.
  • patronüümid osakestega “-ogly”, “-kyzy”, “ibn” on edukalt töödeldud: Mammadov Polad Murtuza oglu -> Mamedov Polad Murtuza oglu, Gassan Abdurakhman ibn Khattab -> Hassan Abdurakhman ibn Khattab, Abu Ali ibn ibn Siinai
  • sugu (mees/naine) määratakse automaatselt isanime järgi ja selle põhjal valitakse sobivad käändereeglid
  • olukordades, kus sugu on keeruline automaatselt määrata (keskmine nimi on võõras või puudub), saate funktsiooni parameetrina määrata sugu
  • Võimalik on väljund lühendatud kujul "perenimi + initsiaalid": Polozov N. A., Vasilyeva A. K., Dvorzhetsky E. E.
  • kasutusvõimalus kui tekiehitised(saab kasutada kõigis selle töökoha failides) ja vormis faili manustatud kood(funktsioon töötab selles failis igal töökohal - see on mugav, kui fail saadetakse näiteks vastaspoolele)
  • avatud lähtekoodiga – soovi korral saad algoritmi uurida või seda muuta

Kuidas ühendada?

Programm on üks fail nimega bdgFIOPropisyu.bas. Selle kasutamiseks konkreetses failis tuleb funktsioon sellesse faili importida. Selleks vajate:

  1. avage MS Exceli fail, kus soovite funktsiooni kasutada
  2. sisenege VBA redaktorisse, vajutades kiirklahvi "Alt + F11" või menüü kaudu:
  3. valige VBA redaktori peamenüüst üksus "Fail" -> "Impordi fail ...":
  4. valige kuvatavas failivaliku aknas fail bdgFIOPropisyu.bas ja klõpsake nuppu "Ava":

Kõik, programmi kood imporditakse ja seda saab kasutada.

Kuidas kasutada?

Siin on veel mõned näited selle kasutamisest:

Olukorrad, kus funktsioon võib töötada vale:

Vaatamata asjaolule, et olukordi, kus funktsiooni toimimine võib olla ebarahuldav, on üsna vähe, on tõenäosus sellise täisnimega praktilises töös kokku puutuda üsna väike, sest 99,9% juhtudest loobutakse Venemaa territooriumil leitud perekonnanimedest üldreeglite kohaselt.
Lisaks tuleb märkida, et ka teised algoritmid ja programmid ei saa 100% juhtudest garanteerida tulemuse õigsust - vene keel on liiga suur ja võimas, et seda loogiliste reeglite kogumiga kirjeldada (vt allpool rõhu asend sõnas, perekonnanime päritolu, perekonnanime naisvormi kirjutamise sõltuvus meessoovormi kirjutamisest jne).

  • Vene keele reeglite kohaselt on mehe ja naise kääne võõrkeel"-a" ja "-ya" lõpuga perekonnanimed sõltuvad rõhu kohast sõnas ja perekonnanime päritolust.
    Kõik perekonnanimed, mis lõpevad numbritega pingevaba“-a” kaashäälikute järel kahanevad: Seneca -> Seneca, Petrarch -> Petrarch, Smetana -> Smetana, Kurosawa -> Kurosawa, Glinka -> Glinka, Okudzhava -> Okudzhava jne. Perekonnanimede kääne šokk Lõpus olev “-a” sõltub päritolust: prantsuse päritolu perekonnanimed ei kaldu: Dumá, Degá, Fermá, Petipá jne, muu päritoluga perekonnanimed (slaavi ja idamaade keelest) on kaldu: Mitta -> Mitty, Kvasha -> Kvashi, Pann -> Pannid, Pokker -> Pokkerid, Hamza -> Hamza jne.
    Samamoodi on kallutamatud prantsuse päritolu perekonnanimed, mille lõpus on rõhuline "-ya": Zola, Troyat. Kõik teised "-ya" perekonnanimed on tagasi lükatud: Golovnya -> Golovny, Danelia -> Danilia, Beria -> Beria, Goya -> Goya.
    Kuna programmiliselt ei ole võimalik rõhuasendeid ja perekonnanime päritolu määrata, eeldab programmi algoritm, et kõik sellised perekonnanimed lükatakse tagasi üldreeglite kohaselt. Seetõttu töötleb programm valesti prantsuskeelseid perekonnanimesid, mille lõpus on rõhk: Dumas -> Dumas, Zola -> Zoli, Petipa -> Petipa.
  • Meeste perekonnanimed, mis lõppevad tähega "-y", "-y", "-oy", jäetakse omadussõnadeks Gorki -> Gorki, õnnistatud -> õnnistatud, soomustatud -> soomustatud. Erandiks on juhud, kui sellise lõpuga perekonnanimi on tavaline nimisõna (Kozodoy, Vodopoy, Genii, Scenario) või on võõrkeelse päritoluga (Tsoi, Tskhoi, Choi). Kuna programmiliselt ei ole võimalik kindlaks teha, kas perekonnanimi on selline erand, on tavapäraselt aktsepteeritud, et kõik perekonnanimed, mille lõpud on "-y", "-y", "-y", jäetakse omadussõnadest kõrvale. Enamikul juhtudel on see tõsi, kuid erandjuhtudel on perekonnanimede-nimisõnade korral funktsiooni tulemus ekslik: Kozodoy Yakov -> Kits Jakov, Genius Stefan -> Genego Stefan.
    Algoritm võtab aga erandina arvesse nende lõpuga ja alla 5 tähe pikkuste (peamiselt korea päritoluga) perekonnanimede käänet: Tsoi Viktor -> Tsoi Viktor.
  • Mõnel juhul on “-ina”, “-ova” lõppeva naisperekonnanime õige kääne võimalik ainult siis, kui on teada vastava meheliku perekonnanime kääne: Zhemchuzhina Ljudmila, Malina Svetlana saab keelduda nagu tavalisel kujul: Žemtšužina Ljudmila -> Žemtšužina Ljudmila -> Žemtšužina Ljudmila, Malina Svetlana -> Malina Svetlana (kui vastavad meessoost perekonnanimed on näiteks Zhemchuzhin Boris ja Malin Oleg), ja nimisõna kujul: Žemtšužina Ljudmila -> Žemtšužina Ljudmila, -> Malina Svetlana (kui perekonnanime meessoost vormid, näiteks Zhemchuzhina Boris ja Malina Oleg).
    Selliseid nüansse on algoritmis võimatu arvesse võtta, seetõttu töötleb funktsioon kõiki naiste perekonnanimesid samade reeglite järgi (nagu omadussõnu), mis võib mõnel juhul põhjustada valesid tulemusi.
  • Sarnane olukord on meeste ja naiste perekonnanimedega, mis lõpevad "-ov (a)", "-ev (a)", "-in (a)", mis on homonüümsed tavalise nimisõnaga: Borov, Lev, Filin, Barin , Korov, öökull, maal, sulg, antiik jne). Perekonnanime ja nimisõna identsust ei saa programmiliselt tuvastada mis tahes formaalsete märkide abil, mistõttu selliste perekonnanimede käände ühtsete üldreeglite järgi toob kaasa valede vormitulemuste: Lev Pavel -> Levy Pavel, Filin Sergey -> Filin Sergei, Korov Ksenia -> Korovaja Ksenija, Öökull Olga -> Öökull Olga, Alla maal -> Alla maal.
  • Pehme märgiga lõppevad meessoost perekonnanimed kipuvad: Vrubel Mihhail -> Vrubel Mihhail, Gogol Nikolai -> Gogol Nikolai jne. Kuid kahanemisel sõltuvad selliste perekonnanimede lõpud sellest, milliste nimisõnadega - mees-, nais- või keskmine - need on.
    Algoritmiliselt ei ole võimalik nimisõna sugu määrata, mistõttu juhul, kui meessoost perekonnanimi on naissoost või neutraalsest soost nimisõna, ei tööta funktsioon õigesti: Stal Ivan -> Stal Ivan, Wormwood Victor -> Wormwood Victor.
  • "-zha", "-tsa", "-cha", "-sha", "-sha" lõppevate perekonnanimede instrumentaalkäände moodustamine sõltub sõna rõhust: kui see lõpp on rõhutu, siis kui kääne see muutub "-ey": Kapitsa Peter -> Kapitsa Peter, Cloud Fedor -> Cloud Fedor; kui lõpp on rõhutatud, asendatakse see sõnaga “-oy”: Kvasha Igor -> Kvasha Igor, Candle Ivan -> Candle Ivan. Sarnane on olukord ka “-ets”-lõpuliste perekonnanimedega: ilma rõhuta muutub lõpp “-em”-ks: Palets Viktor -> Finger Viktor; stressi all - "-ndal": Soskovets Oleg -> Soskovets Oleg.
    Nagu eespool mainitud, on sõna rõhuasetusi programmiliselt võimatu määrata, seetõttu eeldab programmi algoritm, et sõnades, mis lõpevad “-zha”, “-tsa”, “-cha”, “-sha”, “ -sha” , lõpp on rõhutu (selliseid sõnu on rohkemgi), st instrumentaalkäände moodustab alati lõpp “-ey”. Vastupidi, "ets"-lõpuliste sõnade puhul eeldatakse, et lõpp on rõhu all, see tähendab, et kääne on lõpuga "-om". Vastavalt sellele täheldatakse muudel juhtudel vormivigu: Igor Kvasha, Ivan Svechey, Viktor Finger.
  • Vene keele reeglite kohaselt jäetakse vene topeltperekonnanime esimene osa tagasi, kui seda saab kasutada perekonnanimena: Mamin-Sibirjaki teos, Saltõkovi-Štšedrini lugu, Rimski-Korsakovi ooper jne. . Muidu see ei muutu: Van Dycki maal, Don Juani seiklused, Don Quijote maamees jne. Nii et näiteks perekonnanimes Semenov-Tyan-Shansky on esimene osa kaldu, kuid mitte teiseks: Semenovi-Tjan-Šanski teosed.
    Jällegi ei ole algoritmiliselt võimalik kindlaks teha, kas perekonnanime komponent on iseseisev, seetõttu eeldatakse töö puhul, et liitperekonnanime kõik osad tuleks tagasi lükata (enamasti on see nii), mis olukordade arv viib vigadeni: Van Dyck, Dona - Quijote, Semjonov-Tjan-Šanski.
  • Välismaised perekonnanimed, mis lõpevad "-ov" ja "-in" instrumentaalkäändes, muudavad lõppu "-th": Benjamin Franklin, Charles Darwin, Charlie Chaplin, Alexander Green. Sarnase lõpuga "vene" perekonnanimed lõpevad "-y"-ga: Ivanov, Gagarin, Fonvizin jne. Vaatamata asjaolule, et ülaltoodud perekonnanimed (Franklin, Darwin, Chaplin, Green) on algoritmis erandina arvesse võetud, on väike võimalus, et mõni muu sarnane võõras perekonnanimi esineb - antud juhul funktsiooni tulemus. saab olema vale.

Perekonnanimede ja nimede käände reegleid kasutatakse vastavalt N. A. Eskova töö punktidele 13.1 ja 13.2. Raskused nimisõnade käänamisel. Kursuse "Kaasaegse trükikeel" praktiliste harjutuste õppe- ja metoodilised materjalid(NSVL Riiklik Pressikomitee. Üleliiduline trükitööliste täiendkoolituse instituut. M., 1990).

Hind: 1500 rubla