Skip to content

python-crfsuite를 이용한 한국어 띄어쓰기 교정기

Notifications You must be signed in to change notification settings

lovit/pycrfsuite_spacing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pycrfsuite를 이용한 한국어 띄어쓰기 교정

Usage

Character feature transformation

주어진 문장을 feature 로 변환하기 위해 다음의 두 가지 클래스를 import 합니다.

from pycrfsuite_spacing import TemplateGenerator
from pycrfsuite_spacing import CharacterFeatureTransformer

TemplateGenerator와 FeatureTransformer를 이용하면 띄어쓰기가 포함된 문장을 다음과 같이 template에 의하여 정의되는 character feature로 변환해 줍니다. 두 칸 이상의 띄어쓰기는 없다고 가정합니다.

to_feature = CharacterFeatureTransformer(
    TemplateGenerator(
        begin=-2,
        end=2,
        min_range_length=3,
        max_range_length=3)
    )

x, y = sent_to_xy('이것도 너프해 보시지', to_feature)
pprint(x)
print(y)

결과는 아래와 같습니다.

[['X[0,2]=이것도'],
 ['X[-1,1]=이것도', 'X[0,2]=것도너'],
 ['X[-2,0]=이것도', 'X[-1,1]=것도너', 'X[0,2]=도너프'],
 ['X[-2,0]=것도너', 'X[-1,1]=도너프', 'X[0,2]=너프해'],
 ['X[-2,0]=도너프', 'X[-1,1]=너프해', 'X[0,2]=프해보'],
 ['X[-2,0]=너프해', 'X[-1,1]=프해보', 'X[0,2]=해보시'],
 ['X[-2,0]=프해보', 'X[-1,1]=해보시', 'X[0,2]=보시지'],
 ['X[-2,0]=해보시', 'X[-1,1]=보시지'],
 ['X[-2,0]=보시지']]
['0', '0', '1', '0', '0', '1', '0', '0', '1']

Train model

모델의 학습은 다음과 같습니다. docs 는 ['문장1', '문장 2', ... ] 와 같은 list of str (like) 입니다. 학습 시 반드시 모델 파일명을 입력해야 합니다.

from pycrfsuite_spacing import PyCRFSuiteSpacing

model_path = 'demo_model.crfsuite'
correct = PyCRFSuiteSpacing(to_feature)
correct.train(docs, model_path)

L1 regularization 을 이용할 수 있습니다. L1, L2 regularization cost 는 default 0 과 1.0 입니다. l2_cost = 0, l1_cost > 0 으로 설정하면 L1 CRF 를 이용할 수 있습니다.

from pycrfsuite_spacing import PyCRFSuiteSpacing

model_path = 'demo_model.crfsuite'
correct = PyCRFSuiteSpacing(
    to_feature=to_feature,
    l1_cost = 0,
    l2_cost = 1.0,
)
correct.train(docs, model_path)

Max iterations 와 verbose mode 를 조절할 수 있습니다. 테스트를 위해서 verbose on 과 적은 수의 max_iterations 을 이용할 수 있습니다.

from pycrfsuite_spacing import PyCRFSuiteSpacing

model_path = 'demo_model.crfsuite'
correct = PyCRFSuiteSpacing(
    to_feature=to_feature,
    verbose = True,
    max_iterations = 50
)
correct.train(docs, model_path)

Load model

학습된 모델을 불러올 수 있습니다.

model_path = 'demo_model.crfsuite'
correct = PyCRFSuiteSpacing(to_feature)
correct.load_tagger(model_path)

Correction

학습된 모델 역시 callable 하며, 다음과 같이 띄어쓰기 교정이 됩니다.

correct('이건진짜좋은영화라라랜드진짜좋은영화')
# '이건 진짜 좋은 영화 라라랜드 진짜 좋은 영화'

Requires

  • python-crfsuite >= 0.9.2

License

python-crfsuite is licensed under MIT license. CRFsuite C/C++ library is licensed under BSD license. Therefore pycrfsuite_spacing package is licensed under MIT license same as package B is.

About

python-crfsuite를 이용한 한국어 띄어쓰기 교정기

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages