<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    努力,成長,提高

    在追求中進步
    數(shù)據(jù)加載中……
    用JAVA實現(xiàn)AI
    從小就有一個夢想,將來開發(fā)機器人,說白了,就是人工智能。現(xiàn)在看來,可喜的是,做的是軟件這行,還有點可行性,可惜的是,做的工作與人工智能不搭嘎,工作又太累,天天加班不說,大老遠跑回家,就沒那么多時間去思考,學習人工智能了。徘徊猶豫了幾個月,一直沒有決心去寫代碼,這不,終于決定繼續(xù)小時候的夢想,開始了用java實現(xiàn)人工智能的第一步了,那就是用java來分析語義,讓我們從頭開始。
    我的第一個Milestone很簡單,用戶輸入一些語句作為java的知識源,然后程序自動分析推導出其他的事實。Come up some examples:
    ~X(Man(X)>Die(X))
    Man(Socrates)
    這是兩個事實,程序應該要給出Die(Socrates),那第一階段就算完成。
    ~代表任意,這主要是任意的符號不好打,就用波浪線代替了。->用>來代替。存在用@, 否用!, 交用&,或用|,等價就用=
    要完成第一階段得分兩步,第一部是分析語句,第二部分是根據(jù)規(guī)則來進行推導。這第一部分已經(jīng)完成了。實現(xiàn)的思路:本來是要參考編譯器的,后來想想借鑒一下即可,采用了遞歸的方法。還需要測試,如果有bug,還請批評指正。
    如果您也對于人工智能有興趣,或者想合作開發(fā)一些賺錢的項目,java或者iphone的都可以,歡迎和我聯(lián)系,我的QQ627423443

    第一部分代碼如下:
    /**
     * 
     
    */

    package src.analyser;

    import java.util.ArrayList;
    import java.util.List;

    import utils.StringUtils;

    /**
     * 
    @author ken
     * 
     
    */

    public class BasicAnalyser {

        
    private List<String> predicationList = new ArrayList<String>();

        
    public boolean isSentence(String exp) {
            exp 
    = exp.trim();

            
    if (StringUtils.isEmpty(exp)) {
                
    return false;
            }

            exp 
    = StringUtils.trimBracket(exp);
            
    if (isAtomicSentence(exp)) {
                
    return true;
            }


            
    if (exp.charAt(0== '!'{
                
    return isSentence(exp.substring(1));
            }
     else if (exp.charAt(0== '~' || exp.charAt(0== '@'{
                
    // means any or exist, must followed by VAR
                String tmp = "";
                
    int i = 0;
                
    for (i = 1; i < exp.length(); i++{
                    
    if ((exp.charAt(i) >= 'A' && exp.charAt(i) <= 'Z'|| exp.charAt(i) == '_'{
                        tmp 
    = tmp + exp.charAt(i);
                    }
     else {
                        
    break;
                    }

                }

                
    if (i >= exp.length()) {
                    
    // means ~X
                    return false;
                }
     else {
                    
    return isSentence(exp.substring(i));
                }

            }
     else {
                
    // means S1 op S2
                StringBuffer lastSentence = new StringBuffer();
                
    int leftBracketNum = 0;
                
    int rightBracketNum = 0;
                
    for (int i = 0; i < exp.length(); i++{
                    
    if (isOperator(exp.charAt(i))) {
                        
    if (leftBracketNum == rightBracketNum) {
                            
    if (i >= exp.length()) {
                                
    return false;
                            }
     else {
                                
    if (isSentence(lastSentence.toString()) && isSentence(exp.substring(i + 1))) {
                                    
    return true;
                                }
     else {
                                    
    return false;
                                }

                            }

                        }


                    }
     else {
                        
    if (exp.charAt(i) == '('{
                            leftBracketNum
    ++;
                        }
     else if (exp.charAt(i) == ')'{
                            rightBracketNum
    ++;
                        }

                        lastSentence 
    = lastSentence.append(exp.charAt(i));
                    }

                }


            }

            
    return false;

        }


        
    private boolean isOperator(char x) {
            
    return x == '|' || x == '&' || x == '>' || x == '=';
        }


        
    public boolean isVar(String expression) {

            expression.trim();
            expression 
    = StringUtils.trimBracket(expression);
            
    if (StringUtils.isEmpty(expression)) {
                
    return false;
            }

            
    if (expression.charAt(0>= 'A' && expression.charAt(0<= 'Z'{
                
    for (int i = 1; i < expression.length(); i++{
                    
    if ((expression.charAt(i) >= 'a' && expression.charAt(0<= 'z'|| (expression.charAt(i) >= 'A' && expression.charAt(i) <= 'Z')
                            
    || expression.charAt(i) == '_'{
                        
    // do nothing
                    }
     else {
                        
    return false;
                    }

                }

                
    return true;
            }

            
    return false;
        }


        
    public boolean isConstant(String expression) {
            expression.trim();
            expression 
    = StringUtils.trimBracket(expression);
            
    if (StringUtils.isEmpty(expression)) {
                
    return false;
            }

            
    if (expression.charAt(0>= 'a' && expression.charAt(0<= 'z'{
                
    for (int i = 1; i < expression.length(); i++{
                    
    if ((expression.charAt(i) >= 'a' && expression.charAt(0<= 'z'|| (expression.charAt(i) >= 'A' && expression.charAt(i) <= 'Z')
                            
    || expression.charAt(i) == '_'{
                        
    // do nothing
                    }
     else {
                        
    return false;
                    }

                }

                
    return true;
            }

            
    return false;
        }


        
    public boolean isLikeFormFunc(String expression, boolean upperCase) {
            
    if (StringUtils.isEmpty(expression)) {
                
    return false;
            }

            
    char startLetterFrom = upperCase ? 'A' : 'a';
            
    char startLetterTo = upperCase ? 'Z' : 'z';
            expression.trim();
            expression 
    = StringUtils.trimBracket(expression);
            expression 
    = expression.replaceAll(" """);
            
    if (expression.charAt(0>= startLetterFrom && expression.charAt(0<= startLetterTo) {
                
    int leftBracket = 0;
                
    int rightBracket = 0;
                StringBuffer lastString 
    = new StringBuffer();
                
    for (int i = 0; i < expression.length(); i++{
                    
    if (leftBracket == 0{
                        
    if (!((expression.charAt(i) >= 'A' && expression.charAt(i) <= 'Z')
                                
    || (expression.charAt(i) >= 'a' && expression.charAt(i) <= 'z'|| expression.charAt(i) == '_' || expression.charAt(i) == '(')) {
                            
    return false;// illegal
                        }

                    }

                    
    if (expression.charAt(i) == '('{
                        leftBracket
    ++;
                        
    if (leftBracket > 1{
                            lastString.append(expression.charAt(i));
                        }

                    }
     else if (expression.charAt(i) == ')'{
                        
    if (i == expression.length() - 1{
                            
    // last one
                            if (!isVar(lastString.toString()) && !isConstant(lastString.toString()) && !isFunction(lastString.toString())) {
                                
    return false;
                            }
     else {
                                
    return true;
                            }

                        }

                        rightBracket
    ++;
                        lastString.append(expression.charAt(i));
                    }
     else if (expression.charAt(i) == ','{
                        
    if (leftBracket - rightBracket == 1{
                            
    if (!isVar(lastString.toString()) && !isConstant(lastString.toString()) && !isFunction(lastString.toString())) {
                                
    return false;
                            }

                            lastString 
    = new StringBuffer();
                        }
     else {
                            lastString.append(expression.charAt(i));
                        }

                    }
     else {
                        
    if (leftBracket != 0{
                            lastString.append(expression.charAt(i));
                        }

                    }

                }

            }

            
    return false;
        }


        
    public boolean isAtomicSentence(String expression) {
            
    // Friends(father_of(david),mother_of(peter))
            boolean isJustification = isLikeFormFunc(expression, true);
            
    if (isJustification) {
                predicationList.add(expression);
            }

            
    return isJustification;
        }


        
    public boolean isFunction(String expression) {
            
    return isLikeFormFunc(expression, false);
        }


        
    public static void main(String[] args) {
            BasicAnalyser x 
    = new BasicAnalyser();
            String m 
    = "Test(test(t),a,b)&Fuck(st,m)>Monday(today)";
            System.out.println(x.isSentence(m));
            
    for (int i = 0; i < x.getPredicationList().size(); i++{
                System.out.println(x.getPredicationList().get(i));
                
            }

        }


        
    public List<String> getPredicationList() {
            
    return predicationList;
        }


        
    public void setPredicationList(List<String> predicationList) {
            
    this.predicationList = predicationList;
        }

    }

    posted on 2010-06-06 23:59 孔陽 閱讀(7875) 評論(5)  編輯  收藏

    評論

    # re: 用JAVA實現(xiàn)AI 2010-06-07 11:41 loadingsmc

    很有同感,聯(lián)系聯(lián)系.我的聯(lián)系QQ50744447/MSN:simaqinshan@hotmial.com
      回復  更多評論    

    # re: 用JAVA實現(xiàn)AI 2010-06-07 12:42 doublekill

    支持
      回復  更多評論    

    # re: 用JAVA實現(xiàn)AI[未登錄] 2010-06-07 17:35 過客

    語法分析機器人,毫無意義,如果沒有意識,只是機器人
      回復  更多評論    

    # re: 用JAVA實現(xiàn)AI 2010-06-10 21:26 激進派

    哥們兒,這也是我的夢想,而且,我也曾想過語義分析著一個模塊,一樣因為工作的原因,沒有機會寫代碼,但是,我看了你的代碼,恕我不能茍同你的思路,沒有經(jīng)過ai核心而分解的語言,又何談語義?我以前想過這個東西至少要經(jīng)過好幾個模塊的共同協(xié)作才能分析出來。最簡單的也要調用詞組庫,甚至要與場景相關,構建場景等等,有興趣咱可Q聯(lián) 9624022
      回復  更多評論    

    # re: 用JAVA實現(xiàn)AI 2010-06-12 13:41 wang zhongyu

    可以用jboss的rule engine等開源產(chǎn)品?前段時間看過一點點,覺得可行。那里面有fact,knowlege和result的概念,另外knowlegdge里可以將規(guī)則按照優(yōu)先級排序。代碼也是java的。祝樓主早日夢想成真~
      回復  更多評論    

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 最新精品亚洲成a人在线观看| 污污免费在线观看| 久久久久亚洲AV综合波多野结衣| 免费看黄视频网站| 两个人看www免费视频| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲综合视频在线| 中文字幕亚洲专区| 亚洲成av人片在线观看天堂无码| 成年女人午夜毛片免费看| 免费A级毛片在线播放| 久久一区二区三区免费| 国产成人亚洲毛片| 亚洲色一区二区三区四区| 亚洲黄色片在线观看| 亚洲AV一宅男色影视| 亚洲欧洲精品成人久久曰影片| 在线观看成人免费| 日本阿v免费费视频完整版| 四虎影视成人永久免费观看视频 | 久久久久久毛片免费播放| 一级特黄a免费大片| 国产精品亚洲精品日韩电影| 国产亚洲玖玖玖在线观看| 亚洲国产成人va在线观看网址| 亚洲男人都懂得羞羞网站| 亚洲AV综合色区无码一区| 国产美女亚洲精品久久久综合| 亚洲国产91精品无码专区| 免费成人黄色大片| 亚洲AV日韩精品一区二区三区| 国产精品二区三区免费播放心| 高清国语自产拍免费视频国产| 成人五级毛片免费播放| 女人被免费视频网站| 成人免费视频试看120秒| 久久久久久国产精品免费免费 | 亚洲人成网站在线观看播放青青| 久久国产亚洲高清观看| 亚洲精品第一国产综合精品| 亚洲精品在线视频观看|