/* * Here comes the text of your license * Each line should be prefixed with * */ package nars.lab.language; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import nars.NAR; import nars.entity.Sentence; import nars.entity.Task; import nars.gui.NARSwing; import nars.io.Answered; /** * * @author patrick.hammer */ public class LanguageGUI extends javax.swing.JFrame { /** * Creates new form LanguageGUI */ public LanguageGUI() { initComponents(); String everything; try { everything = new Scanner(new File(".\\nars_lab\\nars\\lab\\language\\language_knowledge.nal")).useDelimiter("\\Z").next(); jTextPane1.setText(everything); } catch (FileNotFoundException ex) { Logger.getLogger(LanguageGUI.class.getName()).log(Level.SEVERE, null, ex); } this.jTextPane1.setCaretPosition(0); this.inputPanel.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ENTER) { jButton1ActionPerformed(null); } } }); languageNAR = new NAR(); reasonerNAR = new NAR(); NARSwing lang = new NARSwing(languageNAR); lang.mainWindow.setTitle("Language NAR (OpenNARS v1.6.5)"); NARSwing reas = new NARSwing(reasonerNAR); reas.mainWindow.setTitle("Reasoner NAR (OpenNARS v1.6.5)"); languageNAR.param.noiseLevel.set(0); reasonerNAR.param.noiseLevel.set(0); reasonerNAR.start(0); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jButton1 = new javax.swing.JButton(); jScrollPane2 = new javax.swing.JScrollPane(); jTextPane1 = new javax.swing.JTextPane(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); spliceCheckbox = new javax.swing.JCheckBox(); spliceField = new javax.swing.JTextField(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jScrollPane3 = new javax.swing.JScrollPane(); attributePanel = new javax.swing.JTextPane(); jLabel5 = new javax.swing.JLabel(); eventCheck = new javax.swing.JCheckBox(); inputPanel = new javax.swing.JTextField(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jButton1.setText("Input"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jScrollPane2.setViewportView(jTextPane1); jLabel1.setText("Start knowledge and potential training samples:"); jLabel2.setText("Enter a sentence. Example: \"tim eats ice in manchester.\" Try re-Input in case that it was misinterpreted."); spliceCheckbox.setSelected(true); spliceCheckbox.setText("Cut up"); spliceField.setText("2"); jLabel3.setText("Minimal segment length:"); jLabel4.setText("Sentence attribute relations:"); attributePanel.setText("PLACE TIME IT"); jScrollPane3.setViewportView(attributePanel); jLabel5.setText("For perceiving the sentence in pieces"); eventCheck.setSelected(true); eventCheck.setText("Input as event"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(inputPanel)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(eventCheck) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(spliceCheckbox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spliceField, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 267, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 47, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 267, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(65, 65, 65)) .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(jLabel4) .addComponent(jLabel5)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(spliceCheckbox) .addComponent(jButton1) .addComponent(spliceField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3) .addComponent(eventCheck)) .addGroup(layout.createSequentialGroup() .addGap(1, 1, 1) .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addGroup(layout.createSequentialGroup() .addGap(8, 8, 8) .addComponent(inputPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 258, Short.MAX_VALUE) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents public String considerQWord(String s, HashSet<String> qwords) { for(String q : qwords) { if(q.equals(s)) { return "?"+s; } } return s; } //NAR learnerNAR = new NAR(); //for learning language structure static NAR languageNAR; static NAR reasonerNAR; ArrayList<Answered> q = new ArrayList<Answered>(); int seed = 1; private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed String text = this.inputPanel.getText(); List<String> inputs = new ArrayList<String>(); this.inputPanel.setText(""); String[] words = text.split(" "); String punctuation = "sentence"; for(int i=0;i<words.length;i++) { for(int len=words.length; len>=Integer.valueOf(spliceField.getText()); len--) { String narsese = "<(*,"; if(i+len > words.length) { //this length is not possible continue; } for(int k=i;k<i+len;k++) { if(words[k].contains("?")) { punctuation = "question"; } words[k] = words[k].replace(".","").replace("?",""); //skip puncutation in words narsese += "\"" + words[k]+"\"" + ","; } narsese = narsese.substring(0, narsese.length()-1); narsese+=") --> PART>."; inputs.add(narsese); if(!spliceCheckbox.isSelected()) { break; } } if(!spliceCheckbox.isSelected()) { break; } } languageNAR.stop(); for(Answered ans : q) { ans.off(); } languageNAR.reset(); languageNAR.memory.randomNumber.setSeed(seed); seed++; try { HashMap<String,String> wordTypes = new HashMap<String,String>(); HashSet<String> qWords = new HashSet<String>(); for(String s : jTextPane1.getText().split("\n")) { //if its a word type definition we won't add it directly but only when used in the sentence if(s.startsWith("<\"")) { String word = s.split("\"")[1]; wordTypes.put(word, s); if(s.contains("QWORD>.")) { qWords.add(word); } } else { languageNAR.addInput(s); } } languageNAR.step(100); //add word categories of all words that occurred for(String word : words) { if(wordTypes.containsKey(word)) { languageNAR.addInput(wordTypes.get(word)); } } languageNAR.step(10); for(String s : inputs) { languageNAR.addInput(s); languageNAR.step(1); } boolean isQuestion = punctuation.equals("question"); String punct = (isQuestion ? "?" : "." + (eventCheck.isSelected() ? " :|:" : "")); //Interpretation of Inheritance Answered cur = new Answered() { @Override public void onSolution(Sentence belief) { //System.out.println("solution: " + belief); System.out.println(belief); String[] concepts = belief.term.toString().split("\""); if(concepts.length < 6) { return; //just an example, no " included } String s = considerQWord(concepts[1],qWords).toUpperCase(); String p = considerQWord(concepts[3],qWords).toUpperCase(); String v = considerQWord(concepts[5],qWords).toUpperCase(); String inp = "<(*,"+s+","+p+") --> "+v+">" + punct; if(v.equals("IS") || v.equals("ARE")) { inp = "<"+s + " --> "+p + ">" + punct; } reasonerNAR.addInput(inp+ " " + (isQuestion ? "" : belief.truth.toString())); } @Override public void onChildSolution(Task child, Sentence belief) {} }; languageNAR.ask("<(*,(/,REPRESENT,?a,_),(/,REPRESENT,?b,_)) --> (/,REPRESENT,?v,_)>", cur); q.add(cur); for(String attribute : attributePanel.getText().split(" ")) { cur = new Answered() { @Override public void onSolution(Sentence belief) { //System.out.println("solution: " + belief); System.out.println(belief); String[] concepts = belief.term.toString().split("\""); if(concepts.length < 2) { return; //just an example, no " included } String s = considerQWord(concepts[1],qWords).toUpperCase(); String inp = "<"+s + " --> " + attribute + ">" + punct; reasonerNAR.addInput(inp+ " " + (isQuestion ? "" : belief.truth.toString())); } @Override public void onChildSolution(Task child, Sentence belief) {} }; languageNAR.ask("<?what --> " + attribute + ">", cur); q.add(cur); } languageNAR.start(0); } catch (Exception ex) { Logger.getLogger(LanguageGUI.class.getName()).log(Level.SEVERE, null, ex); } }//GEN-LAST:event_jButton1ActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { NARSwing.themeInvert(); /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new LanguageGUI().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextPane attributePanel; private javax.swing.JCheckBox eventCheck; private javax.swing.JTextField inputPanel; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JTextPane jTextPane1; private javax.swing.JCheckBox spliceCheckbox; private javax.swing.JTextField spliceField; // End of variables declaration//GEN-END:variables }