powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Убрать длинные поля из таблицы, реорганизация
4 сообщений из 4, страница 1 из 1
Убрать длинные поля из таблицы, реорганизация
    #35290664
DarkLordZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, уважаемые коллеги!
Сразу приношу извинения за название топика, но по другому в голову не лезло :)

Суть задачи такова:

Существует некая таблица-справочник улиц.

Структура:
Код: plaintext
1.
2.
3.
4.
5.
6.
 1 . Key
 2 . RusName (Char( 30 ), обязательное) (название улицы рус.)
 3 . RusOldName (Char( 30 ), необязательное) (старое название улицы рус.)
 4 . UkrName (Char( 30 ), обязательное) (название улицы укр.)
 5 . UkrOldName (Char( 30 ), необязательное) (старое название улицы укр.)
 6 . TrashNames (Char( 255 ), необязательное) (разнообразные варианты написания)
Последнее поле - всякие, разные варианты, которые могут встретится, при написании данной улицы.
Поля 3 и 5 в 90% случаев пустые.
Поле 6 в 50% случаев пустое.

Примеры:
Код: plaintext
1.
2.
 1 , Ивана Иванова, Сидора Сидорова, Iвана Iванова, Сiдора Сiдорова, И. Иванова; С. Сидорова
 2 , Генерала Ватутина,,Генерала Ватутiна,,Ватутина; Г. Ватутина; Ген. Ватутина

На вход подается неструктурированный текст.
Примеры текста:
Код: plaintext
1.
2.
3.
4.
5.
6.
Осиповского ул.  9 , Подольский р-н, одноэтажная пристройка к новому  16  этажному дому, 
нежилой фонд...

Нежилое помещение, Дарницкий р-н, Ялтинская ул.  8 , площадь  41 . 7 ...

Действующее мясоперерабатывающее производство, здание  500  кв.м,  25 -летняя аренда...

Задача: найти в тексте улицу, если она там вообще существует, и отобразить её в другой таблице. Причём отобразить её в "правильном" виде, для которого используется поле "RusName"

На данном этапе программа работает по такому алгоритму:

1. Читается запись из таблицы-справочника (улицы).
2. Поля заносятся в стринглист.
3. Последнее поле разбирается по разделителям и тоже заносится в этот же лист.
4. В цикле выбираем значения из стринглиста и ищем совпадение в тексте.
5. Если не нашли, то п.1

Всё это дело работает, но нутром чую, что сделано коряво. Следуя народной мудрости "работает - не трожь!", так бы и оставил, но необходимо добавить еще пару табличек с похожей структурой.
Посему, решил обратится за советом: подскажите правильную организацию данной таблички, с учетом потребностей, и что можно изменить в алгоритме поиска-отбора?
...
Рейтинг: 0 / 0
Убрать длинные поля из таблицы, реорганизация
    #35291497
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkLordZДобрый день, уважаемые коллеги!
Сразу приношу извинения за название топика, но по другому в голову не лезло :)

Суть задачи такова:

Существует некая таблица-справочник улиц.

Структура:
Код: plaintext
1.
2.
3.
4.
5.
6.
 1 . Key
 2 . RusName (Char( 30 ), обязательное) (название улицы рус.)
 3 . RusOldName (Char( 30 ), необязательное) (старое название улицы рус.)
 4 . UkrName (Char( 30 ), обязательное) (название улицы укр.)
 5 . UkrOldName (Char( 30 ), необязательное) (старое название улицы укр.)
 6 . TrashNames (Char( 255 ), необязательное) (разнообразные варианты написания)
Последнее поле - всякие, разные варианты, которые могут встретится, при написании данной улицы.
Поля 3 и 5 в 90% случаев пустые.
Поле 6 в 50% случаев пустое.

Примеры:
Код: plaintext
1.
2.
 1 , Ивана Иванова, Сидора Сидорова, Iвана Iванова, Сiдора Сiдорова, И. Иванова; С. Сидорова
 2 , Генерала Ватутина,,Генерала Ватутiна,,Ватутина; Г. Ватутина; Ген. Ватутина

На вход подается неструктурированный текст.
Примеры текста:
Код: plaintext
1.
2.
3.
4.
5.
6.
Осиповского ул.  9 , Подольский р-н, одноэтажная пристройка к новому  16  этажному дому, 
нежилой фонд...

Нежилое помещение, Дарницкий р-н, Ялтинская ул.  8 , площадь  41 . 7 ...

Действующее мясоперерабатывающее производство, здание  500  кв.м,  25 -летняя аренда...

Задача: найти в тексте улицу, если она там вообще существует, и отобразить её в другой таблице. Причём отобразить её в "правильном" виде, для которого используется поле "RusName"

На данном этапе программа работает по такому алгоритму:

1. Читается запись из таблицы-справочника (улицы).
2. Поля заносятся в стринглист.
3. Последнее поле разбирается по разделителям и тоже заносится в этот же лист.
4. В цикле выбираем значения из стринглиста и ищем совпадение в тексте.
5. Если не нашли, то п.1

Всё это дело работает, но нутром чую, что сделано коряво. Следуя народной мудрости "работает - не трожь!", так бы и оставил, но необходимо добавить еще пару табличек с похожей структурой.
Посему, решил обратится за советом: подскажите правильную организацию данной таблички, с учетом потребностей, и что можно изменить в алгоритме поиска-отбора?

Сделать "как в Яндекс"? То есть, через такую структуру:

1. Тип названия
2. Слово из названия
3. Ссылка на "правильную" улицу

Для поиска нужно будет разбить строку на отдельные слова и "собрать" наборы записей из приведенной таблицы. Тот набор, который соберет все слова одного типа и одной улицы - и есть правильный. Пример такого поиска тут обуждался в свое время, но вот ключевых слов для поиска я не подскажу.
Делал такую реализацию, работает быстро, почти "в тени".
...
Рейтинг: 0 / 0
Убрать длинные поля из таблицы, реорганизация
    #35375106
DarkLordZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай1Сделать "как в Яндекс"? То есть, через такую структуру:

1. Тип названия
2. Слово из названия
3. Ссылка на "правильную" улицу

Для поиска нужно будет разбить строку на отдельные слова и "собрать" наборы записей из приведенной таблицы. Тот набор, который соберет все слова одного типа и одной улицы - и есть правильный. Пример такого поиска тут обуждался в свое время, но вот ключевых слов для поиска я не подскажу.
Делал такую реализацию, работает быстро, почти "в тени".
Прошу прощения за долгое отсутствие.
Спасибо за предложенный алгоритм.
Хотелось бы уточнить пару возникших вопросов.

1. Что есть "тип названия"?

2. Допустим есть три улицы: Ивана Иванова, Ивана Петрова, Ивана Сидорова.
Одна запись таблицы содержит "слово из названия" - в нашем случае "Ивана".
Ссылка на какую из трёх приведённых улиц будет "правильной" в этом случае?
Вернее, на какую улицу вообще ссылаться?
...
Рейтинг: 0 / 0
Убрать длинные поля из таблицы, реорганизация
    #35401039
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkLordZ Николай1Сделать "как в Яндекс"? То есть, через такую структуру:

1. Тип названия
2. Слово из названия
3. Ссылка на "правильную" улицу

Для поиска нужно будет разбить строку на отдельные слова и "собрать" наборы записей из приведенной таблицы. Тот набор, который соберет все слова одного типа и одной улицы - и есть правильный. Пример такого поиска тут обуждался в свое время, но вот ключевых слов для поиска я не подскажу.
Делал такую реализацию, работает быстро, почти "в тени".
Прошу прощения за долгое отсутствие.
Спасибо за предложенный алгоритм.
Хотелось бы уточнить пару возникших вопросов.

1. Что есть "тип названия"?

2. Допустим есть три улицы: Ивана Иванова, Ивана Петрова, Ивана Сидорова.
Одна запись таблицы содержит "слово из названия" - в нашем случае "Ивана".
Ссылка на какую из трёх приведённых улиц будет "правильной" в этом случае?
Вернее, на какую улицу вообще ссылаться?

Что-то я уже и не помню, что я имел в виду под "тип названия". Вероятнее всего -"RusName", "RusOldName" или остальные из списка.

Если есть три улицы из двух слов каждая, то в таблице будет шесть записей. По одному слову подойдет три улицы, а по двум словам - одна улица. Я использовал "процент слов" и "процент длины". Можно использовать их как по "и", так и по "или". Надо смотреть на практику использования.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Убрать длинные поля из таблицы, реорганизация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]