Skip to content

3.1 저장 (Serialization with Kryo)

Bugeun Kim edited this page Nov 27, 2018 · 3 revisions

여기에 수록된 사용법(1~3절)은 모두 1.x 버전의 사용법입니다. 최신 버전의 사용법은 Usage를 참고하십시오.

koalanlp-kryo 묶음이 필요합니다.

결과의 저장

Scala

import kr.bydelta.koala.data.Sentence
import kr.bydelta.koala.kryo._
import com.twitter.chill.{Input, Output}
import java.io.{FileOutputStream, FileInputStream}  

/** ... 의존구문 분석을 수행합니다 ... **/
val parsed = parser.parse(sent)

/** 저장 절차 **/
// 저장할 파일
val file = new File("target.path")
// 저장을 위해 Kryo 객체를 가져옵니다.
val kryo = KryoWrap.kryo
// 저장할 파일의 Output을 엽니다.
val output = new Output(new FileOutputStream(file))
// Kryo가 저장할 객체를 작성하게 합니다.
kryo.writeObject(output, parsed)
// Output을 닫습니다.
output.close()

/** 불러오는 절차 **/
// 불러오기 위해서 Input을 엽니다.
val input = new Input(new FileInputStream(file))
// Kryo 객체가 Sentence를 불러오게 합니다.
val sentence = kryo.readObject(input, classOf[Sentence])
// Input을 닫습니다.
input.close()

Java

Java는 다음과 같습니다.

import kr.bydelta.koala.data.Sentence;
import kr.bydelta.koala.kryo.*;
import com.twitter.chill.*;
import java.io.*;  

/** ... 의존구문 분석을 수행합니다 ... **/
Sentence parsed = parser.parse(sent);

/** 저장 절차 **/
// 저장할 파일
File file = new File("target.path");
// 저장을 위해 Kryo 객체를 가져옵니다.
Kryo kryo = KryoWrap.kryo();
// 저장할 파일의 Output을 엽니다.
Output output = new Output(new FileOutputStream(file));
// Kryo가 저장할 객체를 작성하게 합니다.
kryo.writeObject(output, parsed);
// Output을 닫습니다.
output.close();

/** 불러오는 절차 **/
// 불러오기 위해서 Input을 엽니다.
Input input = new Input(new FileInputStream(file));
// Kryo 객체가 Sentence를 불러오게 합니다.
Sentence sentence = kryo.readObject(input, classOf[Sentence]);
// Input을 닫습니다.
input.close();

사용자 사전의 저장

사용자정의 사전은 다음과 같이 저장합니다.

Scala

import kr.bydelta.koala.kryo._
import kr.bydelta.koala.kkma.Dictionary

/** 사전을 "dictionary.path" 파일에 저장합니다. **/
Dictionary >> new File("dictionary.path")

/** 다음 명령도 동일합니다.
 Dictionary saveTo new File("dictionary.path")
 * 또는 OutputStream에 저장할 수도 있습니다.
 Dictionary >> outputStream
 **/
 
/** 사전을 "dictionary.path" 파일로부터 불러옵니다. **/
Dictionary << new File("dictionary.path")

/** 다음 명령도 동일합니다.
 Dictionary readFrom new File("dictionary.path")
 * 또는 InputStream에서 불러올 수도 있습니다.
 Dictionary << inputStream
 **/

Java

Java는 다음과 같습니다.

import kr.bydelta.koala.kryo.DictionaryStream;
import kr.bydelta.koala.kkma.JavaDictionary;

// 저장/불러오기를 위해서 Stream Wrapper를 씌웁니다.
DictionaryStream stream = 
  new DictionaryStream(JavaDictionary.get());

/** 사전을 "dictionary.path" 파일에 저장합니다. **/
stream.saveTo(new File("dictionary.path"));

/* 또는 다음과 같이 OutputStream에 저장할 수도 있습니다.
stream.saveTo(outputStream)
 */
 
/** 사전을 "dictionary.path" 파일로부터 불러옵니다. **/
stream.readFrom(new File("dictionary.path"))

/* 또는 다음과 같이 InputStream에서 불러올 수도 있습니다.
stream.readFrom(inputStream)
 */