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

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

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

    努力,成長,提高

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

    評論

    # re: 用JAVA實現AI 2010-06-07 11:41 loadingsmc

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

    # re: 用JAVA實現AI 2010-06-07 12:42 doublekill

    支持
      回復  更多評論    

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

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

    # re: 用JAVA實現AI 2010-06-10 21:26 激進派

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

    # re: 用JAVA實現AI 2010-06-12 13:41 wang zhongyu

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

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


    網站導航:
     
    主站蜘蛛池模板: 青青青视频免费观看| 亚洲国产综合无码一区| 亚洲午夜电影在线观看高清| 久久久久久成人毛片免费看| 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲熟妇av一区二区三区漫画| 日韩久久无码免费毛片软件| 亚洲AⅤ永久无码精品AA| 国产精品亚洲一区二区三区在线观看 | 深夜久久AAAAA级毛片免费看| 亚洲AⅤ视频一区二区三区| 国产激情久久久久影院老熟女免费| 亚洲不卡无码av中文字幕| 亚洲免费视频一区二区三区| 亚洲日韩精品射精日| 亚洲国产精品免费视频| 亚洲国产情侣一区二区三区| 成人无码区免费视频观看 | 日韩免费观看一区| 亚洲成AV人在线播放无码| AAA日本高清在线播放免费观看| 亚洲综合图色40p| 99re6在线视频精品免费下载| 亚洲不卡中文字幕| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 一级中文字幕免费乱码专区| 亚洲五月综合缴情在线观看| 99久热只有精品视频免费观看17| 亚洲AV综合色区无码二区偷拍 | 亚洲最大激情中文字幕| 久久国产乱子伦精品免费看| 亚洲欧洲日韩极速播放| 亚洲伦乱亚洲h视频| 一级毛片免费观看不卡的| 亚洲日韩精品国产3区| 国产成人毛片亚洲精品| 亚洲日韩中文字幕一区| 久久久久亚洲精品天堂久久久久久| 一级毛片免费观看不卡的| 亚洲Aⅴ在线无码播放毛片一线天| 亚洲国产第一站精品蜜芽|