Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
 
pivogol
20 / 20 / 8
Регистрация: 07.01.2009
Сообщений: 545
1

Категоризированная база знаний - аналог Wiki

09.07.2018, 10:58. Просмотров 344. Ответов 21
Метки нет (Все метки)

Если делать категоризированную базу знаний - аналог Wiki, возникает проблема:
- Если сохранять форматированный текст в базе, то теряется форматирование.
- Если сохранять текст записей в отдельных файлах, то по ним будет медленный поиск, т.к. для поиска придётся последовательно перебирать все файлы и строки.
Как же тогда лучше сделать базу знаний?
Какие-то из двух указанных проблем можно обойти легко?

Добавлено через 17 минут
Пока есть идея сохранять текстовые символы форматирования как у wiki в базе...

Добавлено через 8 минут
Но если бы в базе можно было сохранить всё форматирование, это было бы лучше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2018, 10:58
Ответы с готовыми решениями:

База Знаний!
Дамы и Господа, кому не безразлично развития форума и кто желает помоч, не...

База знаний по С++
Недавно начал изучать С++ раньше кодил тока на Делфи Подскажите с чего начать...

База знаний
Определить наличие вирусов в компьютере по характерным их проявлениям, если...

База знаний
Создаю базу знаний. Хотелось бы пообщаться с людьми, которые ведут разработки в...

База знаний на Java
Если кто знает knowledge base на Java (типа JSPTwiki, но более развитую, с...

21
qwertehok
2300 / 2204 / 602
Регистрация: 29.08.2013
Сообщений: 14,727
09.07.2018, 20:35 2
Цитата Сообщение от pivogol Посмотреть сообщение
Если сохранять форматированный текст в базе, то теряется форматирование.
почему?

Цитата Сообщение от pivogol Посмотреть сообщение
Если сохранять текст записей в отдельных файлах, то по ним будет медленный поиск, т.к. для поиска придётся последовательно перебирать все файлы и строки.
что значит "медленный"? каковы размеры файлов и сколько мс у вас "медленно"?

Цитата Сообщение от pivogol Посмотреть сообщение
Как же тогда лучше сделать базу знаний?
Какие-то из двух указанных проблем можно обойти легко?
а при чем тут делфи?

вы не написали ни какая у вас СУБД, ни размер текстов

ЗЫ возьмите живую бесплатную вики и смотрите как она устроена
1
pivogol
20 / 20 / 8
Регистрация: 07.01.2009
Сообщений: 545
10.07.2018, 08:28  [ТС] 3
Цитата Сообщение от qwertehok Посмотреть сообщение
почему?
Я пробовал сохранять текст из RichEdit в базе mdb в поле МЕМО, сохраняется только сам текст, но не свойства всех символов...
Цитата Сообщение от qwertehok Посмотреть сообщение
что значит "медленный"? каковы размеры файлов и сколько мс у вас "медленно"?
Сам принцип: в базе делается мгновенная выборка, а в файлах, чтобы что-то найти, нужно их все перебрать по очереди и построчно. Если делать это в папке из нескольких тысяч записей - файлов, то думаю, будет медленнее происходить поиск, чем в обычной базе.
Цитата Сообщение от qwertehok Посмотреть сообщение
а при чем тут делфи?
...
ЗЫ возьмите живую бесплатную вики и смотрите как она устроена
Да, wiki - идеальный вариант, но для локального использования пользователи - не так удобна, как могла бы быть удобна локальная программа.
Ду, буду брать с неё пример.
Кстати форматирование там сохраняется с помощью специальных текстовых символов в базе, потом отдельно программируется отображение форматированного текста в зависимости от имеющихся символов форматирования.
Цитата Сообщение от qwertehok Посмотреть сообщение
вы не написали ни какая у вас СУБД, ни размер текстов
Попробую реализовать пока на mdb...
Как думаете, какая структура базы знаний более правильная?:
1) Дерево категорий, в каждой категории могут быть записи, в каждой записи текст.
2) Дерево страниц, они же являются и категориями, каждая страница содержит текст и другие такие же страницы.
0
krapotkin
3418 / 3025 / 1047
Регистрация: 14.04.2014
Сообщений: 14,677
Записей в блоге: 15
10.07.2018, 08:44 4
Цитата Сообщение от pivogol Посмотреть сообщение
форматирование там сохраняется с помощью
оно вообще везде так сохраняется HTML, TeX, RTF, DOC, BB-коды всякие
других способов не придумали или они невыгодны
1
qwertehok
2300 / 2204 / 602
Регистрация: 29.08.2013
Сообщений: 14,727
10.07.2018, 20:29 5
Цитата Сообщение от pivogol Посмотреть сообщение
Я пробовал сохранять текст из RichEdit в базе mdb в поле МЕМО, сохраняется только сам текст, но не свойства всех символов...
как пробовали?

