Uzvārdu atkāpšanās pieejā. Kā programmā Excel izveidot reģistru deklināciju? Situācijas, kad funkcija var nedarboties pareizi

Fails satur procedūras 7.7 un 8.x. Procedūrai tiek nodota virkne formātā Uzvārds Vārds Patronim.

UPD 11/26/10: ar pateicību - jauna funkcijas versija. Neesmu pārbaudījis! Jautājumi par šīs versijas darbu - viņam, nez kāpēc nevēlas to izplatīt :)

Funkcija CaseName(ValueName,Case=1,InitialsOnly=False, Value pDelimiter=".")
Ja TypeValue (pilns vārds)<>Ierakstiet ("String") pēc tam
Show("Nederīga virkne nodota ""Pilna vārda reģistrs!"""); Pilna vārda atgriešana;
EndIf;

// noņemiet vairākas atstarpes
Kamēr 1=1 cilpa
Pilns nosaukums = saīsināts LP (StrReplace(Nosaukums, " "," "));
Ja Find(Name," ")=0 then Abort EndIf;
EndCycle;

Ja TypeValue(Case)=Type("String") Tad
pad = AbbrLP(NReg(Lev(Lieta,1)));
Ja Find("irdwtp",pad)=0 Tad

EndIf;
ElseIf TypeValue(Case)=Type("Numurs") Tad
Ja (gadījums<1) или (Падеж>6) Tad
Report("Nepareizs reģistrs nodots ""pilna vārda gadījumam""!"); Pilna vārda atgriešana;
EndIf;
case=case-1;
EndIf;

Pilns vārds=AblP(НReg(pilns vārds)); // tā ir ērtāk

// savs sastāva analizators
Uzvārds="";
Ja d=1 pēc stipruma(nosaukuma) cikla
chars=Average(pilns vārds, th, 1);

Uzvārds=Uzvārds+rakstzīme;
EndCycle;
s=d+1; // šķērsoja atstarpi
Name="";

chars=Average(pilns vārds, th, 1);
If chars=" " Tad pārtraukt EndIf;
Vārds=Vārds+rakstzīme;
EndCycle;
s=d+1; // šķērso otro atstarpi
Vidējais vārds="";
Ja y=s pēc stipruma(pilns nosaukums) Cikls
chars=Average(pilns vārds, th, 1);
If chars=" " Tad pārtraukt EndIf;
Vidējais vārds = vidējais vārds + simbols;
EndCycle;

// tagad mums ir atsevišķi uzvārds, vārds un patronīms.
// sākas faktiskais satura un gadījumu analīzes bloks

// atgriež, ja pats ir nominatīvs. Ja ir iestatīts ReturnOnlyInitials, konvertējiet uz iniciāļiem
If (Left(Case,1)="Un") vai (Case=1) Tad
Ja NAV tikai iniciāļi vai Atrast (nosaukums, ".") Tad
Pilna vārda atgriešana; // vai nu jau konvertēta virkne, vai arī nav jākonvertē
EndIf;
JaunsVārds = TReg(Uzvārds) + " " + Vreg(Lev(Vārds,1)) + pAtdalītājs + Vreg(Lev(Vidējais vārds,1)) + pAtdalītājs;
Atgriezties SokrLP (Jauns pilns vārds); // ja atdalītājs ir atstarpe. Pēdējais griezums
EndIf;

// analizēt dzimumu M/F
If Right(Patronymic,1)="a" Tad Dzimums="F" Citādi Dzimums="M" EndIf;

// izveidot tabulas struktūru, kurā tiek saglabātas vārdu galotnes
pašreizējais=Jauna vērtību tabula;
StringType=NewTypeDescription("String",NewStringQualifiers(3));
NumberType=NewTypeDescription("Skaitlis",JaunsNumuraKvalifikatori(1,0));
pašreizējais.Slejas.Pievienot("StarOk",StringType); // vecās beigas 2 rakstzīmes
// kolonnas, kurās glabājas jaunas vārdu galotnes
strāva.Slejas.Pievienot("p"); // vecāks
strāva.Slejas.Pievienot("d"); // datīvs
strāva.Slejas.Pievienot("in"); // akuzatīvs
strāva.Slejas.Pievienot("t"); // radošs
strāva.Slejas.Pievienot("p"); // prievārdi
// lai norādītu, cik burtus no vārda beigām nogriezt,
pašreizējais.Slejas.Pievienot("Skaitlis",Numura veids); // izgriezto burtu skaits

Patskaņi = "aeeouiyyayu"; // patskaņu saraksts kā virkne

// ======== apstrādā uzvārdu ==========
// aizpildiet tabulu ar datiem par uzvārdu

Ja dzimums = "M" Tad
string=pašreizējais.Pievienot(); // Ivanovs
string.StarOk="*s";

rindas.CountSlice=0;

Rinda=pašreizējais.Pievienot(); // krasinskis
string.StarOk="*th";
string.r="wow"; string.d="mu"; line.in="th"; string.t="im"; string.p="ohm";
rindas.CountSlice=2;

Rinda=pašreizējais.Pievienot(); // visvarenais
line.Starok="sch";
string.r="viņš"; string.d="viņam"; string.in="viņš"; string.t="im"; string.p="ēst";
rindas.CountSlice=2;

Rinda=pašreizējais.Pievienot(); // Balts
string.StarOk="th";
string.r="wow"; string.d="mu"; line.in="th"; string.t="th"; string.p="ohm";
rindas.CountSlice=2;

Rinda=pašreizējais.Pievienot(); // bāla
string.StarOk="*th";

rindas.CountSlice=1;

Rinda=pašreizējais.Pievienot(); // Rabinovičs
string.StarOk="*h";

rindas.CountSlice=0;

Rinda=pašreizējais.Pievienot(); // remonts, zaliznyak
string.StarOk="*k";
string.r="ka"; string.d="ku"; line.in="ka"; string.t="com"; string.p="ke";
rindas.CountSlice=2;

Rinda=pašreizējais.Pievienot(); // šinkars
string.StarOk="*b";
string.r="i"; string.d="u"; string.in="i"; string.t="ēst"; string.p="e";
rindas.CountSlice=1;

Rinda=pašreizējais.Pievienot(); // perelmans, oganesjans
string.StarOk="*n";

rindas.CountSlice=0;

Rinda=pašreizējais.Pievienot(); // jērs
string.StarOk="in";
string.r="a"; string.d="y"; line.in="a"; string.t="th"; string.p="e";
rindas.CountSlice=0;

ElseIf Gender="F" Tad
string=pašreizējais.Pievienot(); // Sklodovskaja
line.StarOk="th";
string.r="oops"; string.d="oops"; line.in="th"; string.t="oops"; string.p="ups";
rindas.CountSlice=2;

Rinda=pašreizējais.Pievienot(); // ivanova
string.StarOk="*a";
string.r="oops"; string.d="oops"; line.in="y"; string.t="oops"; string.p="ups";
rindas.CountSlice=1;
EndIf;


Ja nav EmptyString(Uzvārds) Tad
pb=Pa labi(Uzvārds,3); count="StarOk"; // meklē to
newLastName=Uzvārds; // ja nekas nemainās, lai tā būtu
stro=pašreizējais.Atrast(pb, skaitīt);
Ja stingri<>


Citādi
// stingri neatraduši pēdējie trīs rakstzīmes, mēs meklējam divas rakstzīmes tikai pēc pēdējās
pb=Pa labi(Uzvārds,2);
stro=pašreizējais.Atrast(pb, skaitīt);
Ja stingri<>Undefined Tad
Stem=Lev(Uzvārds, Stronggarums(Uzvārds)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);
Citādi // ja netiek atrasti divi, meklējam vienu
pb="*"+Pa labi(pb,1);
stro=pašreizējais.Atrast(pb, skaitīt);
Ja stingri<>
Stem=Lev(Uzvārds, Stronggarums(Uzvārds)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);


stro=pašreizējais.Atrast(pb, skaitīt);
Ja stingri<>Undefined Tad // atrasts pēc redzes
Stem=Lev(Uzvārds, Stronggarums(Uzvārds)-stro.CountSlice);
newLastName=Base+Abb(stro[pad]);
EndIf;
EndIf;
EndIf;
EndIf;
Citādi
jaunsUzvārds="";
EndIf;

// ======== apstrādā nosaukumu ==========
// aizpildiet tabulu ar datiem par nosaukumu
pašreizējais.Notīrīt();

Ja dzimums = "M" Tad
// apstrādājiet izņēmumus
Ja Vārds = "lauva" Tad Vārds = "lauva" EndIf;
If Name = "pauls" Tad Vārds = "pauls" EndIf;

Rinda=pašreizējais.Pievienot(); // Sergejs
string.starok="*th";
string.r="i"; string.d="u"; string.in="i"; string.t="ēst"; string.p="e";
rinda.cutoff=1;

Rinda=pašreizējais.Pievienot(); // Ivans + Ļevs + Pāvels
string.starok="*s";
string.r="a"; string.d="y"; line.in="a"; string.t="ohm"; string.p="e";
rinda.cutoff=0;

Rinda=pašreizējais.Pievienot(); // nikita
string.starok="*a";

rinda.cutoff=1;

Rinda=pašreizējais.Pievienot(); // priekšgala
string.starok="ka";

rinda.cutoff=1;

Rinda=pašreizējais.Pievienot(); // Jeremija
string.starok="ia";

rinda.cutoff=1;

Rinda=pašreizējais.Pievienot(); // Ilija
string.starok="*i";

rinda.cutoff=1;

Rinda=pašreizējais.Pievienot(); // igors
string.starok="*ь";
string.r="i"; string.d="u"; string.in="i"; string.t="ēst"; string.p="e";
rinda.cutoff=1;

ElseIf Gender="F" Tad
// apstrādājiet izņēmumus
//If Name = "olga" Tad Name = "olga" EndIf;

Rinda=pašreizējais.Pievienot(); // Irina
string.starok="*a";
string.r="s"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
rinda.cutoff=1;

Rinda=pašreizējais.Pievienot(); // Inga, Olga
string.starok="ha";
string.r="un"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
rinda.cutoff=1;

Rinda=pašreizējais.Pievienot(); // estere
string.starok="*ь";
string.r="un"; string.d="un"; line.in="b"; string.t="w"; string.p="un";
rinda.cutoff=1;

Rinda=pašreizējais.Pievienot(); // marija
string.starok="ia";
string.r="un"; string.d="un"; line.in="u"; string.t="viņa"; string.p="un";
rinda.cutoff=1;

Rinda=pašreizējais.Pievienot(); // Sofija
string.starok="*i";
string.r="un"; string.d="e"; line.in="u"; string.t="viņa"; string.p="e";
rinda.cutoff=1;
EndIf;

// tabula ir pilna. saskaiti pēdējos 2 burtus un meklē tos
Ja nav EmptyString(Nosaukums), tad
pb=Pa labi(vārds,2); count="StarOk"; // meklē to
newName=Vārds; // ja nekas nemainās, lai tā būtu
stro=pašreizējais.Atrast(pb, skaitīt);
Ja stingri<>Undefined Tad // uzreiz atrada stingru


Citādi // nav stingri atrasts, meklējam tikai pēdējo
pb="*"+Pa labi(pb,1);
stro=pašreizējais.Atrast(pb, skaitīt);
Ja stingri<>Undefined Tad // atrada pēdējais
Bāze=Lev(Nosaukums, StrongLength(Nosaukums)-st. Skaits Slice);
newName=base+abbrlp(stro[pad]);
Citādi // pēdējais netika atrasts, meklējam burtus pēc veida
pb="*"+?(Atrast(Vowers,Right(pb,1))=0,"s","g");
stro=pašreizējais.Atrast(pb, skaitīt);
Ja stingri<>Undefined=1 Pēc tam // atrasts pēc veida
Bāze=Lev(Nosaukums, StrongLength(Nosaukums)-st. Skaits Slice);
newName=base+abbrlp(stro[pad]);
EndIf;
EndIf;
EndIf;
Citādi
newName="";
EndIf;

