1/* 2 * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package jp.co.omronsoft.openwnn; 18 19/** 20 * The implementation class of JNI wrapper for dictionary. 21 * 22 * @author Copyright (C) 2008, 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved. 23 */ 24public class OpenWnnDictionaryImplJni { 25 /* 26 * DEFINITION OF CONSTANTS 27 */ 28 /** 29 * Constant about the approximate pattern (for JNI native library) 30 * 31 * @see jp.co.omronsoft.openwnn.WnnDictionary#APPROX_PATTERN_EN_TOUPPER 32 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#setApproxPattern 33 */ 34 public static final int APPROX_PATTERN_EN_TOUPPER = WnnDictionary.APPROX_PATTERN_EN_TOUPPER; 35 /** 36 * Constant about the approximate pattern (for JNI native library) 37 * 38 * @see jp.co.omronsoft.openwnn.WnnDictionary#APPROX_PATTERN_EN_TOLOWER 39 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#setApproxPattern 40 */ 41 public static final int APPROX_PATTERN_EN_TOLOWER = WnnDictionary.APPROX_PATTERN_EN_TOLOWER; 42 /** 43 * Constant about the approximate pattern (for JNI native library) 44 * 45 * @see jp.co.omronsoft.openwnn.WnnDictionary#APPROX_PATTERN_EN_QWERTY_NEAR 46 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#setApproxPattern 47 */ 48 public static final int APPROX_PATTERN_EN_QWERTY_NEAR = WnnDictionary.APPROX_PATTERN_EN_QWERTY_NEAR; 49 /** 50 * Constant about the approximate pattern (for JNI native library) 51 * 52 * @see jp.co.omronsoft.openwnn.WnnDictionary#APPROX_PATTERN_EN_QWERTY_NEAR_UPPER 53 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#setApproxPattern 54 */ 55 public static final int APPROX_PATTERN_EN_QWERTY_NEAR_UPPER = WnnDictionary.APPROX_PATTERN_EN_QWERTY_NEAR_UPPER; 56 /** 57 * Constant about the approximate pattern (for JNI native library) 58 * 59 * @see jp.co.omronsoft.openwnn.WnnDictionary#APPROX_PATTERN_JAJP_12KEY_NORMAL 60 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#setApproxPattern 61 */ 62 public static final int APPROX_PATTERN_JAJP_12KEY_NORMAL = WnnDictionary.APPROX_PATTERN_JAJP_12KEY_NORMAL; 63 64 /** 65 * Constant about the search operation (for JNI native library) 66 * 67 * @see jp.co.omronsoft.openwnn.WnnDictionary#SEARCH_EXACT 68 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#searchWord 69 */ 70 public static final int SEARCH_EXACT = WnnDictionary.SEARCH_EXACT; 71 /** 72 * Constant about the search operation (for JNI native library) 73 * 74 * @see jp.co.omronsoft.openwnn.WnnDictionary#SEARCH_PREFIX 75 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#searchWord 76 */ 77 public static final int SEARCH_PREFIX = WnnDictionary.SEARCH_PREFIX; 78 /** 79 * Constant about the search operation (for JNI native library) 80 * 81 * @see jp.co.omronsoft.openwnn.WnnDictionary#SEARCH_LINK 82 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#searchWord 83 */ 84 public static final int SEARCH_LINK = WnnDictionary.SEARCH_LINK; 85 86 /** 87 * Constant about the sort order (for JNI native library) 88 * 89 * @see jp.co.omronsoft.openwnn.WnnDictionary#ORDER_BY_FREQUENCY 90 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#searchWord 91 */ 92 public static final int ORDER_BY_FREQUENCY = WnnDictionary.ORDER_BY_FREQUENCY; 93 /** 94 * Constant about the sort order (for JNI native library) 95 * 96 * @see jp.co.omronsoft.openwnn.WnnDictionary#ORDER_BY_KEY 97 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#searchWord 98 */ 99 public static final int ORDER_BY_KEY = WnnDictionary.ORDER_BY_KEY; 100 101 /** 102 * Type of a part of speech (for JNI native library) 103 * @see jp.co.omronsoft.openwnn.WnnDictionary#POS_TYPE_V1 104 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getLeftPartOfSpeechSpecifiedType 105 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getRightPartOfSpeechSpecifiedType 106 */ 107 public static final int POS_TYPE_V1 = WnnDictionary.POS_TYPE_V1; 108 /** 109 * Type of a part of speech (for JNI native library) 110 * @see jp.co.omronsoft.openwnn.WnnDictionary#POS_TYPE_V2 111 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getLeftPartOfSpeechSpecifiedType 112 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getRightPartOfSpeechSpecifiedType 113 */ 114 public static final int POS_TYPE_V2 = WnnDictionary.POS_TYPE_V2; 115 /** 116 * Type of a part of speech (for JNI native library) 117 * @see jp.co.omronsoft.openwnn.WnnDictionary#POS_TYPE_V3 118 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getLeftPartOfSpeechSpecifiedType 119 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getRightPartOfSpeechSpecifiedType 120 */ 121 public static final int POS_TYPE_V3 = WnnDictionary.POS_TYPE_V3; 122 /** 123 * Type of a part of speech (for JNI native library) 124 * @see jp.co.omronsoft.openwnn.WnnDictionary#POS_TYPE_BUNTOU 125 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getLeftPartOfSpeechSpecifiedType 126 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getRightPartOfSpeechSpecifiedType 127 */ 128 public static final int POS_TYPE_BUNTOU = WnnDictionary.POS_TYPE_BUNTOU; 129 /** 130 * Type of a part of speech (for JNI native library) 131 * @see jp.co.omronsoft.openwnn.WnnDictionary#POS_TYPE_TANKANJI 132 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getLeftPartOfSpeechSpecifiedType 133 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getRightPartOfSpeechSpecifiedType 134 */ 135 public static final int POS_TYPE_TANKANJI = WnnDictionary.POS_TYPE_TANKANJI; 136 /** 137 * Type of a part of speech (for JNI native library) 138 * @see jp.co.omronsoft.openwnn.WnnDictionary#POS_TYPE_SUUJI 139 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getLeftPartOfSpeechSpecifiedType 140 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getRightPartOfSpeechSpecifiedType 141 */ 142 public static final int POS_TYPE_SUUJI = WnnDictionary.POS_TYPE_SUUJI; 143 /** 144 * Type of a part of speech (for JNI native library) 145 * @see jp.co.omronsoft.openwnn.WnnDictionary#POS_TYPE_MEISI 146 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getLeftPartOfSpeechSpecifiedType 147 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getRightPartOfSpeechSpecifiedType 148 */ 149 public static final int POS_TYPE_MEISI = WnnDictionary.POS_TYPE_MEISI; 150 /** 151 * Type of a part of speech (for JNI native library) 152 * @see jp.co.omronsoft.openwnn.WnnDictionary#POS_TYPE_JINMEI 153 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getLeftPartOfSpeechSpecifiedType 154 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getRightPartOfSpeechSpecifiedType 155 */ 156 public static final int POS_TYPE_JINMEI = WnnDictionary.POS_TYPE_JINMEI; 157 /** 158 * Type of a part of speech (for JNI native library) 159 * @see jp.co.omronsoft.openwnn.WnnDictionary#POS_TYPE_CHIMEI 160 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getLeftPartOfSpeechSpecifiedType 161 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getRightPartOfSpeechSpecifiedType 162 */ 163 public static final int POS_TYPE_CHIMEI = WnnDictionary.POS_TYPE_CHIMEI; 164 /** 165 * Type of a part of speech (for JNI native library) 166 * @see jp.co.omronsoft.openwnn.WnnDictionary#POS_TYPE_KIGOU 167 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getLeftPartOfSpeechSpecifiedType 168 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getRightPartOfSpeechSpecifiedType 169 */ 170 public static final int POS_TYPE_KIGOU = WnnDictionary.POS_TYPE_KIGOU; 171 172 /* 173 * METHODS 174 */ 175 /** 176 * Create a internal work area. 177 * A internal work area is allocated dynamically, and the specified dictionary library is loaded. 178 * 179 * @param dicLibPath The path of the dictionary library file 180 * @return The internal work area or null 181 */ 182 public static final native long createWnnWork( String dicLibPath ); 183 184 /** 185 * Free the internal work area. 186 * The specified work area and the loaded dictionary library is free. 187 * 188 * @param work The internal work area 189 * @return 0 if processing is successful; <0 if an error occur 190 */ 191 public static final native int freeWnnWork( long work ); 192 193 /** 194 * Clear all dictionary information. 195 * 196 * @see jp.co.omronsoft.openwnn.WnnDictionary#clearDictionary 197 * @param work The internal work area 198 * @return 0 if processing is successful; <0 if an error occur 199 */ 200 public static final native int clearDictionaryParameters( long work ); 201 202 /** 203 * Set a dictionary information. 204 * 205 * @see jp.co.omronsoft.openwnn.WnnDictionary#setDictionary 206 * @param work The internal work area 207 * @param index The index of dictionary 208 * @param base The base frequency or -1 209 * @param high The maximum frequency or -1 210 * @return 0 if processing is successful; <0 otherwise 211 */ 212 public static final native int setDictionaryParameter( long work, int index, int base, int high ); 213 214 /** 215 * Search a word from dictionaries. 216 * 217 * @see jp.co.omronsoft.openwnn.WnnDictionary#searchWord 218 * @param work The internal work area 219 * @param operation The search operation (see "Constant about the search operation") 220 * @see jp.co.omronsoft.openwnn.WnnDictionary#SEARCH_EXACT 221 * @see jp.co.omronsoft.openwnn.WnnDictionary#SEARCH_PREFIX 222 * @param order The sort order (see "Constant about the sort order") 223 * @see jp.co.omronsoft.openwnn.WnnDictionary#ORDER_BY_FREQUENCY 224 * @see jp.co.omronsoft.openwnn.WnnDictionary#ORDER_BY_KEY 225 * @param keyString The key string 226 * @return 0 if no result is found; 1 if a result is found; <0 if an error occur 227 * 228 */ 229 public static final native int searchWord(long work, int operation, int order, String keyString ); 230 231 /** 232 * Retrieve a word information. 233 * A word information is stored to the internal work area. To retrieve a detail information, 234 * use {@code getStroke()}, {@code getCandidate()}, {@code getFreqeuency(),} or other {@code get...()} method. 235 * 236 * @see jp.co.omronsoft.openwnn.WnnDictionary#getNextWord 237 * @param work The internal work area 238 * @param length >0 if only the result of specified length is retrieved; 0 if no condition exist 239 * @return 0 if no result is retrieved; >0 if a result is retrieved; <0 if an error occur 240 */ 241 public static final native int getNextWord( long work, int length ); 242 243 /** 244 * Retrieve the key string from the current word information. 245 * 246 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getNextWord 247 * @param work The internal work area 248 * @return The Key string 249 */ 250 public static final native String getStroke( long work ); 251 252 /** 253 * Retrieve the candidate string from the current word information. 254 * 255 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getNextWord 256 * @param work The internal work area 257 * @return The candidate string 258 */ 259 public static final native String getCandidate( long work ); 260 261 /** 262 * Retrieve the frequency from the current word information. 263 * 264 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#getNextWord 265 * @param work The internal work area 266 * @return The frequency 267 */ 268 public static final native int getFrequency( long work ); 269 270 /** 271 * Retrieve the part of speech at left side from the current word information. 272 * 273 * @param work The internal work area 274 * @return The part of speech 275 */ 276 public static final native int getLeftPartOfSpeech( long work ); 277 278 /** 279 * Retrieve the part of speech at right side from the current word information. 280 * 281 * @param work The internal work area 282 * @return The part of speech 283 */ 284 public static final native int getRightPartOfSpeech( long work ); 285 286 /** 287 * Clear approximate patterns. 288 * 289 * @see jp.co.omronsoft.openwnn.WnnDictionary#clearApproxPattern 290 * @param work The internal work area. 291 */ 292 public static final native void clearApproxPatterns( long work ); 293 294 /** 295 * Set a approximate pattern. 296 * 297 * @see jp.co.omronsoft.openwnn.WnnDictionary#setApproxPattern 298 * @param work The internal work area 299 * @param src The string (before) 300 * @param dst The string (after) 301 * @return 0 if processing is successful; <0 if an error occur 302 */ 303 public static final native int setApproxPattern( long work, String src, String dst ); 304 305 /** 306 * Set a predefined approximate pattern. 307 * 308 * @see jp.co.omronsoft.openwnn.WnnDictionary#setApproxPattern 309 * @param work The internal work area 310 * @param approxPattern The index of predefined approximate pattern (See "Constant about the approximate pattern") 311 * @see jp.co.omronsoft.openwnn.WnnDictionary#APPROX_PATTERN_EN_TOUPPER 312 * @see jp.co.omronsoft.openwnn.WnnDictionary#APPROX_PATTERN_EN_TOLOWER 313 * @see jp.co.omronsoft.openwnn.WnnDictionary#APPROX_PATTERN_EN_QWERTY_NEAR 314 * @see jp.co.omronsoft.openwnn.WnnDictionary#APPROX_PATTERN_EN_QWERTY_NEAR_UPPER 315 * @return 0 if processing is successful; <0 if an error occur 316 */ 317 public static final native int setApproxPattern( long work, int approxPattern ); 318 319 /** 320 * Get the specified approximate pattern. 321 * @param work The internal work area 322 * @param src The string (before) 323 * @return The string array (after) 324 */ 325 public static final native String[] getApproxPattern( long work, String src ); 326 327 /** 328 * Clear the current word information. 329 * 330 * @param work The internal work area 331 */ 332 public static final native void clearResult( long work ); 333 334 /** 335 * Set the part of speech at left side to the current word information. 336 * 337 * @param work The internal work area 338 * @param partOfSpeech The part of speech 339 * @return 0 if processing is successful; <0 if an error occur 340 * 341 */ 342 public static final native int setLeftPartOfSpeech( long work, int partOfSpeech ); 343 /** 344 * Set the part of speech at right side to the current word information. 345 * 346 * @param work The internal work area 347 * @param partOfSpeech The part of speech 348 * @return 0 if processing is successful; <0 if an error occur 349 * 350 */ 351 public static final native int setRightPartOfSpeech( long work, int partOfSpeech ); 352 353 /** 354 * Set the key string to the current word information. 355 * 356 * @param work The internal work area 357 * @param stroke The key string 358 * @return 0 if processing is successful; <0 if an error occur 359 * 360 */ 361 public static final native int setStroke( long work, String stroke ); 362 /** 363 * Set the candidate string to the current word information. 364 * 365 * @param work The internal work area 366 * @param candidate The candidate string 367 * @return 0 if processing is successful; <0 if an error occur 368 * 369 */ 370 public static final native int setCandidate( long work, String candidate ); 371 372 /** 373 * Set the previous word information from the current word information. 374 * 375 * @param work The internal work area 376 * @return 0 if processing is successful; <0 if an error occur 377 */ 378 public static final native int selectWord( long work ); 379 380 /** 381 * Retrieve the connect array 382 * 383 * @param work The internal work area 384 * @param leftPartOfSpeech The part of speech at left side 385 * @return The connect array 386 */ 387 public static final native byte[] getConnectArray( long work, int leftPartOfSpeech ); 388 389 /** 390 * Retrieve the number of the part of speeches at left side. 391 * 392 * @return The number 393 */ 394 public static final native int getNumberOfLeftPOS( long work ); 395 /** 396 * Retrieve the number of the part of speeches at right side. 397 * 398 * @return The number 399 */ 400 public static final native int getNumberOfRightPOS( long work ); 401 402 /** 403 * Retrieve the specified part of speech at left side. 404 * 405 * @param work The internal work area 406 * @param type The type of a part of speech 407 * @return 0 if type is not found; <0 if an error occur; >0 The part of speech 408 */ 409 public static final native int getLeftPartOfSpeechSpecifiedType( long work, int type ); 410 411 /** 412 * Retrieve the specified part of speech at right side. 413 * 414 * @param work The internal work area 415 * @param type The type of a part of speech 416 * @return 0 if type is not found; <0 if an error occur; >0 The part of speech 417 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#POS_TYPE_V1 418 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#POS_TYPE_V2 419 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#POS_TYPE_V3 420 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#POS_TYPE_BUNTOU 421 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#POS_TYPE_TANKANJI 422 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#POS_TYPE_SUUJI 423 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#POS_TYPE_MEISI 424 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#POS_TYPE_JINMEI 425 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#POS_TYPE_CHIMEI 426 * @see jp.co.omronsoft.openwnn.OpenWnnDictionaryImplJni#POS_TYPE_KIGOU 427 */ 428 public static final native int getRightPartOfSpeechSpecifiedType( long work, int type ); 429 430 /** 431 * Create the string array that is used by operation of query 432 * 433 * @param work The internal work area 434 * @param keyString The key string 435 * @param maxBindsOfQuery The maximum number of binds of query 436 * @param maxPatternOfApprox The maximum number of approximate patterns per character 437 * @return The string array for binding 438 */ 439 public static final native String[] createBindArray( long work, String keyString, int maxBindsOfQuery, int maxPatternOfApprox ); 440 441 /** 442 * Create the string which used query parameter 443 * 444 * @param work The internal work area 445 * @param maxBindsOfQuery The maximum number of binds of query 446 * @param maxPatternOfApprox The maximum number of approximate patterns per character 447 * @param keyColumnName The name of the key column 448 * @return The string for querying 449 */ 450 public static final native String createQueryStringBase( long work, int maxBindsOfQuery, int maxPatternOfApprox, String keyColumnName ); 451} 452