254254 Token(form = ' 네' , tag = ' XSN' , start = 1 , len = 1 ),
255255 Token(form = ' 둘' , tag = ' NR' , start = 3 , len = 1 ),
256256 Token(form = ' 이' , tag = ' JKS' , start = 4 , len = 1 ),
257- Token(form = ' 사귀' , tag = ' VV' , start = 6 , len = 2 ,
258- Token(form = ' 었' , tag = ' EP' , start = 7 len = 1 ,
259- Token(form = ' 대' , tag = ' EF' , start = 8 len = 1 ]
257+ Token(form = ' 사귀' , tag = ' VV' , start = 6 , len = 2 ) ,
258+ Token(form = ' 었' , tag = ' EP' , start = 7 , len = 1 ) ,
259+ Token(form = ' 대' , tag = ' EF' , start = 8 , len = 1 ) ]
260260
261261# v0.12.0 신기능
262262# 0.12.0 버전부터는 형태소를 결합하여 문장으로 복원하는 기능이 추가되었습니다.
@@ -265,18 +265,17 @@ True
265265>> > kiwi.join([(' 흙' , ' NNG' ), (' 이' , ' JKS' ), (' 묻' , ' VV' ), (' 어요' , ' EF' )])
266266' 흙이 묻어요'
267267
268- # v0.13.0 신기능
269- # 오타 교정 기능이 추가되었습니다.
268+ # 오타 교정 기능을 지원합니다.
270269# 간단한 오타를 교정하여, 사소한 오타 때문에 전체 분석 결과가 어긋나는 문제를 해결할 수 있습니다.
271- >> > kiwi = Kiwi(model_type = ' largest ' , typos = ' basic ' )
272- >> > kiwi.tokenize(' 외않됀대?' ) # 오타 교정 사용 시 로딩 시간이 5~10초 정도 소요됨
270+ >> > kiwi = Kiwi()
271+ >> > kiwi.tokenize(' 외않됀대?' , typos = ' basic ' )
273272[Token(form = ' 왜' , tag = ' MAG' , start = 0 , len = 1 ),
274273 Token(form = ' 안' , tag = ' MAG' , start = 1 , len = 1 ),
275274 Token(form = ' 되' , tag = ' VV' , start = 2 , len = 1 ),
276275 Token(form = ' ᆫ대' , tag = ' EF' , start = 2 , len = 2 ),
277276 Token(form = ' ?' , tag = ' SF' , start = 4 , len = 1 )]
278277
279- >> > kiwi.tokenize(' 장례희망이 뭐냐는 선섕님의 질문에 벙어리가 됫따' )
278+ >> > kiwi.tokenize(' 장례희망이 뭐냐는 선섕님의 질문에 벙어리가 됫따' , typos = ' basic ' )
280279[Token(form = ' 장래' , tag = ' NNG' , start = 0 , len = 2 ),
281280 Token(form = ' 희망' , tag = ' NNG' , start = 2 , len = 2 ),
282281 Token(form = ' 이' , tag = ' JKS' , start = 4 , len = 1 ),
@@ -296,20 +295,18 @@ True
296295
297296# 0.17.1에서는 연철에 대한 오타 교정이 추가되었습니다.
298297# 받침 + 초성 ㅇ/ㅎ 꼴을 잘못 이어적은 경우에 대해 교정이 가능합니다.
299- >> > kiwi = Kiwi(typos = ' continual' )
300- >> > kiwi.tokenize(' 오늘사무시레서' )
298+ >> > kiwi.tokenize(' 오늘사무시레서' , typos = ' continual' )
301299[Token(form = ' 오늘' , tag = ' NNG' , start = 0 , len = 2 ),
302300 Token(form = ' 사무실' , tag = ' NNG' , start = 2 , len = 4 ),
303301 Token(form = ' 에서' , tag = ' JKB' , start = 5 , len = 2 )]
304- >> > kiwi.tokenize(' 지가캤어요' )
302+ >> > kiwi.tokenize(' 지가캤어요' , typos = ' continual ' )
305303[Token(form = ' 지각' , tag = ' NNG' , start = 0 , len = 3 ),
306304 Token(form = ' 하' , tag = ' XSV' , start = 2 , len = 1 ),
307305 Token(form = ' 었' , tag = ' EP' , start = 2 , len = 1 ),
308306 Token(form = ' 어요' , tag = ' EF' , start = 3 , len = 2 )]
309307
310308# 기본 오타 교정에 연철 오타 교정까지 함께 사용할 수도 있습니다.
311- >> > kiwi = Kiwi(typos = ' basic_with_continual' )
312- >> > kiwi.tokenize(' 웨 지가캤니?' )
309+ >> > kiwi.tokenize(' 웨 지가캤니?' , typos = ' basic_with_continual' )
313310[Token(form = ' 왜' , tag = ' MAG' , start = 0 , len = 1 ),
314311 Token(form = ' 지각' , tag = ' NNG' , start = 2 , len = 3 ),
315312 Token(form = ' 하' , tag = ' XSV' , start = 4 , len = 1 ),
@@ -319,15 +316,13 @@ True
319316
320317# 0.19.0 버전에서는 장음화 오류(한 음절을 여러 음절로 늘려 적는 오류)가
321318# 포함된 텍스트를 교정하는 기능도 추가되었습니다.
322- >> > kiwi = Kiwi(typos = ' lengthening' )
323- >> > kiwi.tokenize(' 지이인짜 귀여워요' )
319+ >> > kiwi.tokenize(' 지이인짜 귀여워요' , typos = ' lengthening' )
324320[Token(form = ' 진짜' , tag = ' MAG' , start = 0 , len = 4 ),
325321 Token(form = ' 귀엽' , tag = ' VA-I' , start = 5 , len = 3 ),
326322 Token(form = ' 어요' , tag = ' EF' , start = 7 , len = 2 )]
327323
328324# 기본 오타 교정 + 연철 오타 교정 + 장음화 오류 교정을 함께 사용할 수도 있습니다.
329- >> > kiwi = Kiwi(typos = ' basic_with_continual_and_lengthening' )
330- >> > kiwi.tokenize(' 지이인짜 기여워요~ 마니 좋아해' )
325+ >> > kiwi.tokenize(' 지이인짜 기여워요~ 마니 좋아해' , typos = ' basic_with_continual_and_lengthening' )
331326[Token(form = ' 진짜' , tag = ' MAG' , start = 0 , len = 4 ),
332327 Token(form = ' 귀엽' , tag = ' VA-I' , start = 5 , len = 3 ),
333328 Token(form = ' 어요' , tag = ' EF' , start = 7 , len = 2 ),
@@ -494,6 +489,61 @@ print(kiwi.tokenize("약주 ᄒᆞᆫ 잔 드셧수과?", allowed_dialects='jeju
494489 Token(form = ' 엇' , tag = ' EP' , start = 10 , len = 1 ),
495490 Token(form = ' 수과' , tag = ' EF' , start = 11 , len = 2 , sense = 1 ),
496491 Token(form = ' ?' , tag = ' SF' , start = 13 , len = 1 )]
492+
493+ # 0.23.0 버전에서는 OOV 탐지 방식을 선택할 수 있는 옵션이 추가되었습니다.
494+ # oov_handling='rule'로 설정 시 이전 방식대로 길이에 기반한 규칙으로 OOV를 탐지합니다.
495+ >> > kiwi.tokenize(' 알리오올리오가 진짜 맛있는 집' , oov_handling = ' rule' )
496+ [Token(form = ' 알리' , tag = ' VV' , start = 0 , len = 2 ),
497+ Token(form = ' 오' , tag = ' EC' , start = 2 , len = 1 ),
498+ Token(form = ' 올리' , tag = ' VV' , start = 3 , len = 2 ),
499+ Token(form = ' 오' , tag = ' EC' , start = 5 , len = 1 ),
500+ Token(form = ' 가' , tag = ' JKS' , start = 6 , len = 1 ),
501+ Token(form = ' 진짜' , tag = ' MAG' , start = 8 , len = 2 ),
502+ Token(form = ' 맛있' , tag = ' VA' , start = 11 , len = 2 ),
503+ Token(form = ' 는' , tag = ' ETM' , start = 13 , len = 1 ),
504+ Token(form = ' 집' , tag = ' NNG' , start = 15 , len = 1 )]
505+
506+ # oov_handling='chr'로 설정 시 경량 문자모델에 기반하여 OOV를 탐지합니다. '알리오올리오'는 사전에 등재되지 않은 단어이지만 OOV로 잘 탐지되어서 잘못 쪼개지지 않고 하나의 형태소로 분석된 것을 볼 수 있습니다.
507+ # oov_handling의 기본값은 'chr'이므로, oov_handling은 생략해도 됩니다.
508+ >> > kiwi.tokenize(' 알리오올리오가 진짜 맛있는 집' , oov_handling = ' chr' )
509+ [Token(form = ' 알리오올리오' , tag = ' NNG' , start = 0 , len = 6 , oov = True ),
510+ Token(form = ' 가' , tag = ' JKS' , start = 6 , len = 1 ),
511+ Token(form = ' 진짜' , tag = ' MAG' , start = 8 , len = 2 ),
512+ Token(form = ' 맛있' , tag = ' VA' , start = 11 , len = 2 ),
513+ Token(form = ' 는' , tag = ' ETM' , start = 13 , len = 1 ),
514+ Token(form = ' 집' , tag = ' NNG' , start = 15 , len = 1 )]
515+
516+ # 종종 oov_handling='chr'만으로는 탐지가 어려운 경우도 있습니다.
517+ >> > kiwi.tokenize(' 엑소바이옴에서 나온 제품. 엑소바이옴은 화장품 회사로' , oov_handling = ' chr' )
518+ [Token(form = ' 엑소' , tag = ' NNP' , start = 0 , len = 2 ),
519+ Token(form = ' 바이오' , tag = ' NNG' , start = 2 , len = 3 ),
520+ Token(form = ' ᆷ' , tag = ' ETN' , start = 4 , len = 1 ),
521+ Token(form = ' 에서' , tag = ' JKB' , start = 5 , len = 2 ),
522+ Token(form = ' 나오' , tagg = ' VV' , start = 8 , len = 2 ),
523+ Token(form = ' ᆫ' , tag = ' ETM' , start = 9 , len = 1 ),
524+ Token(form = ' 제품' , tag = ' NNG' , start = 11 , len = 2 ),
525+ Token(form = ' .' , tag = ' SF' , start = 13 , len = 1 ),
526+ Token(form = ' 엑소' , tag = ' NNP' , start = 15 , len = 2 ),
527+ Tooken(form = ' 바이오' , tag = ' NNG' , start = 17 , len = 3 ),
528+ Token(form = ' ᆷ' , tag = ' ETN' , start = 19 , len = 1 ),
529+ Token(form = ' 은' , tag = ' JX' , start = 20 , len = 1 ),
530+ Token(form = ' 화장품' , tag = ' NNG' , start = 22 , len = 3 ),
531+ Token(form = ' 회사' , tagg = ' NNG' , start = 26 , len = 2 ),
532+ Token(form = ' 로' , tag = ' JKB' , start = 28 , len = 1 )]
533+
534+ # oov_handling='chr_freq'로 설정 시 OOV 탐지 시 빈도수 정보도 활용하게 됩니다. '엑소바이옴'이 반복적으로 등장하는 것을 보고 신조어일 것이라고 판단하게 됩니다.
535+ >> > kiwi.tokenize(' 엑소바이옴에서 나온 제품. 엑소바이옴은 화장품 회사로' , oov_handling = ' chr_freq' )
536+ [Token(form = ' 엑소바이옴' , tag = ' NNG' , start = 0 , len = 5 , oov = True ),
537+ Token(form = ' 에서' , tag = ' JKB' , start = 5 , len = 2 ),
538+ Token(form = ' 나오' , tag = ' VV' , start = 8 , len = 2 ),
539+ Token(form = ' ᆫ' , tag = ' ETM' , start = 9 , len = 1 ),
540+ Token(forrm = ' 제품' , tag = ' NNG' , start = 11 , len = 2 ),
541+ Token(form = ' .' , tag = ' SF' , start = 13 , len = 1 ),
542+ Token(form = ' 엑소바이옴' , tag = ' NNP' , start = 15 , len = 5 , oov = True ),
543+ Token(form = ' 은' , tag = ' JX' , start = 20 , len = 1 ),
544+ Token(form = ' 화장품' , tag = ' NNG' , start = 22 , len = 3 ),
545+ Token(form = ' 회사' , tag = ' NNG' , start = 26 , len = 2 ),
546+ Token(form = ' 로' , tag = ' JKB' , start = 28 , len = 1 )]
497547```
498548
499549## 시작하기
@@ -505,7 +555,7 @@ kiwi = Kiwi()
505555```
506556Kiwi 생성자는 다음과 같습니다.
507557``` python
508- Kiwi(num_workers = - 1 , model_path = None , load_default_dict = True , integrate_allomorph = True , model_type = None , typos = None , typo_cost_threshold = 2.5 , enabled_dialects = ' standard' )
558+ Kiwi(num_workers = - 1 , model_path = None , load_default_dict = True , integrate_allomorph = True , model_type = None , enabled_dialects = ' standard' )
509559```
510560* ` num_workers ` : 1 이상이면 단어 추출 및 형태소 분석에 멀티 코어를 활용하여 조금 더 빠른 속도로 분석을 진행할 수 있습니다. <br >
5115610인 경우 단일 코어만 활용합니다. num_workers가 -1이면 현재 환경에서 사용가능한 모든 코어를 활용합니다. <br >
@@ -514,8 +564,6 @@ Kiwi(num_workers=-1, model_path=None, load_default_dict=True, integrate_allomorp
514564* ` load_default_dict ` : 추가 사전을 로드합니다. 추가 사전은 위키백과의 표제어 타이틀로 구성되어 있습니다. 이 경우 로딩 및 분석 시간이 약간 증가하지만 다양한 고유명사를 좀 더 잘 잡아낼 수 있습니다. 분석 결과에 원치 않는 고유명사가 잡히는 것을 방지하려면 이를 False로 설정하십시오.
515565* ` integrate_allomorph ` : 어미 중, '아/어', '았/었'과 같이 동일하지만 음운 환경에 따라 형태가 달라지는 이형태들을 자동으로 통합합니다.
516566* ` model_type ` : 형태소 분석에 사용할 언어 모델을 지정합니다. ` 'cong' ` , ` 'cong-global' ` 중 하나를 선택할 수 있습니다. ` 'cong-global' ` 는 상대적으로 느리지만 먼 거리에 있는 형태소 간의 관계를 포착할 수 있습니다.
517- * `typos` : 형태소 분석 시 간단한 오타를 교정합니다. `None ` 으로 설정 시 교정을 수행하지 않습니다.
518- * `typo_cost_threshold` : 오타 교정을 허용할 최대 오타 비용을 설정합니다.
519567* ` enabled_dialects ` : 활성화할 방언을 설정합니다. 기본값은 ` Dialect.STANDARD ` 으로 이 경우 Kiwi는 표준어만을 분석할 수 있습니다.
520568
521569kiwi 객체는 크게 다음 세 종류의 작업을 수행할 수 있습니다.
@@ -710,8 +758,8 @@ kiwi을 생성하고, 사용자 사전에 단어를 추가하는 작업이 완
710758형태소 분석, 문장 분리, 띄어쓰기 교정, 문장 복원 등의 작업을 수행할 수 있습니다.
711759
712760``` python
713- Kiwi.tokenize(text, match_option, normalize_coda = False , z_coda = True , split_complex = False , compatible_jamo = False , saisiot = None , blocklist = None , allowed_dialects = ' standard' , dialect_cost = 3.0 )
714- Kiwi.analyze(text, top_n, match_option, normalize_coda = False , z_coda = True , split_complex = False , compatible_jamo = False , saisiot = None , blocklist = None , allowed_dialects = ' standard' , dialect_cost = 3.0 )
761+ Kiwi.tokenize(text, match_option, normalize_coda = False , z_coda = True , split_complex = False , compatible_jamo = False , saisiot = None , blocklist = None , allowed_dialects = ' standard' , dialect_cost = 3.0 , oov_handling = None , typos = None , typo_cost_threshold = 2.5 )
762+ Kiwi.analyze(text, top_n, match_option, normalize_coda = False , z_coda = True , split_complex = False , compatible_jamo = False , saisiot = None , blocklist = None , allowed_dialects = ' standard' , dialect_cost = 3.0 , oov_handling = None , typos = None , typo_cost_threshold = 2.5 )
715763Kiwi.split_into_sents(text, match_options = Match.ALL , normalize_coda = False , z_coda = True , split_complex = False , compatible_jamo = False , saisiot = None , blocklist = None , allowed_dialects = ' standard' , dialect_cost = 3.0 , return_tokens = False )
716764Kiwi.glue(text_chunks, insert_new_lines = None , return_space_insertions = False )
717765Kiwi.space(text, reset_whitespace = False )
@@ -720,7 +768,7 @@ Kiwi.template(format_str, cache=True)
720768```
721769
722770<details >
723- < summary>< code> tokenize(text, match_option = Match.ALL , normalize_coda = False , z_coda = True , split_complex = False , compatible_jamo = False , saisiot = None , blocklist = None , allowed_dialects = ' standard' , dialect_cost = 3.0 )< / code>< / summary>
771+ <summary ><code >tokenize(text, match_option=Match.ALL, normalize_coda=False, z_coda=True, split_complex=False, compatible_jamo=False, saisiot=None, blocklist=None, allowed_dialects='standard', dialect_cost=3.0, oov_handling=None, typos=None, typo_cost_threshold=2.5 )</code ></summary >
724772
725773입력된 ` text ` 를 형태소 분석하여 그 결과를 간단하게 반환합니다. 분석결과는 다음과 같이 ` Token ` 의 리스트 형태로 반환됩니다.
726774
@@ -746,7 +794,7 @@ Kiwi.template(format_str, cache=True)
746794<hr >
747795
748796<details >
749- < summary>< code> analyze(text, top_n = 1 , match_option = Match.ALL , normalize_coda = False , z_coda = True , split_complex = False , compatible_jamo = False , saisiot = None , blocklist = None , allowed_dialects = ' standard' , dialect_cost = 3.0 )< / code>< / summary>
797+ <summary ><code >analyze(text, top_n=1, match_option=Match.ALL, normalize_coda=False, z_coda=True, split_complex=False, compatible_jamo=False, saisiot=None, blocklist=None, allowed_dialects='standard', dialect_cost=3.0, oov_handling=None, typos=None, typo_cost_threshold=2.5 )</code ></summary >
750798
751799입력된 ` text ` 를 형태소 분석하여 그 결과를 반환합니다. 총 top_n개의 결과를 자세하게 출력합니다. 반환값은 다음과 같이 구성됩니다.
752800
0 commit comments