Цитата Сообщение от pivogol Посмотреть сообщение
в базе делается мгновенная выборка
в базе никогда не делается "мгновенная" выборка
Цитата Сообщение от pivogol Посмотреть сообщение
в файлах, чтобы что-то найти, нужно их все перебрать по очереди и построчно
а попробуйте программку называется everything (http://www.voidtools.com/)
Цитата Сообщение от pivogol Посмотреть сообщение
Если делать это в папке из нескольких тысяч записей
ключевые слова и индекс поможет

Цитата Сообщение от pivogol Посмотреть сообщение
но для локального использования пользователи - не так удобна, как могла бы быть удобна локальная программа.
по каким признакам?

Цитата Сообщение от pivogol Посмотреть сообщение
Попробую реализовать пока на mdb...


Цитата Сообщение от pivogol Посмотреть сообщение
Как думаете, какая структура базы знаний более правильная?:
1) Дерево категорий, в каждой категории могут быть записи, в каждой записи текст.
2) Дерево страниц, они же являются и категориями, каждая страница содержит текст и другие такие же страницы.
не зная что вы подразумеваете под базой знаний ответить невозможно

вы вообще не понимаете что хотите от готового продукта,
у вас не списка требований,
у вас не проработан функционал
и слабо с реализацией
0
pivogol
20 / 20 / 8
Регистрация: 07.01.2009
Сообщений: 545
10.07.2018, 22:37  [ТС] 6
Цитата Сообщение от qwertehok Посмотреть сообщение
не зная что вы подразумеваете под базой знаний ответить невозможно
Вот приблизительный пример:
Категоризированная база знаний - аналог Wiki

Цитата Сообщение от qwertehok Посмотреть сообщение
по каким признакам?
- ради нескольких сотен записей ставить локальный хостинг на 2 гига и движок на десятки тысяч файлов как-то не нормально;
- не каждый сможет (захочет) для базы знаний ставить и изучать локальный хостинг, учиться настраивать MediaWiki;
- работает не очень быстро, каждое действие приходится ждать по пол секунды и более.
Цитата Сообщение от qwertehok Посмотреть сообщение
ключевые слова и индекс поможет
Да, но в MediaWiki работает глобальный поиск по всем текстам и без ключевых слов. И локально это тоже элементарно делается в базе.
Цитата Сообщение от qwertehok Посмотреть сообщение
а попробуйте программку называется everything (http://www.voidtools.com/)
Посмотрел описание и скрин, прикольная. Ещё есть методы поиска не по названиям файлов, а по тексту в них, тоже пробовал разные.
Цитата Сообщение от qwertehok Посмотреть сообщение
в базе никогда не делается "мгновенная" выборка
Понял. В любом случае, select * from were по моим наблюдениям и предположениям должно срабатывать быстрее, чем перебор всех строк в файлах. Но на одинаковом количестве записей не сравнивал, так что утверждать не буду.
Цитата Сообщение от qwertehok Посмотреть сообщение
как пробовали?
Delphi
1
2
3
    qry1.SQL.text:='INSERT INTO zap_bz (zap,kat) VALUES (:pr2,:pr0)'; // добавляем запись
    qry1.Parameters.ParamByName('pr0').Value:=kod_k;
    qry1.Parameters.ParamByName('pr2').Value:=RxRichEdit1.Text;
Тему SaveToStream пока не раскуривал, не знаю ещё, пойду ли таким путём.
Возможно реализую вики-форматирование и его символы буду сохранять.
Цитата Сообщение от qwertehok Посмотреть сообщение
вы вообще не понимаете что хотите от готового продукта,
Есть общее представление, по многим вопросам определился, а там где сомневался - переспросил.
Цитата Сообщение от qwertehok Посмотреть сообщение
у вас не проработан функционал
Цитата Сообщение от qwertehok Посмотреть сообщение
у вас не списка требований,
и слабо с реализацией
Да, я делаю не быстро, пока сделал так (что-то осталось от предыдущих проектов):
Категоризированная база знаний - аналог Wiki

Требования есть кое-какие: импорт, экспорт, древовидная структура, поиск по тексту записей, тип базы, форматирование хоть минимальное, какие-то требования будут меняться постепенно.
0
qwertehok
2300 / 2204 / 602
Регистрация: 29.08.2013
Сообщений: 14,727
11.07.2018, 20:25 7
Цитата Сообщение от pivogol Посмотреть сообщение
Вот приблизительный пример:
это обычный TreeView
к его узлам можно прицепить все что угодно - от текстовых файлов, до видеороликов

Цитата Сообщение от pivogol Посмотреть сообщение
Требования есть кое-какие
как будете хранить данные? обычный текст с тегами как html?
только стандартные теги? или еще свои собственные?

Цитата Сообщение от pivogol Посмотреть сообщение
древовидная структура
структура чего? хранить то вы будете в таблицах

Цитата Сообщение от pivogol Посмотреть сообщение
тип базы
это что значит?

Цитата Сообщение от pivogol Посмотреть сообщение
какие-то требования будут меняться постепенно.
это значит нужно начинать не с картинки, а с продумывания объектов
0
pivogol
20 / 20 / 8
Регистрация: 07.01.2009
Сообщений: 545
17.07.2018, 10:46  [ТС] 8
В принципе, все вопросы уже отпали, я определился что каким способом сделать и сделал на прошлой неделе.
Отвечу на встречные вопросы.
Цитата Сообщение от qwertehok Посмотреть сообщение
это обычный TreeView
к его узлам можно прицепить все что угодно - от текстовых файлов, до видеороликов
Использовать этот компонент с базами очень проблематично.
Цитата Сообщение от qwertehok Посмотреть сообщение
как будете хранить данные? обычный текст с тегами как html?
только стандартные теги? или еще свои собственные?
Всё-таки решил сохранять весь текст со всем форматированием как rtf в базе.
Цитата Сообщение от qwertehok Посмотреть сообщение
тип базы
это что значит?
Я выбрал Access, mdb, ado.
Цитата Сообщение от qwertehok Посмотреть сообщение
это значит нужно начинать не с картинки, а с продумывания объектов
Да, подумал, что нужно, посомневался как это лучше сделать и потом принял одно из имеющихся решений.
Цитата Сообщение от qwertehok Посмотреть сообщение
древовидная структура
структура чего? хранить то вы будете в таблицах
Ну как бы структура категорий или структура страниц, как они связаны между собой, где дочерняя, где родительская.
Решил пойти по пути наименьшего сопротивления: названия страниц связаны между собой в древовидной структуре.
Был ещё второй вариант: древовидные категории, а в каждой из них может быть включено несколько страниц. Этот вариант отпал.
Вот как сделал:
Категоризированная база знаний - аналог Wiki

Всем спасибо за советы!
0
ZfoxAK
505 / 489 / 222
Регистрация: 26.11.2012
Сообщений: 1,929
17.07.2018, 11:27 9
Цитата Сообщение от pivogol Посмотреть сообщение
Я выбрал Access, mdb, ado.
Зря.
1. чем больше объем базы - тем больше торомозов.
2. ориентирована на одно подключение (один пользователь).
Лучше или MySQL, или FireBird. Эти СУБД бесплатные, позволяют многое и просты в освоении.
1
northener
пофигист широкого профиля
3423 / 2323 / 630
Регистрация: 15.07.2013
Сообщений: 13,747
18.07.2018, 02:03 10
Цитата Сообщение от pivogol Посмотреть сообщение
Отвечу на встречные вопросы.
Цитата Сообщение от qwertehok Посмотреть сообщение
это обычный TreeView
к его узлам можно прицепить все что угодно - от текстовых файлов, до видеороликов
Использовать этот компонент с базами очень проблематично.
Никаких проблем не вижу.
Цитата Сообщение от pivogol Посмотреть сообщение
Всё-таки решил сохранять весь текст со всем форматированием как rtf в базе.
Разумеется. А иначе никак.
Цитата Сообщение от pivogol Посмотреть сообщение
Я выбрал Access, mdb, ado.
Если это учебная задача/проект, то сойдёт.
1
pivogol
20 / 20 / 8
Регистрация: 07.01.2009
Сообщений: 545
18.07.2018, 13:06  [ТС] 11
Цитата Сообщение от northener Посмотреть сообщение
Никаких проблем не вижу.
Проблема в том, что и при удалении узла в TreeView все последующие узлы ниже перенумеровываются, а в базе при удалении записи все последующие записи не перенумеровываются.
Поэтому, при каждом удалении узла в TreeView приходится заново устанавливать соответствие все узлов, ниже удалённого записям в базе.
А это не нормально, особенно, если узлов тысячи.
Ну и соответственно, при добавлении новых узлов в середине дерева узлов.

Добавлено через 51 минуту
Цитата Сообщение от northener Посмотреть сообщение
Всё-таки решил сохранять весь текст со всем форматированием как rtf в базе.
Разумеется. А иначе никак.
Я тоже так считал. Но сегодня засомневался.
Сохранил в одной записи изображение (скриншот) и размер базы сразу увеличился с 2 мегабайт до 20 мегабайт.
Мне это очень не понравилось. А если изображений будет сотни, тысячи...
Я бы не хотел, чтобы размер базы стал слишком большим и перевалил за гигабайты.
Вот теперь подумываю теперь хранить форматированный текст в файлах по папкам.
При этом неформатированный текст останется в базе, для выполнения всяких sql-запросов в тексте.
0
qwertehok
2300 / 2204 / 602
Регистрация: 29.08.2013
Сообщений: 14,727
18.07.2018, 21:55 12
Цитата Сообщение от pivogol Посмотреть сообщение
Использовать этот компонент с базами очень проблематично.
извините, но у всех все работает и только у вас "проблематично"

Цитата Сообщение от pivogol Посмотреть сообщение
Проблема в том, что и при удалении узла в TreeView все последующие узлы ниже перенумеровываются
никто ничего не перенумеровывает
Цитата Сообщение от pivogol Посмотреть сообщение
Поэтому, при каждом удалении узла в TreeView приходится заново устанавливать соответствие все узлов, ниже удалённого записям в базе.
не нужно устанавливать никаких соответствий

у вас есть таблица - узел (GUID) \ родитель (GUID)\ текст
строите по этой таблице дерево - в свойство Data каждого узла пихаете GUID узла
при удалении элемента вы достаете его GUID и удаляете в базе, при этом проверяя, не является ли он родителем и если да, то удаляете его подчиненные записи
ВСЕ

Цитата Сообщение от pivogol Посмотреть сообщение
Я бы не хотел, чтобы размер базы стал слишком большим и перевалил за гигабайты.
не надо хранить картинки и видео
а если хранить, то только preview
и база должна быть не MDB, а нормальная
0
pivogol
20 / 20 / 8
Регистрация: 07.01.2009
Сообщений: 545
18.07.2018, 23:00  [ТС] 13
Цитата Сообщение от qwertehok Посмотреть сообщение
извините, но у всех все работает и только у вас "проблематично"
Обычно пользуются специальными компонентами, для работы дерева с базой, а не чистым TreeView, например VirtualTreeView, EhLib и пр.
Цитата Сообщение от qwertehok Посмотреть сообщение
никто ничего не перенумеровывает
Название: узлы.jpg
Просмотров: 30

Размер: 7.2 Кб
Если удалить a11, то изменятся индексы и у a12, и у b1 и у c1.
У них меняется и AbsoluteIndex и Selected.Index, и при доступе по tv1.Items[2].Text будут доступны уже другие узлы.
Вот из-за этого сдвига, приходится перестраивать соответствие с базой.
Но проще использовать специальные методы, предназначенные для строительства дерева из базы.
Цитата Сообщение от qwertehok Посмотреть сообщение
и база должна быть не MDB, а нормальная
Пока все мои программы на mdb отлично работают.
Считаю ненормальной ситуацию, когда для запуска программы у пользователя нужно делать инсталлятор, который впихнёт ему firebird.
Но когда придётся пойти на это.
0
qwertehok
2300 / 2204 / 602
Регистрация: 29.08.2013
Сообщений: 14,727
19.07.2018, 06:14 14
Цитата Сообщение от pivogol Посмотреть сообщение
Обычно пользуются специальными компонентами
ими пользуются когда функционала не хватает, но не вам об этом писать)

Цитата Сообщение от pivogol Посмотреть сообщение
Если удалить a11, то изменятся индексы и у a12, и у b1 и у c1.
У них меняется и AbsoluteIndex и Selected.Index, и при доступе по tv1.Items[2].Text будут доступны уже другие узлы.
Вот из-за этого сдвига, приходится перестраивать соответствие с базой.
а зачем вы ориентируетесь на эти индексы?
я вам написал что вы должны хранить ссылку на записать в свойстве Data - тогда не надо ничего перестраивать
(это вообще дикая идея при удалении элемента что то перестраивать на всей базе)

Цитата Сообщение от pivogol Посмотреть сообщение
Считаю ненормальной ситуацию, когда для запуска программы у пользователя
а для mdb не нужен офис?
вам рано или поздно понадобятся SQL запросы для работы с БД, а аксесс это не очень хорошо умеет.
ИМХО даже SQlite это делеат лучше
0
D1973
Модератор
3477 / 2498 / 1229
Регистрация: 21.01.2014
Сообщений: 10,418
Записей в блоге: 3
Завершенные тесты: 1
19.07.2018, 07:55 15
Цитата Сообщение от pivogol Посмотреть сообщение
который впихнёт ему firebird.
Не надо ничего "впихивать", просто носить вместе с ехе-шником и файлом БД еще 2-3 библиотеки - и все... Вот, к примеру, в моей организации не используют MS Office - и что, Ваша программа для нас недоступна? Беда-печаль, которой легко избежать, перейдя на нормальную СУБД вместо Access
0
pivogol
20 / 20 / 8
Регистрация: 07.01.2009
Сообщений: 545
19.07.2018, 08:25  [ТС] 16
Цитата Сообщение от D1973 Посмотреть сообщение
в моей организации не используют MS Office - и что, Ваша программа для нас недоступна? Беда-печаль, которой легко избежать, перейдя на нормальную СУБД вместо Access
Вроде проверял, если Office не устанавливать, то мои программы с mdb нормально работали.
И не тормозит ни капли, всё нормально работает, не вижу пока смысла переходить на что-то другое.
0
D1973
Модератор
3477 / 2498 / 1229
Регистрация: 21.01.2014
Сообщений: 10,418
Записей в блоге: 3
Завершенные тесты: 1
19.07.2018, 08:39 17
Цитата Сообщение от pivogol Посмотреть сообщение
то мои программы с mdb нормально работали
Далеко не факт, что на машинах, на который офис не устанавливали никогда, в ODBC-драйверах будет находится драйвер провайдера MS Jet 4.0, без которого Ваша программа просто не взлетит...

Добавлено через 1 минуту
Но дело-то хозяйское... Никто Вас уговаривать не собирается... Хотите Access - работайте с Access...
0
qwertehok
2300 / 2204 / 602
Регистрация: 29.08.2013
Сообщений: 14,727
19.07.2018, 12:02 18
Цитата Сообщение от pivogol Посмотреть сообщение
Вроде проверял, если Office не устанавливать, то мои программы с mdb нормально работали.
не будут

Цитата Сообщение от pivogol Посмотреть сообщение
И не тормозит ни капли, всё нормально работает
что все? работает как хранилище? и все

вы лучше напишите что вы придумали за структуру БД
как читаете и как пишите в БД
0
pivogol
20 / 20 / 8
Регистрация: 07.01.2009
Сообщений: 545
19.07.2018, 17:57  [ТС] 19
Цитата Сообщение от qwertehok Посмотреть сообщение
Вроде проверял, если Office не устанавливать, то мои программы с mdb нормально работали.
не будут
Поверил ещё раз, снёс Microsoft Office, программа с mdb работает, внёс данные, вот скрин.
Категоризированная база знаний - аналог Wiki

Цитата Сообщение от qwertehok Посмотреть сообщение
И не тормозит ни капли, всё нормально работает
что все? работает как хранилище? и все
На работе два человека вносят записи в программе по учёту предприятий (застрахованных лиц Фонда), ажиотаж прошёл, сейчас вносится не более чем 10 записей в день, несколько человек работает с программой на просмотр.
Дома программы по учёту расходов, учёту запланированных дел, по ведению дневников, база знаний.
Пока тоже всё без тормозов, в учёте расходов выводится в таблице сразу 3500 записей. Придут тормоза - сделаю кэширвание или перейду на другие базы.
Цитата Сообщение от qwertehok Посмотреть сообщение
вы лучше напишите что вы придумали за структуру БД
как читаете и как пишите в БД
По базе знаний:
структура проста: таблица узлов и таблица записей, в узлах у каждого указано название, указан номер родительского узла и путь к узлу, в таблице записей текст записей и номер узла, к которой относится запись.
Узлы в дереве - названия статей, которые могут иметь дочерние статьи.
Всё читаю и вношу sql-запросами.
Для связи базы с деревом использую связку от EhLib, но есть один недостаток в ней...
После каждого обновления таблицы узлов все узлы становятся раскрытыми.
Приходится после каждого обновления таблицы узлов циклом закрывать не нужные узлы.
Может быть позже перейду на другой вид связи базы с деревом узлов, может быть VirtualTreeView когда-нибудь попробую.
0
D1973
Модератор
3477 / 2498 / 1229
Регистрация: 21.01.2014
Сообщений: 10,418
Записей в блоге: 3
Завершенные тесты: 1
19.07.2018, 18:30 20
Цитата Сообщение от pivogol Посмотреть сообщение
Поверил ещё раз, снёс Microsoft Office,
Цитата Сообщение от D1973 Посмотреть сообщение
на который офис не устанавливали никогда
А так работает? Ой, вряд ли...
0
19.07.2018, 18:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2018, 18:30

База знаний на Prolog
Помогите пожалуйста! Есть задание: Для предметной области Медицина,...

Нужна програмка база знаний
Я работаю сервисным инженером на крупном предприятии. Наше бюро участвует в...

База знаний болезней Prolog
Помогите пожалуйста! Честно нашел программу в интернете. В ней есть какая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru