小碼哥

          誰謂河廣,一葦杭之

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            7 隨筆 :: 17 文章 :: 74 評論 :: 0 Trackbacks

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          訂閱Canvas

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          聲明:ICTCLAS以及我修改ICTCLAS JNI For Java的版權均歸原作者所有,未經原作者允許,請勿作其它商業用途
          首先下載ICTCLAS Beta版本公開源代碼:點擊下載
          我使用的是Visual studio 2005開發環境,源碼使用VC6開發的,現在把這個工程轉移到VS2005下。我使用的方法比較笨,基本上是屬于體力+暴力型的,不過自己覺得爽就可以了
          在VS2005里新建Win32項目FREEICTCLAS,在application Settings選項里選中Dll和Empty Project,然后新建以下過濾器(New Filter),并且將原項目的源碼及其目錄結構copy到現在的win32項目的目錄下(過濾器和項目目錄示意圖)
          示意圖(點擊前面+號展開)

          這樣這個win32工程基本就建完了。
          觀察ICTCLAS源代碼后編寫以下帶有native聲明的方法的java類,只實現了頭兩個方法,第三個暫未實現,與ICTCLAS接口基本保持一致
          代碼如下:
          FreeICTCLAS.java(點擊+展開)
          然后在命令行輸入Javac FreeICTCLAS.java編譯FreeICTCLAS.java
          生成FreeICTCLAS.class文件后,再使用javah FreeICTCLAS生成FreeICTCLAS.h,代碼如下:
          /* DO NOT EDIT THIS FILE - it is machine generated */
          #include 
          <jni.h>
          /* Header for class FreeICTCLAS */

          #ifndef _Included_FreeICTCLAS
          #define _Included_FreeICTCLAS
          #ifdef __cplusplus
          extern 
          "C" {
          #endif
          /*
           * Class:     FreeICTCLAS
           * Method:    FreeICTCLAS_Init
           * Signature: (II)Z
           
          */

          JNIEXPORT jboolean JNICALL Java_FreeICTCLAS_FreeICTCLAS_1Init
            (JNIEnv 
          *, jobject, jint, jint);

          /*
           * Class:     FreeICTCLAS
           * Method:    FreeICTCLAS_ParagraphProcess
           * Signature: (Ljava/lang/String;)Ljava/lang/String;
           
          */

          JNIEXPORT jstring JNICALL Java_FreeICTCLAS_FreeICTCLAS_1ParagraphProcess
            (JNIEnv 
          *, jobject, jstring);

          /*
           * Class:     FreeICTCLAS
           * Method:    FreeICTCLAS_FileProcess
           * Signature: (Ljava/lang/String;Ljava/lang/String;)Z
           
          */

          JNIEXPORT jboolean JNICALL Java_FreeICTCLAS_FreeICTCLAS_1FileProcess
            (JNIEnv 
          *, jobject, jstring, jstring);

          #ifdef __cplusplus
          }

          #endif
          #endif
          將FreeICTCLAS.h拷貝到win32項目所在目錄中,再將其添加到項目中,接下來就是編寫FreeICTCLAS.cpp實現頭文件里方法
          主要代碼如下:
          #include "FreeICTCLAS.h"
          #include 
          "util.h"
          #include 
          "globeVar.h"
          #include 
          <string.h>
          #include 
          <stdlib.h>
          /*
          * Class:     FreeICTCLAS
          * Method:    FreeICTCLAS_Init
          * Signature: (II)Z
          */

          JNIEXPORT jboolean JNICALL Java_FreeICTCLAS_FreeICTCLAS_1Init
          (JNIEnv 
          *env, jobject obj, jint OperateType, jint OutputFormat)
          {
              m_ICTCLAS.m_nOperateType 
          = OperateType;
              m_ICTCLAS.m_nOutputFormat 
          = OutputFormat;
              
          return JNI_TRUE;
          }

          /*
          * Class:     FreeICTCLAS
          * Method:    FreeICTCLAS_ParagraphProcess
          * Signature: (Ljava/lang/String;)Ljava/lang/String;
          */

          JNIEXPORT jstring JNICALL Java_FreeICTCLAS_FreeICTCLAS_1ParagraphProcess
          (JNIEnv 
          *env, jobject obj, jstring sParagraph)
          {
              
          char *sResult,*sSource;
              sSource 
          = jstringTochar(env, sParagraph);
              
          if(m_ICTCLAS.m_nOutputFormat!=2)
                  sResult
          =new char [(strlen(sSource)+13)*3];
              
          else
                  sResult
          =new char [(strlen(sSource)+13)*50];
              
              
          if(!m_ICTCLAS.ParagraphProcessing(sSource,sResult))
                  exit(
          1);
              
          else
                  
          return chartoJstring(env,sResult);
          }

          /*
          * Class:     FreeICTCLAS
          * Method:    FreeICTCLAS_FileProcess
          * Signature: (Ljava/lang/String;Ljava/lang/String;)Z
          */

          JNIEXPORT jboolean JNICALL Java_FreeICTCLAS_FreeICTCLAS_1FileProcess
          (JNIEnv 
          *env, jobject obj, jstring sSourceFilename, jstring sResultFilename)
          {
              
          return JNI_TRUE;
          }

          編譯項目,在release目錄中找到FreeICTCLAS.dll,將其拷貝到FreeICTCLAS.class所在的目錄中
          現在運行java FreeICTCLAS即可看到中文分詞的結果啦

          怎么把ICTCLAS JNI for Java添加到eclipse項目中去?下次寫吧。
          當你看到這句話的時候,你可以直接發郵件向我索要win32項目和eclipse項目 
          BlogJava后臺編輯器不好用,^_^
          posted on 2008-05-06 14:40 小碼哥 閱讀(1134) 評論(1)  編輯  收藏 所屬分類: JNI技術學習筆記Java語言學習信息檢索

          評論

          # re: 打造ICTCLAS JNI For Java 2013-07-11 10:23 sirlipeng
          可否將編譯好的FreeICTCLAS.dll發送給我一份呢?謝謝
          sirlipeng@gmail.com  回復  更多評論
            


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


          網站導航:
           
          主站蜘蛛池模板: 闸北区| 广水市| 宁国市| 镇安县| 雷州市| 喀什市| 黑龙江省| 沂水县| 沐川县| 锡林浩特市| 大名县| 黄陵县| 昌平区| 海兴县| 新兴县| 自贡市| 凤台县| 阿克苏市| 丹阳市| 宁武县| 同心县| 拉萨市| 彝良县| 延吉市| 临沧市| 淳安县| 长沙市| 宜君县| 积石山| 老河口市| 营山县| 堆龙德庆县| 无极县| 城市| 建阳市| 平潭县| 长汀县| 溧阳市| 固始县| 顺昌县| 呼图壁县|