Limych / GeniBase

2 stars 2 forks source link

Инструмент поиска неохваченных сокращений имён #52

Open Limych opened 9 years ago

Limych commented 9 years ago

Сделать инструмент, который будет показывать, какие ещё сокращения имён в базе не охвачены системой автоматического расширения имён.

a-KaDeMi-k commented 9 years ago

Ну, тут не об инструменте надо говорить, а о sql-запросе Что предполагаешь с полученными сокращениями делать? Потому как вытащить их - не проблема.

a-KaDeMi-k commented 9 years ago

Полез посмотреть, что в именах творится. Лучше бы этого не делал :) Уже несколько десятков записей поправил.

Полно латиницы, старославянских, другоро мусора (двойные дефисы, задвоения букв, запятые...). Вообщем, чистить и чистить

a-KaDeMi-k commented 9 years ago

Закачал имена из persons в таблицу tmp (слова до первого пробела из name). Там же кол-во записей, в которых они встречаются. Подтянул данные из dic_name (по key или по вхождению в expand) Вообщем, можно поиграться, поанализировать...

Наблюдение 1: всё сцепилось со справочником по единичной записи, кроме всего четырёх имен: Дав, Леон, Леонтий, Фед (см. столбец dic_cnt)

a-KaDeMi-k commented 9 years ago

Наблюдение 2: в dic_names, похоже, ошибка - пустой key для expand=НИКЛ

a-KaDeMi-k commented 9 years ago

Оставлю, чтоб не пропал, запрос для апдейта таблицы tmp, если будет правиться dic_names

update tmp t
set
dic_key = (select min(`d`.`key`) from dic_names d  where ((ucase(replace(t.name,'.',''))=`d`.`key`) or (instr(concat(' ',d.expand,' '),concat(' ',ucase(replace(t.name,'.','')),' '))>0)) and d.is_patronimic = 0)
,dic_expand = (select min(`d`.`expand`) from dic_names d  where ((ucase(replace(t.name,'.',''))=`d`.`key`) or (instr(concat(' ',d.expand,' '),concat(' ',ucase(replace(t.name,'.','')),' '))>0)) and d.is_patronimic = 0)
,dic_cnt = (select count(*) from dic_names d  where ((ucase(replace(t.name,'.',''))=`d`.`key`) or (instr(concat(' ',d.expand,' '),concat(' ',ucase(replace(t.name,'.','')),' '))>0)) and d.is_patronimic = 0)
where dic_key = ''
a-KaDeMi-k commented 9 years ago

Наблюдение 3: из 540 наиболее часто встречающихся вариантов написаний имён (сортировка по cnt; cnt >=100) справочником охвачено 274, т.е. чуть больше 50%

Limych commented 9 years ago

Всё же мне нужен инструмент. И чтобы он давал списки по именам и отчествам по-отдельности.

a-KaDeMi-k commented 9 years ago

По-хорошему, нам нужен инструмент (инструменты), для ведения всех (т.е. каждого) справочников. Потому как они у нас в большинстве своём стали уже не простыми таблицами, и подразумевают некоторую технологию и своего ведения и своего использования.

И "мусор" такими инструментами чистить, и целостность контролировать и т.д. и т.п.

Но, мне кажется, это достаточно сложно. И необходимо будет реализовывать только в рамках системы on-line ввода, про который мы говорили (двойной ввод, админский контроль и т.д.)

a-KaDeMi-k commented 9 years ago

Я пока сообщение в эту ветку сделаю, чтобы не плодить лишнего. Посчитаешь разумным - тогда выдели в отдельную.

Если решим делать двухуровневую нормализацию по вероисповеданиям (см. #54), то у нас только имена останутся неохваченными этой технологией.

Поэтому, наряду с #54, предлагаю и по ним сделать связку многие-ко-многим. Т.о., мы получим, например, зависимость не только АЛЕКСЕЙ -> АЛ-ЕЙ АЛ-СЕЙ АЛЕКС АЛЕК, но и выход на АЛЕКСЕЙ при вводе в префильтр любого имени из АЛ-ЕЙ АЛ-СЕЙ АЛЕКС АЛЕК