Libsvm java工程實踐

來源:互聯網
上載者:User

標籤:白雲機場   公司   擷取   分類   證券   調整   set   簡單的   IV   

在上篇文章中對libsvm的流程和簡單的java代碼測試做了說明,本篇簡單對libsvm如何在工程中實踐進行簡短說明,不當的地方歡迎大家指正。

第一步是對libsvm的預測函數進行調整,我是從svm_predict類中抽取部分程式碼群組成預測防範,代碼如下:

/**     * 對傳入的文本特徵根據訓練好的分類模型進行分類     * @param model 已經訓練好的模型     * @param contentFeature    傳入的計算好的文本分詞後的特徵     * @return     */    public static int libSvmPredict(svm_model model, String contentFeature){        //預設分類類別為-1        int label = -1;        //判斷傳入的文本特徵是否為空白        if (contentFeature == null) return label;        //對傳入的特徵進行切分        StringTokenizer st = new StringTokenizer(contentFeature," \t\n\r\f:");        //這裡target用不到,測試中會用到,即我們測試語料的類別標籤//        double target = atof(st.nextToken());        int m = st.countTokens()/2;        svm_node[] x = new svm_node[m];        for(int j=0;j<m;j++)        {            x[j] = new svm_node();            x[j].index = atoi(st.nextToken());            x[j].value = atof(st.nextToken());        }        double v = svm.svm_predict(model,x);        label = (int) v;        return label;    }
View Code

第二步對待分類的文本按照上篇文章中講到的方法根據terms詞表產生libsvm需要的格式,注意我這裡為了方便僅做了詞的tf,idf預設都為1,代碼如下:

/**     * 擷取模型分詞用的term詞表     * @param termsPath     * @return     */    public static Map<String, Integer> getModelTerms(String termsPath){        Map<String, Integer> termsMap = new HashMap<String, Integer>(  );        try {            String termsStr = FileOptionUtil.readFile( termsPath, "UTF-8" );            if (termsStr != null){                String[] terms = termsStr.split( "\r\n" );                if (terms!=null && terms.length>0){                    for (int i=0; i<terms.length; i++){                        String term = terms[i];                        String[] termM = term.split( "\t" );                        if (termM!=null && termM.length==2){                            termsMap.put( termM[0], Integer.parseInt(termM[1]) );                        }                    }                }            }        } catch (IOException e) {            e.printStackTrace();        }        return termsMap;    }    public static String getContentFeature(String content, Map<String, Integer> terms){        String contentFature = "";        //對傳入的文本進行分詞        Map<String, Integer> contentTermsMap = HanLPAnalyser.segString( content );        Map<Integer, Double> contentTfIdf = new TreeMap<Integer, Double>( new Comparator<Integer>() {            @Override            public int compare(Integer o1, Integer o2) {                return o1.compareTo( o2 );            }        } );        //計算tf-idf,這裡我們就用單存的tf代替tf-idf,idf值均為1        for (String word : contentTermsMap.keySet()){            if (terms.containsKey( word )){                contentTfIdf.put( terms.get( word ), getWordTF( word, contentTermsMap ) );            }        }        for (Integer key : contentTfIdf.keySet()){            contentFature += key + ":" + contentTfIdf.get( key ) + " ";        }        return contentFature.trim();    }
View Code

第三步根據上述方法進行分類計算,main方法代碼如下:

public static void main(String[] args){        String s = "&nbsp&nbsp&nbsp&nbsp依照上海證券證券交易所發布的《關於證券公司創設白雲機場權證有關事項的\n" +                "通知》,光大證券股份有限公司向上海證券證券交易所申請登出白雲機場認沽權證並\n" +                "已獲核准,中國證券登記結算有限責任公司上海分公司已辦理相應登記手續。本\n" +                "公司此次獲准登出的白雲機場認沽權證數量為1,500萬份,該權證的條款與原白\n" +                "雲機場認沽權證(交易簡稱機場JTP1、交易代碼580998、行權代碼582998)的條\n" +                "款完全相同。\n" +                "&nbsp&nbsp&nbsp&nbsp\n";        Map<String, Integer> terms = LibSvmDataProcess.getModelTerms( "/Users/zhouyh/work/yanfa/xunlianji/UTF8/heji/terms.txt" );        String contentFeature = LibSvmDataProcess.getContentFeature( s, terms);        svm_model model = GetSvmModel.getSvmModelInstance().getModel( "/Users/zhouyh/work/yanfa/xunlianji/UTF8/heji/model.txt" );        int label = libSvmPredict(model, contentFeature);        System.out.println(label);    }
View Code

測試結果,財經類和我們選擇的語料類別也一致,如所示:

 

最後,此代碼僅為將libsvm如何在工程中實踐做了下流程走通,後續要在工程中使用,還需要做很多的調整。

Libsvm java工程實踐

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.