FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Projet de planétarium virtuel.
par Pedro Alvarez Hier à 17:29

» Quantité de mémoire utilisée par un exe
par Navigateur Hier à 14:52

» Problème avec 'file_load'.
par Pedro Alvarez Hier à 8:12

» Version instantanée V 0.9.28i20 du 13/06/2018
par jjn4 Sam 16 Juin 2018 - 14:25

» string$(0,chr$(32)) sans erreur
par silverman Ven 15 Juin 2018 - 19:56

» Version instantanée V 0.9.28i19 du 13/06/2018
par Minibug Ven 15 Juin 2018 - 19:14

» PanExpress : l'éditeur Panoramic avec création d'objet
par Jean Claude Ven 15 Juin 2018 - 7:52

» Mes souhaits d'amélioration de Panoramic.
par Pedro Alvarez Jeu 14 Juin 2018 - 20:17

» [RÉSOLU] Message d'erreur impossible à indentifier
par Minibug Mer 13 Juin 2018 - 20:52

» Cadre pour image
par Jean Claude Mar 12 Juin 2018 - 16:31

» Créateur d'objets Panoramic
par Minibug Mar 12 Juin 2018 - 14:02

» Planétarium gratuit.
par Jean Claude Sam 9 Juin 2018 - 18:50

» Comment afficher une image sans fond.
par JL35 Sam 9 Juin 2018 - 14:16

» image_width(n) et image_height(n)
par silverman Sam 9 Juin 2018 - 11:22

» Site sur la programmation sympa
par Jean Claude Jeu 7 Juin 2018 - 11:20

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juin 2018
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

 Une "base de connaissance" - pour jouer ou plus si affinité

Aller en bas 
AuteurMessage
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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...

Very Happy Very Happy Very Happy

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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Minibug

avatar

Nombre de messages : 2962
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Une "base de connaissance" - pour jouer ou plus si affinité   Lun 21 Mai 2018 - 10:29

Bonjour klaus !

Ca rappelle un peu le programme que j'avais proposé sur l'intelligence artificielle.
Il fait la même chose mais en langage courant...

Seulement je n'ai pas réussi à le transformer en Panoramic sans erreurs. Dommage !
A la base c'est un programme datant des années 80 qui a été repris en VB il me semble.

Si cela t'intéresse c'est ici !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
Contenu sponsorisé




MessageSujet: Re: Une "base de connaissance" - pour jouer ou plus si affinité   

Revenir en haut Aller en bas
 
Une "base de connaissance" - pour jouer ou plus si affinité
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Base Camp...pour les nuls
» pour jouer avec les chiffres et les nombres
» Des idées pour pouvoir jouer sur ce forum
» basecamp pour les nuls
» Battlefield 3 Jets

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: