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

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

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

    努力,成長(zhǎng),提高

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

    評(píng)論

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

    很有同感,聯(lián)系聯(lián)系.我的聯(lián)系QQ50744447/MSN:simaqinshan@hotmial.com

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

    支持

    # re: 用JAVA實(shí)現(xiàn)AI[未登錄](méi) 2010-06-07 17:35 過(guò)客

    語(yǔ)法分析機(jī)器人,毫無(wú)意義,如果沒(méi)有意識(shí),只是機(jī)器人

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

    哥們兒,這也是我的夢(mèng)想,而且,我也曾想過(guò)語(yǔ)義分析著一個(gè)模塊,一樣因?yàn)楣ぷ鞯脑?,沒(méi)有機(jī)會(huì)寫(xiě)代碼,但是,我看了你的代碼,恕我不能茍同你的思路,沒(méi)有經(jīng)過(guò)ai核心而分解的語(yǔ)言,又何談?wù)Z義?我以前想過(guò)這個(gè)東西至少要經(jīng)過(guò)好幾個(gè)模塊的共同協(xié)作才能分析出來(lái)。最簡(jiǎn)單的也要調(diào)用詞組庫(kù),甚至要與場(chǎng)景相關(guān),構(gòu)建場(chǎng)景等等,有興趣咱可Q聯(lián) 9624022

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

    可以用jboss的rule engine等開(kāi)源產(chǎn)品?前段時(shí)間看過(guò)一點(diǎn)點(diǎn),覺(jué)得可行。那里面有fact,knowlege和result的概念,另外knowlegdge里可以將規(guī)則按照優(yōu)先級(jí)排序。代碼也是java的。祝樓主早日夢(mèng)想成真~

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 色屁屁www影院免费观看视频| 免费无码一区二区三区| 成年美女黄网站色大免费视频| 亚洲av无码精品网站| 国产成人无码免费看片软件| 亚洲国产高清在线精品一区| 在线观看肉片AV网站免费| 亚洲人成网站色在线入口| 在线视频亚洲一区| 一级毛片**免费看试看20分钟 | 亚洲中文字幕久久精品无码2021| 国产成人AV免费观看| 国产亚洲精品激情都市| 日韩成人毛片高清视频免费看| 国产美女被遭强高潮免费网站| 亚洲色无码国产精品网站可下载| a毛片全部播放免费视频完整18| gogo全球高清大胆亚洲| 亚洲黄色一级毛片| 久久久久久AV无码免费网站下载| 亚洲午夜久久久久久久久久| free哆拍拍免费永久视频| 免费人成在线观看视频播放| 看一级毛片免费观看视频| 哒哒哒免费视频观看在线www | 18禁美女裸体免费网站| 五月天婷亚洲天综合网精品偷| 亚洲成a人无码亚洲成www牛牛| 午夜电影免费观看| 亚洲成在人线av| 国产在线一区二区综合免费视频| 日本免费v片一二三区| 亚洲AV无码之国产精品| 国产精品久久香蕉免费播放| 国产天堂亚洲国产碰碰| 亚洲AV无码乱码在线观看牲色 | 免费观看四虎精品国产永久| 国产亚洲综合精品一区二区三区| 免费人成在线观看视频播放 | 亚洲区不卡顿区在线观看| 亚洲国产免费综合|