// ======== Apstrādāsim patronīmu, te ir vieglāk ==========
pašreizējais.Notīrīt();

Ja dzimums = "M" Tad
string=pašreizējais.Pievienot();
string.r="a"; string.d="y"; line.in="a"; string.t="ēst"; string.p="e";
rinda.cutoff=0;
ElseIf Gender="F" Tad
string=pašreizējais.Pievienot();
string.r="s"; string.d="e"; line.in="y"; string.t="oops"; string.p="e";
rinda.cutoff=1;
EndIf;
Ja nav EmptyString (patronīms), tad
Bāze \u003d Lauva (Patronīms, StrLength (Patronymic) - pašreizējais. Šķēles skaits);
newPatronymic name = Base + saīsināts LP (pašreizējais [pad]);
Citādi
jauns patronīms="";
EndIf;

IfOnlyInitials Tad
newName=Lauva(jaunsVārds,1); newPatronymic=Lauva(jaunsPatronims,1);
EndIf;

// iestatiet pirmos burtus uz lielajiem burtiem
jaunsUzvārds=ВReg(Lev(jaunsUzvārds,1))+Vidējs(jaunsUzvārds,2);
newName=ВReg(Lev(newName,1))+Average(newName,2);
newPatronymic=ВReg(Lev(newPatronymic,1))+Mid(newPatronymic,2);

// un tagad viss ir kopā
If InitialsOnly Tad // ja ir norādīts iniciāļu formāts
newName=newLastName+" "+newName+pSeparator+newPatronymic+pSeparator;
Citādi
jaunsVārds=jaunsUzvārds+" "+jaunsVārds+" "+jaunsPatronims;
EndIf;

If Find(pilns vārds, ".") Tad // Gadījumā, ja ievades parametrs ir Uzvārds ar iniciāļiem. Neaiztieciet iniciāļus
jaunsVārds = jaunsUzvārds + " " + TReg(Vārds) + Treg(Patronims);
EndIf;

Atgriezties SokrLP (jauns pilns vārds);
EndFunctions

Šeit varat saņemt atbildes uz jautājumiem par Microsoft Excel 57638 471543
44519 357828
Galvenā foruma populārākās tēmas 14 80
Ja esat laimīgs Mac īpašnieks 😉 217 1059

2018. gada 21. septembris, 06:21:34

Sadaļa izvietošanai samaksāts jautājumus, projektus un uzdevumus un meklēt tiem izpildītājus. 2100 13379
Ja esat lejupielādējis vai iegādājies Microsoft Excel pievienojumprogrammu PLEX un jums ir jautājumi vai pieprasījumi, lūdzu, noklikšķiniet šeit. 310 1587
808 11620
Diskusija par funkcionalitāti, noteikumiem utt. 269 3464

Šobrīd tiešsaistē (viesi: 590, lietotāji: 12, no tiem slēptie: 3) ,

Šodien (37), (32), (28), (37), (36), (52) dzimšanas diena ir

Kopējais reģistrēto lietotāju skaits: 83105

Diskusijā piedalījos: 31843

Kopējais tēmu skaits: 105875

gadījuma deklinācija programmā Excel

Nodaļā Citas valodas un tehnoloģijas uz autora doto jautājumu, vai Excel formātā ir iespējams automātiski locīt lietvārdus Zufars labākā atbilde ir Laba diena.
Ja mēs runājam par pilnu vārdu, amatu nosaukumiem vai nodaļām, tad varat. Tiesa, tas ir rīks vairāk izstrādātājam. Tomēr lietotājs to var arī izdomāt. Piemēros ir iekļauti gatavie makro programmai Excel.
Veiksmi!
PS Meklējiet Google pēc atslēgas "Uzvārdu, vārdu un uzvārdu deklinācija pēc gadījumiem"

22 atbildes

Čau! Šeit ir tēmu izlase ar atbildēm uz jūsu jautājumu: vai Excel formātā ir iespējams automātiski locīt lietvārdus

Atbilde no flush
Nē, šis līdzeklis netiek atbalstīts programmā Excel. Bet konkrētā gadījumā varat izmantot funkciju IF, lai atlasītu vienu vai otru opciju.

Atbilde no Proscenijs
Jūs atrodaties kategorijā "Programmēšana", tāpēc neviens nevar jums aizliegt rakstīt savu funkciju VBA, kas veiks šo labdarības darbu. Un tikai problēmas risinājums šajā formātā ir diezgan reāls.

Atbilde no kristīt
Es dzirdēju, ka krievu valodas reforma ir pagājusi, bet es pat nevarēju iedomāties, ka varētu ieviest "lietvārdus Excel formātā"))))))

Pielāgota funkcija MS Excel

Pilna vārda deklients pa reģistriem

Funkcija ļauj parādīt uzvārdu, vārdu un patronimitāti, kas norādīta nominatīvā reģistra formā, jebkura cita reģistra formā.

Pielietojuma zona:

Funkciju ir ērti izmantot, lai automatizētu dokumentu ģenerēšanu programmā MS Excel (vai atvieglotu to izveidošanu manuāli), kur pilns nosaukums jānorāda nevis nominatīvajā gadījumā: dažāda veida līgumi, kases orderi, kvītis, saskaņošanas akti, rīkojumi. , protokoli, pilnvaras u.c.

Funkcija ir neaizstājama arī tad, ja automatizācijas rīki realizē augstākminēto dokumentu veidošanu MS Word aplikācijā, pamatojoties uz MS Excel tabulu datiem.

Lietošanas piemēri:

  • līgumā: “vadītāja personā Baranovs Petrs Vjačeslavovičs«
  • skaidras naudas orderos: "izdots Gnatjuks Pāvels Vasiļjevičs"," saņemts no Gricenko Irina Sergejevna«
  • pilnvarā: "Uzticu transportlīdzekļa apsaimniekošanu Smirņickis Vitālijs Valerijevičs«
  • secībā: "iecelt Stepašova Olga Nikolajevna«
  • protokolā: “ziņojums sagatavots Dvoržeckis Ņikita Ivanovičs«

Kas tiek īstenots:

  • uzvārdi ar visām NVS valstu teritorijā izplatītajām galotnēm "-ov", "-ev", "-in", "-yan (ts)", "-sky (-tsky)", "-sky (- tsky)", "-th", "-th", "-their", "-ets", "-nko", "-uk", "-yuk", "-ich", "-iya", u.c.: Pavlovs, Zinovjevs, Gagarins, Petrosjans, Visockis, Trubetskojs, Cojs, Zadorožnijs, Sadovņiči, Sedihs, Dolgihs, Soskoveca, Ņesterenko, Gončaruks, Daņiļuks, Rabinovičs, Danēlija, Kvaša, Vrubels, Kozaks u.c., kā Kazačoks kā atbilstošos sieviešu uzvārdus
  • tiek ņemtas vērā atšķirības vīriešu un sieviešu uzvārdu deklinācijā: Vēvere Viktors un Vēvere Svetlana, Kozovets Antons un Kozoveca Jekaterina
  • salikti uzvārdi tiek apstrādāti pareizi: piemēram, Mamins-Sibirjaks, Saltikovs-Ščedrins, Nemirovičs-Dančenko, Ļebedevs-Kumačs
  • ārzemju uzvārdi neatkāpjas: Galois, Morois, Defo, Dali, Meringue, Verdi, Garcia, Hemingway u.c.
  • patronīmi ar daļiņām “-ogly”, “-kyzy”, “ibn” ir veiksmīgi apstrādāti: Mammadov Polad Murtuza oglu -> Mamedov Polad Murtuza oglu, Gassan Abdurakhman ibn Khattab -> Hassan Abdurakhman ibn Khattab, Abu Ali ibn ibn Sinaja
  • dzimumu (vīrietis/sieviete) automātiski nosaka patronīms, un, pamatojoties uz to, tiek atlasīti atbilstošie deklinācijas noteikumi
  • situācijās, kad ir grūti automātiski noteikt dzimumu (vidējais vārds ir svešs vai nav), kā funkcijas parametru varat norādīt dzimumu
  • ir iespējama izvade saīsinātā formā “uzvārds + iniciāļi”: Polozovs N. A., Vasiļjeva A. K., Dvoržetskis E. E.
  • izmantošanas iespēja kā virsbūves(var izmantot visos failos šajā darba vietā), un formā failā iegultais kods(funkcija darbosies šajā failā jebkurā darba vietā - tas ir ērti, ja, piemēram, fails tiek nosūtīts darījuma partnerim)
  • atvērtā pirmkoda kods - ja vēlaties, varat izpētīt algoritmu vai modificēt to

