Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Une "base de connaissance" - pour jouer ou plus si affinité Dim 20 Mai 2018 - 19:10 | |
| J'ai développé un petit objet KnowledgaBase (base de connaissance), implémenté dans KGF.dll. Il permet de définir des "connaissances" du type "objet" - "propriété" - "attribut". Chacun des trois éléments est une chaîne de caractères quelconque. Exemple: "Le vin" - "contient" - "de l'alcool" On peut créer autant de connaissances qu'on veut. Un objet peut avoir plusieurs propriétés, et chaque propriété peut avoit plusieurs attributs. Pourquoi faire, demanderez-vous ? Eh bien, on peut interroger cette base sous toutes les coûtures. En donnant n'importe lequel de ces éléments, un couple de deux sur ces 3 éléments ou tous les trois, le programme vous répondra avec les connaissances qui correspondent au critère recherché. Et si l'on ne spécifie rien du tout, le programme fournit la liste complète de toutes les connaissances. Allez, on essaie... Téléchargez KGF.dll de mon WebDav, dossier Dlls, et copiez ce fichier dans un dossier quelconque, sous un nom quelconque avec l'extension *.knb: - Citation :
- #KowledgeBase
"le chat","mange","des souris" "le chat","mange","des croquettes" "le chat","mange","des oiseaux" "le chat","boit","du lait" "le chien","mange","des croquettes" "le chien","mange","des os" "le chien","boit","de l'eau" "papi","fume","le cigare" "ma fille","craint","les souris"
Puis, prenez ce source: - Code:
-
' test_KnowledgeBase.bas
label ajouter, lister, sauver, charger label changerobjet, changerpropriete, changerattribut label supprimerobjet, supprimerpropriete, supprimerattribut
dim NB%, res%, objet$, propriete$, attribut$, nouveau$, base$, ext$
width 0,1100 : height 0,600 alpha 1 : top 1,10 : left 1, 10 : caption 1,"Objet" alpha 2 : top 2,10 : left 2,190 : caption 2,"Propriété" alpha 3 : top 3,10 : left 3,370 : caption 3,"Attribut" alpha 4 : top 4,10 : left 4,610 : caption 4,"Nouveau" alpha 5 : top 5,10 : left 5,770 : caption 5,"Changer" alpha 6 : top 6,10 : left 6,860 : caption 6,"Supprimer" edit 11 : top 11,30 : left 11, 10 : width 11,150 edit 12 : top 12,30 : left 12,190 : width 12,150 edit 13 : top 13,30 : left 13,370 : width 13,150 edit 14 : top 14,30 : left 14,610 : width 14,150 button 21 : top 21,60 : left 21,10 : caption 21,"Ajouter" : on_click 21,ajouter
button 27 : top 27,60 : left 27,320 : caption 27,"Sauver" : on_click 27,sauver button 28 : top 28,60 : left 28,400 : caption 28,"Charger" : on_click 28,charger button 29 : top 29,60 : left 29,480 : caption 29,"Lister" : on_click 29,lister
button 31 : top 31,30 : left 31,770 : caption 31,"Objet" : on_click 31,changerobjet button 32 : top 32,55 : left 32,770 : caption 32,"Propriété" : on_click 32,changerpropriete button 33 : top 33,80 : left 33,770 : caption 33,"Attribut" : on_click 33,changerattribut
button 41 : top 41,30 : left 41,860 : caption 41,"Objet" : on_click 41,supprimerobjet button 42 : top 42,55 : left 42,860 : caption 42,"Propriété" : on_click 42,supprimerpropriete button 43 : top 43,80 : left 43,860 : caption 43,"Attribut" : on_click 43,supprimerattribut
memo 99 : top 99,100 : left 99,10 : width 99,550 : height 99,400 : bar_both 99 open_dialog 100 : filter 100,"Base de connaissance|*.knb" save_dialog 101 : filter 101,"Base de connaissance|*.knb"
dll_on "KGF.dll"
NB% = dll_call0("CreateKnowledgeBase") if NB%=0 text 99,"Erreur en création" else text 99,"Prêt" end_if end
ajouter: objet$ = text$(11) propriete$ = text$(12) attribut$ = text$(13) res% = dll_call4("CreateNewKnowledge",NB%,adr(objet$),adr(propriete$),adr(attribut$)) if res%=0 text 99,"Ok" else text 99,"Erreur" end_if text 11,"" text 12,"" text 13,"" return lister: objet$ = text$(11) propriete$ = text$(12) attribut$ = text$(13) res% = dll_call5("QueryKnowledgeBase",NB%,adr(objet$),adr(propriete$),adr(attribut$),handle(99)) if res%=0 item_add 99,"Ok" else text 99,"Erreur" end_if text 11,"" text 12,"" text 13,"" return sauver: base$ = file_name$(101) if base$="_" then return ext$ = lower$(file_extract_extension$(base$)) if ext$="" ext$ = ".knb" base$ = base$ + ext$ else if ext$<>".knb" base$ = left$(base$,len(base$)-len(ext$)) + ".knb" end_if end_if res% = dll_call2("SaveKnowledgeBaseToFile",NB%,adr(base$)) if res%=0 item_add 99,"Ok" else text 99,"Erreur" end_if return charger: base$ = file_name$(100) if base$="_" then return ext$ = lower$(file_extract_extension$(base$)) if ext$="" ext$ = ".knb" base$ = base$ + ext$ else if ext$<>".knb" base$ = left$(base$,len(base$)-len(ext$)) + ".knb" end_if end_if if file_exists(base$)=0 message "Fichier non trouvé" return end_if res% = dll_call2("LoadKnowledgeBaseFromFile",NB%,adr(base$)) if res%=0 item_add 99,"Ok" else text 99,"Erreur" end_if return changerobjet: objet$ = text$(11) nouveau$ = text$(14) res% = dll_call3("ChangeKnowledgeObject",NB%,adr(objet$),adr(nouveau$)) if res%=0 item_add 99,"Ok" else text 99,"Erreur" end_if text 11,"" text 12,"" text 13,"" return changerpropriete: objet$ = text$(11) propriete$ = text$(12) nouveau$ = text$(14) res% = dll_call4("ChangeKnowledgeProperty",NB%,adr(objet$),adr(propriete$),adr(nouveau$)) if res%=0 item_add 99,"Ok" else text 99,"Erreur" end_if text 11,"" text 12,"" text 13,"" return changerattribut: objet$ = text$(11) propriete$ = text$(12) attribut$ = text$(13) nouveau$ = text$(14) res% = dll_call5("ChangeKnowledgeAttribute",NB%,adr(objet$),adr(propriete$),adr(attribut$),adr(nouveau$)) if res%=0 item_add 99,"Ok" else text 99,"Erreur" end_if text 11,"" text 12,"" text 13,"" return supprimerobjet: objet$ = text$(11) res% = dll_call2("DeleteKnowledgeObject",NB%,adr(objet$)) if res%=0 item_add 99,"Ok" else text 99,"Erreur" end_if text 11,"" text 12,"" text 13,"" return supprimerpropriete: objet$ = text$(11) propriete$ = text$(12) res% = dll_call3("DeleteKnowledgeProperty",NB%,adr(objet$),adr(propriete$)) if res%=0 item_add 99,"Ok" else text 99,"Erreur" end_if text 11,"" text 12,"" text 13,"" return supprimerattribut: objet$ = text$(11) propriete$ = text$(12) attribut$ = text$(13) res% = dll_call4("DeleteKnowledgeAttribute",NB%,adr(objet$),adr(propriete$),adr(attribut$)) if res%=0 item_add 99,"Ok" else text 99,"Erreur" end_if text 11,"" text 12,"" text 13,"" return copiez-le dans le même dossier et lancez-le dans Panoramic_Editor. Dans la fenêtre qui s"ouvre, cliquez sur "Charger", sélectionnez le fichier *.knb installé, puis validez. Le mémo vous donne le résultat. Maintenant, cliquez directement sur "Lister". Le mémo contiendra toutes les connaissances. A partir de la, jouez... Exemple: rentrez "eau" dans le cham "Attribut" et cliquez sur "Lister". Vous allez apprendre que le chien boit de l'eau... Vous pouvez évidemment renseigner les trois champs objet, propriété et attribit, puis cliquer sur "Ajouter" pour ajouter une nouvelle connaissance. Ou modifier n'importe lequel ce ces éléménts, et le supprimer. En plus, vous pouvez sauvegarder votre "connaissance" par le bouton "Sauver" dans un fichier *.knb. | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Une "base de connaissance" - pour jouer ou plus si affinité Lun 21 Mai 2018 - 9:36 | |
| On peut l'utiliser, de façon pratique, comme:
- carnet d'adresses: les noms des contacts sont les "objets" les mots "fixe", "portable", "mail", "URL" etc servent de propriétés (liste non exhaustive) les "attributs" sont les valeurs correspondantes On obtient immédiatement la recherche par nom ainsi que la recherche inversée par n'importe lequel de ces critères
- arbre généalogique: les noms des contacts sont les "objets" les mots "conjoint de", "compagne de"', "fils de", "fille de", "marié le", "divorcé le", "né le", "décédé le" etc servent de propriétées (liste non exhaustive) les attributs sont les valeurs correspondantes on ontient la fichie complète en questionnant sur un nom, la personne ou la date visée en questionnant sur un nom et son attribut, le nom de la ou des personnes en questionnant sur une date, etc.
Ce ne sont que deux applications concrètes, mais on peut en imaginer des multitudes: - case à vin - bibliothèque - collection quelconque - programmes à lancer - mémo personnel de données, URL's, dates, ... ou, plus ludique: - informations sur les personnages de Star Wars - habitudes alimentaires des animeaux - besoins des plantes à cultiver
Les limites sont votre imaqination... | |
|