[Ada][Freeware][Open Source] Sum of terms

Sum of terms [Ada][Freeware][Open Source] - Ada - Programmation

Marsh Posté le 10-01-2015 à 01:56:12    

Bonjour,
 
 
Techniquement, j'ai écrit un "locuteur" in french term(s).  [:twano:1]  [:talladega:2]  
An a terminator en anglais dans la vocabilisabilitibilité. [:buzvolio]  [:talladega:3]  
 
Bon, je ne vais pas commencer à tout expliqué ici mais, je vous refile une adresse sur un soft avec Ada, PragmARC, Lexique.  [:bakk38]  
 
C'est un générateur de français, ou ça peut le devenir.  [:xenusion:1]
C'est basé sur un algorithme génétique et un réseaux de neurones artificiels.  
C'est pas au point, ça s'appelle Architect, c'est dans manlight.net/systemic/ il faut encore cliquer la dernière version du soft pour être dans le coup.  
Juste un truc, pas de doc, juste un Makefile et les sources.  [:rapha3l]  
 
 
Fonctionnement : Les mots du lexique de la langue française sont codés selon leur nature et leur rang dans le lexique ; Une "phrase" est générer grâce à un algorithme génétique ; une liste de phrases est générée pour entraîner initialement un réseau de neurones ; le réseau est finalement stimulé par une phrase générée par génétique ; le résulta est affiché.
 
Exemple :

manuel@eden:~/Arch/Archold/Architect/Architect-1.0.7$ ./bin/architect  


Citation :


Loading data/Pros.txt, please wait...
Loading data/Vers.txt, please wait...
Loading data/Cons.txt, please wait...
Loading data/Noms.txt, please wait...
Loading data/Adjs.txt, please wait...
Loading data/Advs.txt, please wait...
Loading data/Pres.txt, please wait...
Loading data/Syms.txt, please wait...
Loading 0 1
Loading 0 2
 8Loading 0 3
Loading 0 2
 2669Loading 0 3
Loading 0 2
 2670Loading 0 3
Loading 0 2
 4649Loading 0 3
Loading 0 2
 6034Loading 0 3
Loading 0 2
 6108Loading 0 3
Loading 0 2
 6111Loading 0 3
Loading 0 2
 6113Loading 0 3
Please wait...Loading 0 4
Loading 2
Done.
 
 
Initializing Samples... sipo chenus richement linguaux polydipsie pauliste
 macareux chaldéens jà revois croquaient bigleuse
 occitane goulus imperturbablement roton albigeoises préfabriqué
 badaude électoraliste demis ragota correspondants prémuni
 réactivations locomoteur modestement rétribution pauliste avants
 controversistes transculturels nons conglomérée volatilisée grimaçant
 retardes caricaturalement simiesque class enregistrons craquaient
 adragante défoncée frauduleusement favoriseront confusions dépêtrer
 cône bourrant décemment réellement occitan bissacs
 exigea indescriptiblement polytechniciens revenions pâtissière indemnisées
 régleur cumulative succinctement accote pneumatolytique métaphore
 gemmules poilues mensuellement érotiques prononciez  
 créais tapinois débandé retirions chaussés suiveurs
 bredouilles frauduleusement quidditative demeurions dessèchements arrogeant
 billards augmenté succinctement transformées bergsonienne imprévoyants
 transfusion grandissante primo prudence hangars spatialisés
 râpures burinées minéralogiquement géo silhouettée amènerez
 hélion verseuses impardonnablement déléguant industrialisant scandalisés
 brunettes handicapées minéralogiquement rouge cesserez instructives
 grange complémentaires fièrement snobs sérieuse prêterions
 plumeau polytechniciens impardonnablement hachurée parlotte banlieusarde
 lâcheras imperturbablement anucléées immobilisations émancipation savonnières
 détachés alias simplifiée laine décongestionnées russifie
 détalant famés pauliste transformées exauce exagérées
 dépenserait biologiquement énervées désaccordées mâles ses
 gréseuses cristalline crapuleusement réincorporer ensevelissons soulagé
 songeasse avants batracienne malintentionné ambassadrice minoré
 puait famés abêtis augmentez cloutés emballé
 réveillerons impardonnablement poilues tremblées progressant pontifièrent
 exsudant évidemment juxtaposées papillotement souffleté ente
 siégeais crapuleusement resplendissants réaliste taupé rentrais
 approchées géographiquement théâtraux citerons alignais portugais
 reliaient crapuleusement sacrilège mystique millimicron martelet
 tronquant imperturbablement aéré simplifiée radoucies toussoté
 protéosynthèse cutanée dextrement pansexualisme écoutez chinoiserie
 entreposais crapuleusement polytechniciens rédigées ployée tenteras
 pontifie indifféremment alcalinisantes télévisé séjournais lithographié
 malin massée géographiquement phonothécaires rivaliserait effacez
 emballé piquant mordicus mucoïtine couperez reportée
 détraquées inespérément thématique coloreraient séjournais tricheurs
 jacarandas banlieusarde drôlement sigillaires chausses guêtre
 pigment froussards véhémentement liaisons hystérie briquet
 dialogueurs messine nons désapprenais spécialiste rejailliraient
 commentent arrière récepteurs effrayants zonait signataire
 guitaristes sigmoïdien jà fléchissez physiologiste coltina
 lendemain cavalière inévitablement nourriciers bidasse trônait
 lumbago deltoïdes morbidement estourbisse détérioraient pattern
 favoriseront tragiquement grises délient réserpine rétrogradant
 zèbre minéralogiquement blêmies quimpe poil tortureurs
 tousseurs nuncupatifs ardito parpaillotes hypoglycémies satiné
 déceint jà galvanisés déverrouillée gonflés jaspé
 malfaisances avisée inavouablement décodait essaimages proposez
 marchant drôlement anarchiques déconcertaient pansent firmes
 touraillons apostrophée indescriptiblement soupais scandales chétivement
 trahies bref négligé stimuler andromèdes détraquées
 caracolai class linguaux solidarise suiveurs pleutres
 faîtières blafardes abominablement diplomatique hideusement sulfatages
 marchandise essénienne provincialement demandai blasphémais badelaire
 rôniers résonateurs dérouillées nauséabonds précédèrent déballant
 annelés archétype géographiquement occasionnée décorée fileté
 consultée modestement caprin entrevis combiné sénile
 district paratyphique caricaturalement contritions sanscrite fuguée
 génies orchestrés subconsciemment chicanais trottinants cuissards
 exhaussement rustaudes imperturbablement travaillerais bonites attitrée
 done.
 
