<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://wiki.kint.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%BE%D0%B4%D0%B0_%D0%BF%D0%BE_%D0%A4%D0%98%D0%9E_%281%D0%A1%29</id>
	<title>Определение рода по ФИО (1С) - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.kint.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%BE%D0%B4%D0%B0_%D0%BF%D0%BE_%D0%A4%D0%98%D0%9E_%281%D0%A1%29"/>
	<link rel="alternate" type="text/html" href="http://wiki.kint.ru/index.php?title=%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%BE%D0%B4%D0%B0_%D0%BF%D0%BE_%D0%A4%D0%98%D0%9E_(1%D0%A1)&amp;action=history"/>
	<updated>2026-05-18T04:14:44Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.31.15</generator>
	<entry>
		<id>http://wiki.kint.ru/index.php?title=%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%BE%D0%B4%D0%B0_%D0%BF%D0%BE_%D0%A4%D0%98%D0%9E_(1%D0%A1)&amp;diff=21564&amp;oldid=prev</id>
		<title>Павел Лазарев: Новая страница: «Категория:Примеры кода 1С  ==Текущий вариант== &lt;source lang=1c&gt; // Функция получает пол по ФИО физл...»</title>
		<link rel="alternate" type="text/html" href="http://wiki.kint.ru/index.php?title=%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%BE%D0%B4%D0%B0_%D0%BF%D0%BE_%D0%A4%D0%98%D0%9E_(1%D0%A1)&amp;diff=21564&amp;oldid=prev"/>
		<updated>2010-10-07T06:26:44Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «&lt;a href=&quot;/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_%D0%BA%D0%BE%D0%B4%D0%B0_1%D0%A1&quot; title=&quot;Категория:Примеры кода 1С&quot;&gt;Категория:Примеры кода 1С&lt;/a&gt;  ==Текущий вариант== &amp;lt;source lang=1c&amp;gt; // Функция получает пол по ФИО физл...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Категория:Примеры кода 1С]]&lt;br /&gt;
&lt;br /&gt;
==Текущий вариант==&lt;br /&gt;
&amp;lt;source lang=1c&amp;gt;&lt;br /&gt;
// Функция получает пол по ФИО физлица&lt;br /&gt;
//&lt;br /&gt;
// Параметры&lt;br /&gt;
// 	ФамилияИмяОтчество - исходная строка&lt;br /&gt;
//&lt;br /&gt;
// Возвращаемое значение: пол в виде &amp;quot;М&amp;quot;, &amp;quot;Ж&amp;quot; или &amp;quot;&amp;quot; если не удалось определить&lt;br /&gt;
// 	- &lt;br /&gt;
//&lt;br /&gt;
Функция стрПолФИО(ФамилияИмяОтчество) Экспорт&lt;br /&gt;
	Фамилия = &amp;quot;&amp;quot;; Имя = &amp;quot;&amp;quot;; Отчество = &amp;quot;&amp;quot;;&lt;br /&gt;
	стрПолучитьФИО(ФамилияИмяОтчество, Фамилия, Имя, Отчество);&lt;br /&gt;
	&lt;br /&gt;
	Если Отчество &amp;lt;&amp;gt; &amp;quot;&amp;quot; Тогда&lt;br /&gt;
		окончание1 = Сред(Отчество, СтрДлина(Отчество));&lt;br /&gt;
		Если окончание1 = &amp;quot;ч&amp;quot; ИЛИ окончание1 = &amp;quot;в&amp;quot; Тогда&lt;br /&gt;
			Возврат &amp;quot;М&amp;quot;;&lt;br /&gt;
		ИначеЕсли окончание1 = &amp;quot;а&amp;quot; Тогда&lt;br /&gt;
			Возврат &amp;quot;Ж&amp;quot;;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
	&lt;br /&gt;
	окончание1 = Сред(Фамилия, СтрДлина(Фамилия));&lt;br /&gt;
	окончание2 = Сред(Фамилия, СтрДлина(Фамилия) - 1);&lt;br /&gt;
	окончание3 = Сред(Фамилия, СтрДлина(Фамилия) - 2);&lt;br /&gt;
	окончанияМужскихФамилий=&amp;quot;,ов,ев,ий,ин,&amp;quot;;&lt;br /&gt;
	окончанияЖенскихФамилий=&amp;quot;,ова,ева,ина,ая,&amp;quot;;&lt;br /&gt;
	Если Найти(окончанияМужскихФамилий, &amp;quot;,&amp;quot; + окончание2 + &amp;quot;,&amp;quot;) &amp;gt; 0 Тогда&lt;br /&gt;
		Возврат &amp;quot;М&amp;quot;;&lt;br /&gt;
	ИначеЕсли Найти(окончанияЖенскихФамилий, &amp;quot;,&amp;quot; + окончание2 + &amp;quot;,&amp;quot;) &amp;gt; 0 &lt;br /&gt;
		ИЛИ Найти(окончанияЖенскихФамилий, &amp;quot;,&amp;quot; + окончание3 + &amp;quot;,&amp;quot;) &amp;gt; 0 &lt;br /&gt;
		Тогда&lt;br /&gt;
		Возврат &amp;quot;Ж&amp;quot;;&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
	&lt;br /&gt;
	Если Имя &amp;lt;&amp;gt; &amp;quot;&amp;quot; Тогда&lt;br /&gt;
		окончание1 = Сред(Имя, СтрДлина(Фамилия));&lt;br /&gt;
		Если окончание1 = &amp;quot;а&amp;quot; ИЛИ окончание1 = &amp;quot;я&amp;quot;  ИЛИ окончание1 = &amp;quot;е&amp;quot; Тогда&lt;br /&gt;
			Возврат &amp;quot;Ж&amp;quot;;&lt;br /&gt;
		Иначе&lt;br /&gt;
			Возврат &amp;quot;М&amp;quot;;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	Возврат &amp;quot;&amp;quot;;&lt;br /&gt;
КонецФункции&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Процедура Тест_стрПолФИО() Экспорт&lt;br /&gt;
	&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;М&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Иванов Иван Иванович&amp;quot;));&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;М&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Иванов Иван&amp;quot;));&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;М&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Иванов&amp;quot;));&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;Ж&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Иванова&amp;quot;));&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;Ж&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Иванова Лидия Ивановна&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;Ж&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Чайко Лидия Ивановна&amp;quot;));&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;М&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Чайко Иван Иванович&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;М&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Попов Никита&amp;quot;));&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;Ж&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Попова Никита&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;Ж&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Чайко Лидия&amp;quot;));&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;Ж&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Чайко Ирина&amp;quot;));&lt;br /&gt;
	Тестирование.ПроверитьРавенство(&amp;quot;М&amp;quot;, БазовыеТипы.стрПолФИО(&amp;quot;Чайко Иван&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
КонецПроцедуры&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Функция разделяет строку ФИО на фамилию, имя, отчество &lt;br /&gt;
//&lt;br /&gt;
// Параметры&lt;br /&gt;
// 	ФамилияИмяОтчество - исходная строка&lt;br /&gt;
// 	Фамилия - результат, часть Фамилия&lt;br /&gt;
// 	Имя - результат, часть Имя&lt;br /&gt;
// 	Отчество - результат, часть Отчество&lt;br /&gt;
//&lt;br /&gt;
// Возвращаемое значение: Истина, если разделение выполнено успешно, иначе Ложь&lt;br /&gt;
//&lt;br /&gt;
Функция стрПолучитьФИО(ФамилияИмяОтчество, Фамилия, Имя, Отчество) Экспорт&lt;br /&gt;
	Фамилия = &amp;quot;&amp;quot;; Имя = &amp;quot;&amp;quot;; Отчество = &amp;quot;&amp;quot;;&lt;br /&gt;
	ФИО = СокрЛП(ФамилияИмяОтчество);&lt;br /&gt;
	&lt;br /&gt;
	Если ПустаяСтрока(ФИО) Тогда Возврат Ложь; КонецЕсли;&lt;br /&gt;
	ПозПробела = Найти(ФИО, &amp;quot; &amp;quot;);&lt;br /&gt;
	Если ПозПробела = 0 Тогда &lt;br /&gt;
		ПерваяБуква = Лев(Фамилия, 1);&lt;br /&gt;
		Если Врег(ПерваяБуква) &amp;lt;&amp;gt; ПерваяБуква Тогда &lt;br /&gt;
			Возврат Ложь; &lt;br /&gt;
		Иначе&lt;br /&gt;
			Фамилия = ФИО;&lt;br /&gt;
			Возврат Истина;&lt;br /&gt;
		КонецЕсли;&lt;br /&gt;
	КонецЕсли;&lt;br /&gt;
	&lt;br /&gt;
	Фамилия = Лев(ФИО, ПозПробела-1);&lt;br /&gt;
	ПерваяБуква = Лев(Фамилия, 1);&lt;br /&gt;
	Если Врег(ПерваяБуква) &amp;lt;&amp;gt; ПерваяБуква Тогда Фамилия = &amp;quot;&amp;quot;; Возврат Ложь; КонецЕсли;&lt;br /&gt;
	&lt;br /&gt;
	ИО = СокрЛ(Сред(ФИО, ПозПробела+1));&lt;br /&gt;
	ПерваяБуква = Лев(ИО, 1);&lt;br /&gt;
	Если Врег(ПерваяБуква) &amp;lt;&amp;gt; ПерваяБуква Тогда Фамилия = &amp;quot;&amp;quot;; Возврат Ложь; КонецЕсли;&lt;br /&gt;
	&lt;br /&gt;
	ПозПробела = Найти(ИО, &amp;quot; &amp;quot;);&lt;br /&gt;
	Если ПозПробела = 0 Тогда Имя = ИО; Возврат Истина; КонецЕсли;&lt;br /&gt;
	Имя = Лев(ИО, ПозПробела-1);&lt;br /&gt;
	&lt;br /&gt;
	Отчество = СокрЛ(Сред(ИО, ПозПробела+1));&lt;br /&gt;
	ПерваяБуква = Лев(Отчество, 1);&lt;br /&gt;
	Если Врег(ПерваяБуква) &amp;lt;&amp;gt; ПерваяБуква Тогда Отчество = &amp;quot;&amp;quot;; Возврат Ложь; КонецЕсли;&lt;br /&gt;
	Возврат Истина;&lt;br /&gt;
КонецФункции // стрПолучитьФИО()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==На дельфи==&lt;br /&gt;
&lt;br /&gt;
Источник: http://forum.developing.ru/archive/index.php/t-1559.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=pas&amp;gt;&lt;br /&gt;
function GenCaseFIO(const s:string):string;&lt;br /&gt;
var&lt;br /&gt;
f,i,o,t:string; gen:TGender;&lt;br /&gt;
begin&lt;br /&gt;
f:=ExtractWord(1,S,StdWordDelims);&lt;br /&gt;
i:=ExtractWord(2,S,StdWordDelims);&lt;br /&gt;
o:=trim(ExtractWord(3,S,StdWordDelims)+' '+ExtractWord(4,S,StdWordDelims));&lt;br /&gt;
if length(o)&amp;gt;2 then begin&lt;br /&gt;
if (o[length(o)] in ['ч','в']) or ((o[length(o)] in ['ы','э']) and (o[length(o)-1]='л')) then gen:=masculine&lt;br /&gt;
else if (o[length(o)] = 'а') or ((o[length(o)] in ['ы','э']) and (o[length(o)-1]='з')) then gen:=feminine&lt;br /&gt;
else gen:=genunknown;&lt;br /&gt;
end else if length(f)&amp;gt;2 then begin&lt;br /&gt;
t:=f[length(f)]+f[length(f)];&lt;br /&gt;
if (t='ов') or (t='ий') then gen:=masculine&lt;br /&gt;
else if (t='ва') or (t='ий') then gen:=masculine&lt;br /&gt;
else gen:=genunknown;&lt;br /&gt;
end else&lt;br /&gt;
gen:=genunknown;&lt;br /&gt;
result:=SurnameInGenitiveCase(gen,f)+' '+NameInGenitiveCase(gen,i)+' '+PatronymicInGenitiveCase(gen,o);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==На foxpro==&lt;br /&gt;
Источник: http://forum.vingrad.ru/forum/s/9d2ea4b47c82f5731dd6ca2f07b09550/topic-238659/anchor-entry1715662/0.html&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=txt&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
FUNCTION Getpol (sss)&lt;br /&gt;
rrr=''&lt;br /&gt;
SSS=' '+ALLTRIM(UPPER(SSS))+' '&lt;br /&gt;
DO CASE g&lt;br /&gt;
CASE GETWORDCOUNT(SSS)=4&lt;br /&gt;
 IF 'ОГЛЫ'$SSS&lt;br /&gt;
 RRR='М'&lt;br /&gt;
 ENDIF&lt;br /&gt;
 IF 'КЫЗЫ'$SSS&lt;br /&gt;
 RR='Ж'&lt;br /&gt;
 ENDIF&lt;br /&gt;
CASE GETWORDCOUNT(SSS)=3&lt;br /&gt;
 IF 'ИЧ '$GETWORDNUM(SSS,3)+' '&lt;br /&gt;
 RRR='М'&lt;br /&gt;
 ENDIF&lt;br /&gt;
 IF 'НА '$GETWORDNUM(SSS,3)+' '&lt;br /&gt;
 RRR='Ж'&lt;br /&gt;
 ENDIF&lt;br /&gt;
 IF EMPTY(RRR)&lt;br /&gt;
  IF 'ЕВ '$GETWORDNUM(SSS,1)+' ' OR 'ОВ '$GETWORDNUM(SSS,1)+' ' OR 'ИН '$GETWORDNUM(SSS,1)+' ' OR 'ИЙ '$GETWORDNUM(SSS,1)+' '&lt;br /&gt;
  RRR='М'&lt;br /&gt;
  ENDIF&lt;br /&gt;
  IF 'ЕВА '$GETWORDNUM(SSS,1)+' ' OR 'ОВА '$GETWORDNUM(SSS,1)+' ' OR 'ИНА '$GETWORDNUM(SSS,1)+' ' OR 'АЯ '$GETWORDNUM(SSS,1)+' '&lt;br /&gt;
  RRR='Ж'&lt;br /&gt;
  ENDIF&lt;br /&gt;
 ENDIF&lt;br /&gt;
CASE GETWORDCOUNT(SSS)&amp;lt;3&lt;br /&gt;
 IF 'ЕВ '$GETWORDNUM(SSS,1)+' ' OR 'ОВ '$GETWORDNUM(SSS,1)+' ' OR 'ИН '$GETWORDNUM(SSS,1)+' ' OR 'ИЙ '$GETWORDNUM(SSS,1)+' '&lt;br /&gt;
  RRR='М'&lt;br /&gt;
  ENDIF&lt;br /&gt;
 IF 'ЕВА '$GETWORDNUM(SSS,1)+' ' OR 'ОВА '$GETWORDNUM(SSS,1)+' ' OR 'ИНА '$GETWORDNUM(SSS,1)+' ' OR 'АЯ '$GETWORDNUM(SSS,1)+' '&lt;br /&gt;
  RRR='Ж'&lt;br /&gt;
  ENDIF&lt;br /&gt;
ENDCASE&lt;br /&gt;
RETURN rrr&lt;br /&gt;
ENDFUNC&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Систематизация распознавания пола и этноса по ФИО==&lt;br /&gt;
&lt;br /&gt;
Источник: http://ivan.begtin.name/2010/05/04/%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BF%D0%BE%D0%BB%D0%B0-%D0%B8/&lt;br /&gt;
&lt;br /&gt;
{{cite|1=http://ivan.begtin.name/2010/05/04/%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BF%D0%BE%D0%BB%D0%B0-%D0%B8/|2=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Какое-то время назад я эту тему поднимал в посте «Распознавание национальности по имени» – http://ivbeg.livejournal.com/119528.html&lt;br /&gt;
&lt;br /&gt;
Но там было нечто вроде результатов экспериментов, сейчас же затрону тему систематизации того как можно обрабатывать ФИО и какую информацию можно на основе ФИО извлечь.&lt;br /&gt;
&lt;br /&gt;
Предыстория этого текста исключительно практическая, поскольку я очень много с данными работаю, то периодически возникают задачи по тому как обогатить, улучшить, извлечь и отклассифицировать данные.  Так, например, анализ  ФИО даёт возможность  добавить как минимум 2 новых среза – гендерный и этнический (более правильное название определения национальности).&lt;br /&gt;
&lt;br /&gt;
В задачах по визуализации гендерный срез особенно интересен, поскольку при наличии большого числа дополнительных характеристик можно показать различия весьма наглядно.&lt;br /&gt;
&lt;br /&gt;
Этнический же срез интересен только на больших выборках, но поскольку эту информацию хотя бы частично можно извлечь, то опишу этот процесс.&lt;br /&gt;
&lt;br /&gt;
Почему систематизация ? Лично я придерживаюсь того мнения что систематизации мало не бывает. Иногда это вредит – поскольку приводит к значительному углублению в детали, но чаще это помогает поскольку позволяет лучше понять предметную область и прежде чем приступать к воплощению в коде каких-либо алгоритмов – понять, с чем же имеем дело и как обеспечить простоту анализа данных в сочетании с максимально возможным охватом.&lt;br /&gt;
&lt;br /&gt;
В случае ФИО, начало систематизации начинается с шаблонов.&lt;br /&gt;
&lt;br /&gt;
Шаблоны&lt;br /&gt;
&lt;br /&gt;
Форм записи ФИО не очень много и они вполне поддаются систематизации и укладываются в несколько шаблонов которые, в свою очередь, разделяются на несколько элементов.&lt;br /&gt;
&lt;br /&gt;
Этих элементов немного и их можно перечислить:&lt;br /&gt;
&lt;br /&gt;
s – Фамилия (surname)&lt;br /&gt;
&lt;br /&gt;
f – Личное имя (first name)&lt;br /&gt;
&lt;br /&gt;
m – Отчество (midname)&lt;br /&gt;
&lt;br /&gt;
S – Однобуквенная запись фамилии&lt;br /&gt;
&lt;br /&gt;
F – Однобуквенная запись имени&lt;br /&gt;
&lt;br /&gt;
M – Обнобуквенная запись отчества.&lt;br /&gt;
&lt;br /&gt;
Далее при анализе ФИО я буду исходить из того что ФИО – это не только фамилия, имя и отчество, но в реальной жизни это гораздо большее число форм написания того же.&lt;br /&gt;
&lt;br /&gt;
При этом у использования этих элементов есть свои особенности в частности есть устоявшиеся сочетания в которых они присутствуют. Далее я приведу перечень шаблонов для определения этих сочетаний:&lt;br /&gt;
&lt;br /&gt;
sfm – Фамилия, имя и отчество. Например, Пилипенко Мария Геннадьевна&lt;br /&gt;
&lt;br /&gt;
fms – Имя, Отчество, Фамилия. Например, Александр Аронович Хромов&lt;br /&gt;
&lt;br /&gt;
sFM – Фамилия и по первой букве от имени и отчества. Например, Васильев И. И. или Минниханов Р Е&lt;br /&gt;
&lt;br /&gt;
FMs – первые буквы от имени и отчества и фамилия полностью. Пример: А. Ю. Макаренко, Н.Г. Буранов&lt;br /&gt;
&lt;br /&gt;
sfM – фамилия и имя полностью и первая буква от отчества. Примеры: Ефимов Борис А., Карманова Мария В.&lt;br /&gt;
&lt;br /&gt;
Fs – Первая буква имени и фамилия. Например, А. Румянцев или В Ручкин .&lt;br /&gt;
&lt;br /&gt;
sF – фамилия полностью и первая буква от имени. Примеры: Борисов Г., Рахмонова Е.&lt;br /&gt;
&lt;br /&gt;
s – только фамилия. Например: Хазанов, Минниханов, Дудкина, Малых&lt;br /&gt;
&lt;br /&gt;
fs  - имя, фамилия. Например: Арут Карапетян, Борис Рыбин&lt;br /&gt;
&lt;br /&gt;
sf – фамилия, имя. Например: Климов Максим, Мирных Алексей, Дудяк Елена&lt;br /&gt;
&lt;br /&gt;
fm – имя, отчество. Например: Иван Петрович, Василий Аркадьевич, Рахиль Альбертовна&lt;br /&gt;
&lt;br /&gt;
f – личное имя. Примеры: Иван, Петр, Алексей, Равиль, Аслан и т.д.&lt;br /&gt;
&lt;br /&gt;
SFM – по первой букве от фамилии, имени, отчества. Примеры: В.Р.Е, Е.Н.М.&lt;br /&gt;
&lt;br /&gt;
Является ли этот список шаблонов исчерпывающим? Весьма вероятно что нет, однако все остальные случаи будут достаточно редкими чтобы рассматривать их как исключения и систематизировать именно с точки зрения исключений.&lt;br /&gt;
&lt;br /&gt;
Правила разбора ФИО&lt;br /&gt;
&lt;br /&gt;
Когда известны все основные шаблоны и есть входящий поток для разбора можно приступать к описанию логики анализа.&lt;br /&gt;
&lt;br /&gt;
Прежде чем определять пол персоны или этнос важно разложить ФИО на элементы и для этой цели необходимо определить каким шаблоном ФИО написано. Как это сделать?&lt;br /&gt;
&lt;br /&gt;
1. Вначале разбить ФИО на элементы исходя из того что разделителями могут выступать пробелы и точки.&lt;br /&gt;
&lt;br /&gt;
2. Определяется количество частей после чего идёт ветвление на проверку по шаблонам. Если 1 часть (1 слово) – то шаблон s или f. Если две части, то sf, fm, fs, sF или Fs&lt;br /&gt;
&lt;br /&gt;
3. Для ФИО из 3-х частей проводится простая проверка не состоят ли какие-либо части из одной буквы. Если да и более двух, то быстро определяются такие шаблоны как SFM, sFM и FMs&lt;br /&gt;
&lt;br /&gt;
4. Далее как определить какая из частей каким типом элементов является. Есть два способа и их комбинация.&lt;br /&gt;
&lt;br /&gt;
Способ 1. Базы имён, фамилий и отчеств&lt;br /&gt;
&lt;br /&gt;
Всего уникальных имён сравнительно немного – десятки тысяч. То же самое с отчествами. Сложнее с фамилиями – их могут быть сотни тысяч и миллионы. Однако при наличии значительных массивов возможно создание баз имён, фамилий и отчеств, а далее ручная и полуавтоматическая разметка по полу и этносу.&lt;br /&gt;
&lt;br /&gt;
Способ 2. Регулярные выражения&lt;br /&gt;
&lt;br /&gt;
Для отчеств – окончания на -вич и -вна. Для фамилий выражений больше. Например, таки как: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ^(.*)(о|е|ё)в$, ^(.*)швили$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и так далее, несколько десятков.  А также есть набор выражений для имён, но там всё несколько сложнее и это отдельная тема.&lt;br /&gt;
&lt;br /&gt;
Для каждого из выражений может быть сопоставление его с полом или этнической группой.&lt;br /&gt;
&lt;br /&gt;
Способ 3. Использование баз и выражений совместно&lt;br /&gt;
&lt;br /&gt;
Если запись находится в базе – исходить их признаков в базе, если нет – применять разметку регулярным выражением.&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
5. После идентификация шаблона мы имеем его описание и, если его идентификация потребовала определения типа элементов, то и предположения о поле и, возможно, этносе персоны. Для полноты картины необходимо проверить все остальные элементы регулярными выражениями и/ли по базам.&lt;br /&gt;
&lt;br /&gt;
6. В конечном итоге результатом являются:&lt;br /&gt;
&lt;br /&gt;
- выявленный формат шаблона&lt;br /&gt;
&lt;br /&gt;
- размеченные элементы (фамилия, имя, отчество)&lt;br /&gt;
&lt;br /&gt;
А также, или все имеющиеся или один производный признак пола и, при возможности определения, этноса.&lt;br /&gt;
&lt;br /&gt;
Или же возврат,  и производного, и всех признаков. Об особенностях определения признаков в следующем пункте.&lt;br /&gt;
&lt;br /&gt;
Особенности&lt;br /&gt;
&lt;br /&gt;
Все было бы очень просто если бы не некоторые особенности которые важно помнить и учитывать.&lt;br /&gt;
&lt;br /&gt;
1. Есть множество случаев когда пол определить невозможно даже определив шаблон и отдельные элементы. Связано это не с несовершенством методов проверки, а с тем что далеко не всегда информация о поле содержится в ФИО. Вот несколько примеров: Малых А.А. – имя и отчество присутствуют только в виде первых букв, а фамилия Малых является универсальной и может принадлежать, как женщине, так и мужчине. Точно также с фамилиями на -ко, -их и множестве других. Фактически во всех случаях шаблонов sFM, FMs, Fs, sF и s у нас недостаточно элементов несущих информацию и определение ограничено имеющейся информацией. В виду этого результатом метода по определению пола по ФИО могут быть 4 варианта ответа: женский, мужской, универсальный и неизвестно.&lt;br /&gt;
&lt;br /&gt;
2. Есть множество региональной специфики в том что касается написания имён и отчеств. В частности в  азербайжанских казахских ФИО часто присутствует «Оглы» или «Кызы». Например, Асланов Ази Ахад оглы&lt;br /&gt;
&lt;br /&gt;
3. Много специфики в именах используемых в национальных республиках России и бывшем СССР. Точность распознавания будет зависеть от наличия датасетов по регионам.&lt;br /&gt;
&lt;br /&gt;
4. Описанный подход не охватывает случаи намерянных и случайных искажений. Например, когда вместо точки используют запятую или указывают ФИО вроде «Гадя Петрович Хренова». А также случаи с опечатками – это несколько более сложная, но не сверхсложная задача.&lt;br /&gt;
&lt;br /&gt;
5. Определения этноса задача сложная, в первую очередь, в виду значительных объёмов классифицируемой информации. Фактически её можно разделить на принципы определения различных этнических особенностей в ФИО разных народов. Например, окончания фамилий на «-ян» у армян или «-дзе» и «-швили» у грузин. А также на основе баз имён разных народов.  Однако есть много случаев когда определить этнос сложно поскольку имя может указывать лишь на то из какого языка оно происходит. А в некоторых случаях имена могут иметь множественное значение. Например имя Артур – весьма популярно среди армян и это армянское имя переводящееся как «свет истины» и одновременно это нередкое современное имя в России среди русских.&lt;br /&gt;
&lt;br /&gt;
Примеры&lt;br /&gt;
&lt;br /&gt;
Собственно всё вышеперечисленное какое-то время я реализовал довольно давно в виде довольно простого закрытого веб-сервиса который на входе кушает текст, а на выходе выдаёт JSON с результатами. Работает это всё настолько просто назвать это алгоритмом у меня язык не поворачивается – просто «полезная штука», ничего более.&lt;br /&gt;
&lt;br /&gt;
Вот несколько примеров.&lt;br /&gt;
&lt;br /&gt;
Текст: Бегтин И.В.&lt;br /&gt;
&lt;br /&gt;
Разбор в формате JSON:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{‘format’: ’sFM’, ‘gender’: ‘m’, ’sn’: u’Бегтин’, ‘fn_s’: u’И’, ‘text’: u’Бегтин И.В.’, ‘mn_s’: u’В’, ‘parsed’: True}&lt;br /&gt;
&lt;br /&gt;
Текст: Иван Викторович Бегтин&lt;br /&gt;
&lt;br /&gt;
Разбор в формате JSON:&lt;br /&gt;
&lt;br /&gt;
{‘format’: ‘fms’, ‘gender’: u’m', ‘mn’: u’Викторович’, ’sn’: u’Бегтин’, ‘text’: u’Бегтин Иван Викторович’, ‘parsed’: True, ‘fn’: u’Иван’}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где: fn – имя, sn – фамилия, mn – отчество, fn_s – первая буква имени, format – выявленный формат описания ФИО, parsed – флаг что формат был определён, gender – пол в виде одного из признаков m, f, u и «-» если определение пола не прошло.&lt;br /&gt;
&lt;br /&gt;
Нет только признаков этноса, поскольку сейчас они присутствуют только для имён&lt;br /&gt;
&lt;br /&gt;
Статистика&lt;br /&gt;
&lt;br /&gt;
В качестве небольшого дополнения приведу некоторые статистические наблюдения.&lt;br /&gt;
&lt;br /&gt;
Для проверки точности я взял небольшой массив примерно в  5 600 000 неуникальных записей из публичных официальных документов. А то есть с частыми повторениями одного и того же ФИО, но в разных формах. Например: где-то упоминается: Кудрявцев Е.В., где-то Кудрявцев Евгений, где-то Кудрявцев Евгений Викторович и так далее.&lt;br /&gt;
&lt;br /&gt;
В результате сформировалась следующая таблица частот использования тех или иных форм записи.&lt;br /&gt;
&lt;br /&gt;
 Шаблон Частота sfm 49,38% sFM 35,71% FMs 13,42% fms 1,24% sF 0,069% sf 0,055% Fs 0,038% sfM 0,029% s 0,026% fs 0,0010% f 0.0007%&lt;br /&gt;
&lt;br /&gt;
Фактически можно увидеть что при 4 основных написания – sfm, sFM, FMs и fms лидируют по частоте встречаемости. Но, как я упоминал ранее, здесь есть специфика в официальности. Если же анализировать другие массивы, то распределение шаблонов по популярности будет иным.&lt;br /&gt;
&lt;br /&gt;
В качестве резюме&lt;br /&gt;
&lt;br /&gt;
В общем-то разбор ФИО – это довольно простой пример на уровне «систематизации очевидного». Куда сложнее задачи по разбору адресов или, например, товарных позиций. Но ничего неразрешимого нет при условии последовательного упрощения и шаблонизации форматов представления, иногда многоуровневой.&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Павел Лазарев</name></author>
		
	</entry>
</feed>