Kā pieslēgties?

Programma ir viens fails, ko sauc bdgFIOPropisyu.bas. Lai to izmantotu noteiktā failā, funkcija ir jāimportē šajā failā. Šim nolūkam jums ir nepieciešams:

  1. atveriet MS Excel failu, kurā vēlaties izmantot funkciju
  2. ievadiet VBA redaktoru, nospiežot karsto taustiņu "Alt + F11" vai izvēlnē:
  3. VBA redaktora galvenajā izvēlnē atlasiet vienumu "Fails" -> "Importēt failu ...":
  4. parādītajā faila atlases logā atlasiet failu bdgFIOPropisyu.bas un noklikšķiniet uz pogas "Atvērt":

Viss, programmas kods ir importēts un to var izmantot.

Kā izmantot?

Šeit ir vēl daži tā izmantošanas piemēri:

Situācijas, kurās funkcija varētu darboties nepareizi:

Neskatoties uz to, ka ir diezgan daudz situāciju, kad funkcijas darbība var būt neapmierinoša, iespēja praktiskajā darbā sastapties ar šādu pilnu nosaukumu ir diezgan maza, jo 99,9% gadījumu Krievijas teritorijā atrastie uzvārdi tiek noraidīti saskaņā ar vispārējiem noteikumiem.
Turklāt jāatzīmē, ka arī citi algoritmi un programmas nevar garantēt rezultāta pareizību 100% gadījumu - krievu valoda ir pārāk liela un spēcīga, lai to aprakstītu ar loģisku noteikumu kopumu (par to ietekmi skatīt zemāk). uzsvara novietojums vārdā, uzvārda izcelsme, par uzvārda sievietes formas rakstīšanas atkarību no vīriešu dzimtes formas rakstīšanas u.c.).

  • Saskaņā ar krievu valodas noteikumiem, vīrieša un sievietes deklinācija svešvaloda Uzvārdi, kas beidzas ar "-a" un "-ya", ir atkarīgi no uzsvara vietas vārdā un uzvārda izcelsmes.
    Visi uzvārdi, kas beidzas ar nesaspringts“-a” aiz līdzskaņiem tie samazinās: Seneka -> Seneka, Petrarka -> Petrarka, Smetana -> Smetana, Kurosava -> Kurosava, Glinka -> Glinka, Okudžava -> Okudžava uc Uzvārdu deklinācija ar šoks“-a” beigās ir atkarīgs no tā izcelsmes: franču cilmes uzvārdi nav slīpi: Dumá, Degá, Fermá, Petipá utt., Citas izcelsmes uzvārdi (no slāvu un austrumu valodām) ir slīpi: Mitta -> Mitty, Kvasha -> Kvashi, Panna -> Pannas, Pokers -> Pokers, Hamza -> Hamza utt.
    Tāpat nav noraidāmi franču cilmes uzvārdi ar uzsvaru “-ya” beigās: Zola, Troyat. Visi pārējie uzvārdi uz "-ya" ir noraidīti: Golovnya -> Golovny, Danelia -> Danilia, Beria -> Berija, Goya -> Goya.
    Tā kā nav iespējams programmatiski noteikt akcenta pozīcijas un uzvārda izcelsmi, programmas algoritms pieņem, ka visi šādi uzvārdi tiek noraidīti saskaņā ar vispārīgiem noteikumiem. Tāpēc franču uzvārdus ar akcentu galotnē programma apstrādā nepareizi: Dumas -> Dumas, Zola -> Zoli, Petipa -> Petipa.
  • Vīriešu uzvārdi, kas beidzas ar "-y", "-y", "-oy", tiek noraidīti kā īpašības vārdi Gorkijs -> Gorkijs, svētīgs -> svētīgs, bruņotais -> bruņotais. Izņēmums ir gadījumi, kad uzvārds ar šādu galotni ir vispārpieņemts lietvārds (Kozodoy, Vodopoy, Genii, Scenario) vai pēc izcelsmes ir svešvārds (Tsoi, Tskhoi, Choi). Tā kā nav iespējams programmatiski noteikt, vai uzvārds ir šāds izņēmums, parasti tiek pieņemts, ka visi uzvārdi ar galotnēm "-y", "-y", "-y" tiek noraidīti kā īpašības vārdi. Lielākajā daļā gadījumu tā ir taisnība, tomēr izņēmuma gadījumos ar uzvārdiem-lietvārdiem funkcijas rezultāts būs kļūdains: Kozodojs Jakovs -> Kaza Jakovs, Ģēnijs Stefans -> Genego Stefan.
    Tomēr izņēmuma kārtā algoritms ņem vērā uzvārdu deklināciju ar šādām galotnēm un mazāk nekā 5 burtu garumu (galvenokārt korejiešu izcelsmes): Tsoi Viktor -> Tsoi Viktor.
  • Dažos gadījumos pareiza sieviešu uzvārda deklinācija, kas beidzas ar “-ina”, “-ova”, ir iespējama tikai tad, ja ir zināma atbilstošā vīrieša uzvārda deklinācija: Zemčužina Ludmila, Malina Svetlana var tikt noraidīta kā parastajā formā: Žemčužina Ludmila -> Žemčužina Ludmila, Maļina Svetlana -> Maļina Svetlana (ja attiecīgie vīriešu uzvārdi ir, piemēram, Žemčužina Boriss un Malins Oļegs), un lietvārda formā: Žemčužina Ludmila -> Žemčužina Ludmila, -> Maļina Svetlana (ja uzvārda vīrišķās formas, piemēram, Žemčužina Boriss un Maļina Oļega).
    Algoritmā šādas nianses nav iespējams ņemt vērā, tāpēc visus sieviešu uzvārdus funkcija apstrādā saskaņā ar tiem pašiem noteikumiem (kā īpašības vārdi), kas dažos gadījumos var novest pie nepareiziem rezultātiem.
  • Līdzīga situācija ir ar vīriešu un sieviešu uzvārdiem, kas beidzas ar “-ov (a)”, “-ev (a)”, “-in (a)”, kas ir homonīmi ar kopīgu lietvārdu: Borov, Lev, Filin, Barin , Korovs, Pūce, Glezniecība, Spalvas, Senatne u.c.). Programmatiski nav iespējams noteikt uzvārda un lietvārda identitāti ar formālām zīmēm, tāpēc šādu uzvārdu deklinācija pēc vienotiem vispārīgiem noteikumiem noved pie nepareiziem formas rezultātiem: Ļevs Pāvels -> Levijs Pāvels, Filins Sergejs -> Fiļins Sergejs, Korovs Ksenija -> Korovaja Ksenija, Pūce Olga -> Pūce Olga, Allas glezna -> Allas glezna.
  • Vīriešu uzvārdi, kas beidzas ar mīksto zīmi, mēdz: Vrubels Mihails -> Vrubels Mihails, Gogolis Nikolajs -> Gogols Nikolajs utt. Tomēr, samazinoties, šādu uzvārdu galotnes ir atkarīgas no tā, kādi lietvārdi - vīriešu, sieviešu vai vidējie - tie ir.
    Algoritmiski lietvārda dzimumu noteikt nav iespējams, tādēļ gadījumos, kad vīrieša uzvārds ir sieviešu dzimtes vai neitrālas dzimtes lietvārds, funkcija nedarbosies pareizi: Stal Ivan -> Stal Ivan, Wormwood Victor -> Wormwood Viktors.
  • Uzvārdu, kas beidzas ar "-zha", "-tsa", "-cha", "-sha", "-sha", instrumentālā gadījuma veidošanās ir atkarīga no vārda uzsvēruma: ja šī galotne ir neuzsvērta, tad, kad deklinācija tas mainās uz "-ey": Kapitsa Peter -> Kapitsa Peter, Cloud Fedor -> Cloud Fedor; ja galotne ir uzsvērta, to aizstāj ar “-oy”: Kvasha Igor -> Kvasha Igor, Candle Ivan -> Candle Ivan. Līdzīga situācija ir ar uzvārdiem, kas beidzas ar "-ets": bez uzsvēruma galotne mainās uz "-em": Palets Viktor -> Finger Viktor; zem stresa - uz "-th": Soskovets Oļegs -> Soskovets Oļegs.
    Kā minēts iepriekš, programmatiski nav iespējams noteikt vārda uzsvara pozīcijas, tāpēc programmas algoritms pieņem, ka vārdos, kas beidzas ar “-zha”, “-tsa”, “-cha”, “-sha”, “ -sha” , galotne ir neuzsvērta (tādu vārdu ir vairāk), tas ir, instrumentālo lietu vienmēr veido galotne “-ey”. Gluži pretēji, vārdos, kas beidzas ar “ets”, tiek pieņemts, ka galotnei ir stress, tas ir, deklinācija būs ar galotni “-om”. Attiecīgi citos gadījumos tiks novērotas formas kļūdas: Igors Kvaša, Ivans Svečejs, Viktors Fingers.
  • Saskaņā ar krievu valodas noteikumiem dubultā krievu uzvārda pirmā daļa tiek noraidīta, ja to var izmantot kā uzvārdu pati par sevi: Mamina-Sibirjaka darbs, Saltikova-Ščedrina stāsts, Rimska-Korsakova opera utt. . Citādi tas nemainās: Van Dika glezna, Dona Žuana piedzīvojumi, Dona Kihota skvērs utt. Tā, piemēram, uzvārdā Semenov-Tjan-Šanskis pirmā daļa ir slīpa, bet ne otrkārt: Semenova-Tjana-Šanska darbi.
    Atkal, algoritmiski nav iespējams noteikt, vai uzvārda sastāvdaļa ir neatkarīga, tāpēc darbam tiek pieņemts, ka ir jāatsakās no visām saliktā uzvārda daļām (vairumā gadījumu tas tā ir), kas situāciju skaits noved pie kļūdām: Van Diks, Dona - Kihots, Semjonovs-Tjans-Šanskis.
  • Ārzemju uzvārdi, kas beidzas ar "-ov" un "-in" instrumentālajā gadījumā maina galotni uz "-th": Bendžamins Franklins, Čārlzs Darvins, Čārlijs Čaplins, Aleksandrs Grīns. "Krievu" uzvārdi ar līdzīgām galotnēm beidzas ar "-y": Ivanovs, Gagarins, Fonvizins utt. Neskatoties uz to, ka iepriekš minētie uzvārdi (Franklins, Darvins, Čaplins, Grīns) algoritmā tiek ņemti vērā kā izņēmumi, pastāv neliela iespēja, ka radīsies kāds cits līdzīgs svešzemju uzvārds - šajā gadījumā funkcijas rezultāts. būs nepareizi.

Uzvārdu un vārdu deklinācijas noteikumi tiek lietoti saskaņā ar N. A. Eskovas darba 13.1. un 13.2. Grūtības lietvārdu locīšanā. Mācību un metodiskie materiāli praktiskiem vingrinājumiem kursā "Mūsdienu poligrāfijas valoda"(PSRS Valsts preses komiteja. Vissavienības iespieddarbu padziļinātas apmācības institūts. M., 1990).

Cena: 1500 rubļu