Initializing Service... done.
bonjourException bonjour etException et bienvenueException bienvenue.
bonjour leException le mondeException monde.
 
press Enter to start and stop the program or Ctrl+D to abort.
 
 
press Enter to start and stop the program or Ctrl+D to abort.
 
  repoussée absentèrent        
 
 
 poivrade   enrichie portugais courons
 
 
   taupé résidentielle      
 
 
  repoussée absentèrent        
 
 
 portugais     craignît
 
 
   épandues épandues   amoncellent  
 
 
   possessivité possessivité      
 


 
 
Le type de base utilisé c'est :
 

Code :
  1. type Element_Type is
  2.   record
  3.      Class -- Natures des mots : integer (1..8).
  4.      Value -- Index lexicographique : integer (1..2**13+2**12).
  5.   end record


 
Après j'ai un tableau d'éléments.

Code :
  1. type Frame is
  2.   record
  3.      Series : Elements_Table (1..max_Element);
  4.      b_inf   : positive := max_element/4+1;
  5.      b_sup  : positive := (max_element/4)*3.
  6.   end record.


 
L'espace est codée (0, 0)
Le point est codé (0, 1)
 
 
Vous avez une extraction de la petite base et une de la base originelle du Lexique ou l'inverse...  :whistle:  
 
Pour la base originelle il faut compter 2**18+2**17 item pour les Id de valeur.
Pour la petite base il faut compter 2**13+2**12 item pour les Id de valeur.
 
Le programme connaît seulement les mots de 8 natures distincte ou pas.
Les noms, les verbes, les adverbes, les adjectifs, les pronoms, des prépositions, les symboles.
 
 
 
L'algo qui génère les trames :
 

Code :
  1. function Frame_Random return Frame_Type is
  2.      
  3.      New_Frame : Frame_Type := Default_Frame;
  4.   begin
  5.      
  6.      loop
  7.      loop
  8.         declare
  9.            Biais : Biais_Id_Type := Biais_Rand.Random(Biais_Gen);
  10.         begin        
  11.            if (Biais + New_Frame.B_Sup <= The_Glossary.Elements.Index_Type'Last) then
  12.           New_Frame.B_Sup := New_Frame.B_Sup + Biais;
  13.           exit;
  14.            else
  15.           New_Frame.B_Sup := (The_Glossary.Elements.Index_Type'Last/4)*3+1;
  16.            end if;
  17.           
  18.         end;
  19.      end loop;
  20.     
  21.      loop
  22.         declare
  23.            Biais : Biais_Id_Type := Biais_Rand.Random(Biais_Gen);
  24.         begin        
  25.           
  26.            if Biais + New_Frame.B_Inf >= The_Glossary.Elements.Index_Type'First then
  27.           New_Frame.B_inf := New_Frame.B_inf + Biais;
  28.           exit;
  29.            else
  30.           New_Frame.B_inf := (The_Glossary.Elements.Index_Type'Last/4)+1;
  31.            end if;
  32.           
  33.         end;
  34.      end loop;
  35.          
  36.      exit when New_Frame.B_Sup - New_Frame.B_Inf <= Element_Max + Biais_Rand.Random(Biais_Gen);
  37.          
  38.      end loop;
  39.           
  40.      for Series_Index in New_Frame.B_Inf .. New_Frame.B_Sup loop        
  41.      loop
  42.         begin
  43.            New_Frame.Elemental_Series(Series_Index).Value_Id  := Random_Value_Id.Random(Value_Generator);
  44.            New_Frame.Elemental_Series(Series_Index).Class_Id  := Is_Coherent(New_Frame.Elemental_Series(Series_Index), words);                        
  45.            exit when New_Frame.Elemental_Series(Series_Index).Class_Id /= 0;
  46.         exception
  47.            when others =>
  48.           null;
  49.         end;        
  50.      end loop;
  51.      exit when New_Frame.Elemental_Series(Series_Index).Value_Id = 1;
  52.      end loop;
  53.  
  54.      return New_Frame;
  55.      
  56.   end Frame_Random;


 
 
Le fitness observe le type de construction et une teneur rhétorique :
 

Code :
  1. function Frame_Fitness (Frame : in Frame_Type) return Float is
  2.      
  3.      Fitness : Float := 0.0;
  4.      
  5.      
  6.      Element_Counter_Table : Element_Counter_Table_Type;
  7.      [
  8.      Current_Element : The_Glossary.Elements.Element_Type;
  9.            
  10.      Bester : Boolean := False;
  11.      
  12.   begin
  13.      
  14.      if Frame.Elemental_Series(Frame.B_Inf).Class_Id = 4 and
  15.          Frame.Elemental_Series(Frame.B_Inf+1).Class_Id = 2 then
  16.           Fitness := Fitness + 7.0;
  17.           if Frame.B_Inf+3 < Frame.B_Sup then
  18.              if Frame.Elemental_Series(Frame.B_Inf+2).Class_Id = 6 and
  19.                Frame.Elemental_Series(Frame.B_Inf+3).Class_Id = 5 then
  20.                 Fitness := Fitness + 5.0;
  21.              end if;
  22.           end if;
  23.      elsif Frame.Elemental_Series(Frame.B_Inf).Class_Id = 2 and
  24.          Frame.Elemental_Series(Frame.B_Inf+1).Class_Id = 4 then
  25.           Fitness := Fitness + 9.0;
  26.           if Frame.B_Inf+3 < Frame.B_Sup then
  27.              if Frame.Elemental_Series(Frame.B_Inf+2).Class_Id = 5 and
  28.                Frame.Elemental_Series(Frame.B_Inf+3).Class_Id = 6 then
  29.                 Fitness := Fitness + 7.0;
  30.              end if;
  31.           end if;
  32.     
  33.      elsif Frame.Elemental_Series(Frame.B_Inf).Class_Id = 6 and
  34.          Frame.Elemental_Series(Frame.B_Inf+1).Class_Id = 7 then
  35.           Fitness := Fitness + 11.0;    
  36.           if Frame.B_Inf+3 < Frame.B_Sup then              
  37.         if Frame.Elemental_Series(Frame.B_Inf).Class_Id = 2 and
  38.           Frame.Elemental_Series(Frame.B_Inf+1).Class_Id = 4 then
  39.            Fitness := Fitness + 9.0;
  40.         end if;        
  41.           end if;
  42.      end if;
  43.            
  44.      
  45.      for Series_Index in Frame.B_Inf..Frame.B_Sup loop
  46.           Element_Counter_Table(Series_Index).Element := Frame.Elemental_Series(Series_Index);
  47.      end loop;
  48.      
  49.      for Element_Index in Element_Counter_Table'Range loop
  50.           Current_Element := Element_Counter_Table(Element_Index).Element;
  51.           for Counter_Index in Element_Index+1..Element_Counter_Table'Last loop
  52.              if Element_Counter_Table(Counter_Index).Element.Value_id = Current_Element.Value_id then
  53.                 Element_Counter_Table(Counter_Index).Count := Element_Counter_Table(Counter_Index).Count + 1;
  54.              end if;
  55.           end loop;
  56.      end loop;
  57.      
  58.      for Element_Index in Element_Counter_Table'Range loop    
  59.           if Element_Counter_Table(Element_Index).Count = 1 then
  60.              Fitness := Fitness + 1.0;
  61.           elsif Element_Counter_Table(Element_Index).Count > 2 then
  62.              Fitness := Fitness - 1.0;
  63.           end if;
  64.      end loop;
  65.      for Counter_Index in Element_Counter_Table'Range loop
  66.           if Element_Counter_Table(Counter_Index).Count = 2 then
  67.              if not Bester then
  68.                 Bester := True;
  69.         else
  70.            Bester := False;
  71.            exit;
  72.              end if;
  73.      end if;
  74.      end loop;
  75.  
  76.      
  77.      if Bester then
  78.      Fitness := Fitness * 2.0;
  79.      end if;
  80.      return Fitness;
  81.   end Frame_Fitness;


 
 
Voilà, vous êtes initiés à la linguistique neurale iso- gène !
 
Bonsoir.
 
 
 
Edit : Il y a deux variable en fin de déclaration de programme principale src/architect.adb :
 
- converged : qui doit être adapté selon...
- Reuse       : False si c'est une reinitialisation du réseau de neurones True si c'est une réutilisation.


Message édité par par l'anneau de l'ia le 10-01-2015 à 02:42:20

---------------
Toute expression prend un sens spirituel qui nous influence dans notre quête de l'Homme.
Reply

Marsh Posté le 10-01-2015 à 01:56:12   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed