Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Интеллектуально парсим имя.  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Всем привет, и хорошей рабочей недели!

Натолкнулся на классическую классический косяк. Есть одна система-поставщик данных для другой системы( MS CRM).
В худших в лучших традициях, на форме указания данных о клиенте- физике, ФИО вводится в одно единственное поле.

В большинстве случаев, когда мы парсим более менее русских клиентов, проблемы нет. Parsename вполне справляется.

Но как только приезжает "Рахматулин Артур Салтынбек оглы" или "Винсент ван дер Берг Николаевич", всё разваливается.

Как бы таких сложных персонажей более-менее разумно разруливать?
13 июн 17, 10:50    [20559623]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Cammomile,

требуйте писать через запятую и парсите :)
13 июн 17, 10:57    [20559640]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
Cammomile
Как бы таких сложных персонажей более-менее разумно разруливать?
При чём тут SQL Server?
Спрашиваете у бизнес-людей, как парсить такие имена, и пишете код.
13 июн 17, 11:10    [20559691]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Сервер не при чем, но тут у нас не только про сервер, но и про опыт людей, которые по-разному решали подобные вопросы. В принципе, идея заставить "девочек" писать через запятую, весьма хорошая. Хоть и не про сервер.
13 июн 17, 11:14    [20559713]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
Cammomile
про опыт людей, которые по-разному решали подобные вопросы.
Вопрос исключительно про бизнес-логику, то есть о том, что вам нужно видеть в полях имя фамилия отчество.
Либо это нужно выяснять "девочкам", которые будут ставить запятые, либо вам, что бы вы это запихнули в алгоритм.

Например, первое слово будет фамилией, второе именем, а всё остальное отчеством.
Тогда будет
Фамилия Рахматулин
Имя Артур
Отчество Салтынбек оглы
или
Фамилия Винсент
Имя ван
Отчество дер Берг Николаевич

Устраивает вас это?
Если да, то вот алгоритм, реализуйте.

Если нет, пусть, например, "девочки" будут сами разбираться, где что в этом тексте, и расставлять запятые.
13 июн 17, 11:30    [20559779]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
alexeyvg
Устраивает вас это?
Если да, то вот алгоритм, реализуйте.

Если нет, пусть, например, "девочки" будут сами разбираться, где что в этом тексте, и расставлять запятые.
Просто такие вещи не автоматизируются, без понимания искусственным интеллектом. Но это, боюсь, слишком сложно для простой бухучётсистемы :-)
13 июн 17, 11:31    [20559784]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Посчитал статистику по "фио", топ 2 русские и , внезапно, азербайджанцы с "оглы/кызы" на конце отчества.
Придется решать вопрос, опираясь на статистическое большинство. "Ван дер Вейдены", при таком подходе, конечно пострадают, но вариантов не много. =(
13 июн 17, 11:51    [20559885]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Окей, тогда поговорим по быстродействию.

Заделал так, можно ли значительно быстрее?
DECLARE @Str varchar(200) = REPLACE('Маммедова Александра Сараб кызы', ' ', '.')
SELECT REVERSE(PARSENAME(REVERSE(@str) ,1))
,      REVERSE(PARSENAME(REVERSE(@str) ,2))
,      REPLACE(SUBSTRING ( @str ,CHARINDEX('.', @Str, CHARINDEX('.',@Str,0)+1)+1 , 300),'.', ' ')
13 июн 17, 12:16    [20559987]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Cammomile,

Parsename функция весёлая но не для того и по этому если будет Маммедова ибн Александра Сараб кызы всё развалится
13 июн 17, 12:19    [20560000]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Справедливое замечание, больше 4 точек оно не переваривает. Ну значит совсем быстрого решения для такой задачи нет.
13 июн 17, 12:23    [20560016]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Не первый раз такая тема обсуждается...
Например: Кто лучше? (Фамилия Имя Отчество - > Фамилия И. О. )
13 июн 17, 12:25    [20560021]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Cammomile,

а с китайскими фамилиями что делать будете?
Они, конечно всегда на первом месте, перед именем,
но могут быть и односложными, и двусложными... Как и имена.
Мао Дзе Дун - скажите, где тут фамилия, а где имя?
Отчеств у них нет. Не то что у исландцев,
у которых нет фамилий, вместо которых отчества.
13 июн 17, 12:30    [20560038]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Я так думаю, что совсем по хорошему ,надо делать разметку "приставка-значимая часть"
Мы же понимаем, что "оглы" будет добавляться к отчеству в конце, а "мак" или "ван дер" спереди.
И этот маппинг сохранить в табличке(или захардкодить), а потом применять в РаспарсиИмяСУмом_инлайн().
13 июн 17, 12:30    [20560039]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Cammomile,

тупая трата времени, возможна как разовая акция распарсить существующих, но в жизни всегда будут проблемы
13 июн 17, 12:32    [20560049]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
TaPaK
Cammomile,

тупая трата времени, возможна как разовая акция распарсить существующих, но в жизни всегда будут проблемы
Просто сделать интерфейс для ручного заполнения полей Фамилия, Имя, Отчество по зиполненному полю ФИО.
Посадить за это дело оператора, чтобы всё имеющееся причесал.
А новые данные должны уже завтра вводить раздельно.
13 июн 17, 12:35    [20560055]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iap
TaPaK
Cammomile,

тупая трата времени, возможна как разовая акция распарсить существующих, но в жизни всегда будут проблемы
Просто сделать интерфейс для ручного заполнения полей Фамилия, Имя, Отчество по зиполненному полю ФИО.
Посадить за это дело оператора, чтобы всё имеющееся причесал.
А новые данные должны уже завтра вводить раздельно.

ну я так сразу и сказал, лёгкий случай заставить писать через разделитель, нормальный заполнять в 3х полях тем боле crm же
13 июн 17, 12:36    [20560058]     Ответить | Цитировать Сообщить модератору
 Re: Интеллектуально парсим имя.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7752
В таких ситуациях парсят все, что можно автоматически, а остальным ставят признак "неклассифицоровано" и навязчиво требуют ручного разбора на интерфейсе.
13 июн 17, 16:39    [20561183]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить