Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
1

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

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

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

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

Добавлено через 8 минут
Но если бы в базе можно было сохранить всё форматирование, это было бы лучше.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2018, 10:58
Ответы с готовыми решениями:

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

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

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

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

21
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,129
Записей в блоге: 3
09.07.2018, 20:35 2
Цитата Сообщение от pivogol Посмотреть сообщение
Если сохранять форматированный текст в базе, то теряется форматирование.
почему?

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

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

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

ЗЫ возьмите живую бесплатную вики и смотрите как она устроена
1
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
10.07.2018, 08:28  [ТС] 3
Цитата Сообщение от qwertehok Посмотреть сообщение
почему?
Я пробовал сохранять текст из RichEdit в базе mdb в поле МЕМО, сохраняется только сам текст, но не свойства всех символов...
Цитата Сообщение от qwertehok Посмотреть сообщение
что значит "медленный"? каковы размеры файлов и сколько мс у вас "медленно"?
Сам принцип: в базе делается мгновенная выборка, а в файлах, чтобы что-то найти, нужно их все перебрать по очереди и построчно. Если делать это в папке из нескольких тысяч записей - файлов, то думаю, будет медленнее происходить поиск, чем в обычной базе.
Цитата Сообщение от qwertehok Посмотреть сообщение
а при чем тут делфи?
...
ЗЫ возьмите живую бесплатную вики и смотрите как она устроена
Да, wiki - идеальный вариант, но для локального использования пользователи - не так удобна, как могла бы быть удобна локальная программа.
Ду, буду брать с неё пример.
Кстати форматирование там сохраняется с помощью специальных текстовых символов в базе, потом отдельно программируется отображение форматированного текста в зависимости от имеющихся символов форматирования.
Цитата Сообщение от qwertehok Посмотреть сообщение
вы не написали ни какая у вас СУБД, ни размер текстов
Попробую реализовать пока на mdb...
Как думаете, какая структура базы знаний более правильная?:
1) Дерево категорий, в каждой категории могут быть записи, в каждой записи текст.
2) Дерево страниц, они же являются и категориями, каждая страница содержит текст и другие такие же страницы.
0
5784 / 4526 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
10.07.2018, 08:44 4
Цитата Сообщение от pivogol Посмотреть сообщение
форматирование там сохраняется с помощью
оно вообще везде так сохраняется HTML, TeX, RTF, DOC, BB-коды всякие
других способов не придумали или они невыгодны
1
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,129
Записей в блоге: 3
10.07.2018, 20:29 5
Цитата Сообщение от pivogol Посмотреть сообщение
Я пробовал сохранять текст из RichEdit в базе mdb в поле МЕМО, сохраняется только сам текст, но не свойства всех символов...
как пробовали?

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

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

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


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

вы вообще не понимаете что хотите от готового продукта,
у вас не списка требований,
у вас не проработан функционал
и слабо с реализацией
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
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
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,129
Записей в блоге: 3
11.07.2018, 20:25 7
Цитата Сообщение от pivogol Посмотреть сообщение
Вот приблизительный пример:
это обычный TreeView
к его узлам можно прицепить все что угодно - от текстовых файлов, до видеороликов

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

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

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

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

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

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

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

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

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

Размер: 7.2 Кб
Если удалить a11, то изменятся индексы и у a12, и у b1 и у c1.
У них меняется и AbsoluteIndex и Selected.Index, и при доступе по tv1.Items[2].Text будут доступны уже другие узлы.
Вот из-за этого сдвига, приходится перестраивать соответствие с базой.
Но проще использовать специальные методы, предназначенные для строительства дерева из базы.
Цитата Сообщение от qwertehok Посмотреть сообщение
и база должна быть не MDB, а нормальная
Пока все мои программы на mdb отлично работают.
Считаю ненормальной ситуацию, когда для запуска программы у пользователя нужно делать инсталлятор, который впихнёт ему firebird.
Но когда придётся пойти на это.
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,129
Записей в блоге: 3
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
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,793
Записей в блоге: 3
19.07.2018, 07:55 15
Цитата Сообщение от pivogol Посмотреть сообщение
который впихнёт ему firebird.
Не надо ничего "впихивать", просто носить вместе с ехе-шником и файлом БД еще 2-3 библиотеки - и все... Вот, к примеру, в моей организации не используют MS Office - и что, Ваша программа для нас недоступна? Беда-печаль, которой легко избежать, перейдя на нормальную СУБД вместо Access
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
19.07.2018, 08:25  [ТС] 16
Цитата Сообщение от D1973 Посмотреть сообщение
в моей организации не используют MS Office - и что, Ваша программа для нас недоступна? Беда-печаль, которой легко избежать, перейдя на нормальную СУБД вместо Access
Вроде проверял, если Office не устанавливать, то мои программы с mdb нормально работали.
И не тормозит ни капли, всё нормально работает, не вижу пока смысла переходить на что-то другое.
0
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,793
Записей в блоге: 3
19.07.2018, 08:39 17
Цитата Сообщение от pivogol Посмотреть сообщение
то мои программы с mdb нормально работали
Далеко не факт, что на машинах, на который офис не устанавливали никогда, в ODBC-драйверах будет находится драйвер провайдера MS Jet 4.0, без которого Ваша программа просто не взлетит...

Добавлено через 1 минуту
Но дело-то хозяйское... Никто Вас уговаривать не собирается... Хотите Access - работайте с Access...
0
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,129
Записей в блоге: 3
19.07.2018, 12:02 18
Цитата Сообщение от pivogol Посмотреть сообщение
Вроде проверял, если Office не устанавливать, то мои программы с mdb нормально работали.
не будут

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

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

Цитата Сообщение от qwertehok Посмотреть сообщение
И не тормозит ни капли, всё нормально работает
что все? работает как хранилище? и все
На работе два человека вносят записи в программе по учёту предприятий (застрахованных лиц Фонда), ажиотаж прошёл, сейчас вносится не более чем 10 записей в день, несколько человек работает с программой на просмотр.
Дома программы по учёту расходов, учёту запланированных дел, по ведению дневников, база знаний.
Пока тоже всё без тормозов, в учёте расходов выводится в таблице сразу 3500 записей. Придут тормоза - сделаю кэширвание или перейду на другие базы.
Цитата Сообщение от qwertehok Посмотреть сообщение
вы лучше напишите что вы придумали за структуру БД
как читаете и как пишите в БД
По базе знаний:
структура проста: таблица узлов и таблица записей, в узлах у каждого указано название, указан номер родительского узла и путь к узлу, в таблице записей текст записей и номер узла, к которой относится запись.
Узлы в дереве - названия статей, которые могут иметь дочерние статьи.
Всё читаю и вношу sql-запросами.
Для связи базы с деревом использую связку от EhLib, но есть один недостаток в ней...
После каждого обновления таблицы узлов все узлы становятся раскрытыми.
Приходится после каждого обновления таблицы узлов циклом закрывать не нужные узлы.
Может быть позже перейду на другой вид связи базы с деревом узлов, может быть VirtualTreeView когда-нибудь попробую.
0
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,793
Записей в блоге: 3
19.07.2018, 18:30 20
Цитата Сообщение от pivogol Посмотреть сообщение
Поверил ещё раз, снёс Microsoft Office,
Цитата Сообщение от D1973 Посмотреть сообщение
на который офис не устанавливали никогда
А так работает? Ой, вряд ли...
0
19.07.2018, 18:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.07.2018, 18:30
Помогаю со студенческими работами здесь

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

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

База знаний «Золотой ключик»
База знаний «Золотой ключик»: взрослый(папа_карло,шарманщик). взрослый(джузеппе, столяр). ...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru