https://github.com/bab2min/kiwipiepy
Python3 API -Dokument: https://bab2min.github.io/kiwipiepy
Ab Kiwi 0,5 bieten wir API für Python3 an. Sie können dieses Projekt erstellen und das Modul in Python importieren oder das bereits gebaute Kiwipiepy -Modul mit PIP installieren.
$ pip install --upgrade pip
$ pip install kiwipiepyoder
$ pip3 install --upgrade pip
$ pip3 install kiwipiepyDerzeit unterstützen Kiwipiepy -Pakete Windows OS und Linux sowie MacOS 10.12 oder höher mit Vista -Versionen.
In einer Umgebung, in der eine binäre Verteilung wie macOS M1 nicht bereitgestellt wird , ist für CMake3.12 oder höher für die Kompilierung des Quellcodes bei der Installation erforderlich .
$ pip install cmake
$ pip install --upgrade pip
$ pip install kiwipiepy Aus der 0,6.3 -Version von Kiwi unterstützen wir die interaktive Schnittstelle unmittelbar nach der Installation. Nachdem die Installation über den PIP abgeschlossen ist, können Sie sie wie folgt ausführen, um den morphologischen Analysator zu testen.
$ python -m kiwipiepyoder
$ python3 -m kiwipiepyWenn die interaktive Schnittstelle beginnt, können Sie den gewünschten Satz eingeben, um die Ergebnisse der morphologischen Analyse zu überprüfen.
>> 안녕 ?
[ Token ( form = '안녕' , tag = 'IC' , start = 0 , len = 2 ), Token ( form = '?' , tag = 'SF' , start = 2 , len = 3 )]Um die Schnittstelle zu verlassen, drücken Sie Strg + C.
Das in Kiwi verwendete Teil -der -ART -Tag basiert auf den Teilen des Sejong Malmachi, und einige Tags werden verbessert und verwendet. Hier finden Sie das detaillierte Tag -System.
> >> from kiwipiepy import Kiwi
> >> kiwi = Kiwi ()
# tokenize 함수로 형태소 분석 결과를 얻을 수 있습니다.
> >> kiwi . tokenize ( "안녕하세요 형태소 분석기 키위입니다." )
[ Token ( form = '안녕' , tag = 'NNG' , start = 0 , len = 2 ),
Token ( form = '하' , tag = 'XSA' , start = 2 , len = 1 ),
Token ( form = '시' , tag = 'EP' , start = 4 , len = 1 ),
Token ( form = '어요' , tag = 'EC' , start = 3 , len = 2 ),
Token ( form = '형태소' , tag = 'NNG' , start = 6 , len = 3 ),
Token ( form = '분석' , tag = 'NNG' , start = 10 , len = 2 ),
Token ( form = '기' , tag = 'NNG' , start = 12 , len = 1 ),
Token ( form = '키위' , tag = 'NNG' , start = 14 , len = 2 ),
Token ( form = '이' , tag = 'VCP' , start = 16 , len = 1 ),
Token ( form = 'ᆸ니다' , tag = 'EF' , start = 17 , len = 2 ),
Token ( form = '.' , tag = 'SF' , start = 19 , len = 1 )]
# normalize_coda 옵션을 사용하면
# 덧붙은 받침 때문에 분석이 깨지는 경우를 방지할 수 있습니다.
> >> kiwi . tokenize ( "ㅋㅋㅋ 이런 것도 분석이 될까욬ㅋㅋ?" , normalize_coda = True )
[ Token ( form = 'ㅋㅋㅋ' , tag = 'SW' , start = 0 , len = 3 ),
Token ( form = '이런' , tag = 'MM' , start = 4 , len = 2 ),
Token ( form = '것' , tag = 'NNB' , start = 7 , len = 1 ),
Token ( form = '도' , tag = 'JX' , start = 8 , len = 1 ),
Token ( form = '분석' , tag = 'NNG' , start = 10 , len = 2 ),
Token ( form = '이' , tag = 'JKS' , start = 12 , len = 1 ),
Token ( form = '되' , tag = 'VV' , start = 14 , len = 1 ),
Token ( form = 'ᆯ까요' , tag = 'EC' , start = 15 , len = 2 ),
Token ( form = 'ㅋㅋㅋ' , tag = 'SW' , start = 17 , len = 2 ),
Token ( form = '?' , tag = 'SF' , start = 19 , len = 1 )]
# 불용어 관리를 위한 Stopwords 클래스도 제공합니다.
> >> from kiwipiepy . utils import Stopwords
> >> stopwords = Stopwords ()
> >> kiwi . tokenize ( "분석 결과에서 불용어만 제외하고 출력할 수도 있다." , stopwords = stopwords )
[ Token ( form = '분석' , tag = 'NNG' , start = 0 , len = 2 ),
Token ( form = '결과' , tag = 'NNG' , start = 3 , len = 2 ),
Token ( form = '불' , tag = 'XPN' , start = 8 , len = 1 ),
Token ( form = '용어' , tag = 'NNG' , start = 9 , len = 2 ),
Token ( form = '제외' , tag = 'NNG' , start = 13 , len = 2 ),
Token ( form = '출력' , tag = 'NNG' , start = 18 , len = 2 )]
# add, remove 메소드를 이용해 불용어 목록에 단어를 추가하거나 삭제할 수도 있습니다.
> >> stopwords . add (( '결과' , 'NNG' ))
> >> kiwi . tokenize ( "분석 결과에서 불용어만 제외하고 출력할 수도 있다." , stopwords = stopwords )
[ Token ( form = '분석' , tag = 'NNG' , start = 0 , len = 2 ),
Token ( form = '불' , tag = 'XPN' , start = 8 , len = 1 ),
Token ( form = '용어' , tag = 'NNG' , start = 9 , len = 2 ),
Token ( form = '제외' , tag = 'NNG' , start = 13 , len = 2 ),
Token ( form = '출력' , tag = 'NNG' , start = 18 , len = 2 )]
> >> tokens = kiwi . tokenize ( "각 토큰은 여러 정보를 담고 있습니다." )
> >> tokens [ 0 ]
Token ( form = '각' , tag = 'MM' , start = 0 , len = 1 )
> >> tokens [ 0 ]. form # 형태소의 형태 정보
'각'
> >> tokens [ 0 ]. tag # 형태소의 품사 정보
'MM'
> >> tokens [ 0 ]. start # 시작 및 끝 지점 (문자 단위)
0
> >> tokens [ 0 ]. end
1
> >> tokens [ 0 ]. word_position # 현 문장에서의 어절 번호
0
> >> tokens [ 0 ]. sent_position # 형태소가 속한 문장 번호
0
> >> tokens [ 0 ]. line_number # 형태소가 속한 줄의 번호
0
# 문장 분리 기능도 지원합니다.
> >> kiwi . split_into_sents ( "여러 문장으로 구성된 텍스트네 이걸 분리해줘" )
[ Sentence ( text = '여러 문장으로 구성된 텍스트네' , start = 0 , end = 16 , tokens = None ),
Sentence ( text = '이걸 분리해줘' , start = 17 , end = 24 , tokens = None )]
# 문장 분리와 형태소 분석을 함께 수행할 수도 있습니다.
> >> kiwi . split_into_sents ( "여러 문장으로 구성된 텍스트네 이걸 분리해줘" , return_tokens = True )
[ Sentence ( text = '여러 문장으로 구성된 텍스트네' , start = 0 , end = 16 , tokens = [
Token ( form = '여러' , tag = 'MM' , start = 0 , len = 2 ),
Token ( form = '문장' , tag = 'NNG' , start = 3 , len = 2 ),
Token ( form = '으로' , tag = 'JKB' , start = 5 , len = 2 ),
Token ( form = '구성' , tag = 'NNG' , start = 8 , len = 2 ),
Token ( form = '되' , tag = 'XSV' , start = 10 , len = 1 ),
Token ( form = 'ᆫ' , tag = 'ETM' , start = 11 , len = 0 ),
Token ( form = '텍스트' , tag = 'NNG' , start = 12 , len = 3 ),
Token ( form = '이' , tag = 'VCP' , start = 15 , len = 1 ),
Token ( form = '네' , tag = 'EF' , start = 15 , len = 1 )]),
Sentence ( text = '이걸 분리해줘' , start = 17 , end = 24 , tokens = [
Token ( form = '이거' , tag = 'NP' , start = 17 , len = 2 ),
Token ( form = 'ᆯ' , tag = 'JKO' , start = 19 , len = 0 ),
Token ( form = '분리' , tag = 'NNG' , start = 20 , len = 2 ),
Token ( form = '하' , tag = 'XSV' , start = 22 , len = 1 ),
Token ( form = '어' , tag = 'EC' , start = 22 , len = 1 ),
Token ( form = '주' , tag = 'VX' , start = 23 , len = 1 ),
Token ( form = '어' , tag = 'EF' , start = 23 , len = 1 )])]
# 사전에 새로운 단어를 추가할 수 있습니다.
> >> kiwi . add_user_word ( "김갑갑" , "NNP" )
True
> >> kiwi . tokenize ( "김갑갑이 누구야" )
[ Token ( form = '김갑갑' , tag = 'NNP' , start = 0 , len = 3 ),
Token ( form = '이' , tag = 'JKS' , start = 3 , len = 1 ),
Token ( form = '누구' , tag = 'NP' , start = 5 , len = 2 ),
Token ( form = '야' , tag = 'JKV' , start = 7 , len = 1 )]
# v0.11.0 신기능
# 0.11.0 버전부터는 사용자 사전에 동사/형용사를 추가할 때, 그 활용형도 함께 등재됩니다.
# 사전에 등재되어 있지 않은 동사 `팅기다`를 분석하면, 엉뚱한 결과가 나옵니다.
> >> kiwi . tokenize ( '팅겼다' )
[ Token ( form = '팅기' , tag = 'NNG' , start = 0 , len = 2 ),
Token ( form = '하' , tag = 'XSA' , start = 2 , len = 0 ),
Token ( form = '다' , tag = 'EF' , start = 2 , len = 1 )]
# 형태소 `팅기/VV`를 사전에 등록하면, 이 형태소의 모든 활용형이 자동으로 추가되기에
# `팅겼다`, `팅길` 등의 형태를 모두 분석해낼 수 있습니다.
> >> kiwi . add_user_word ( '팅기' , 'VV' )
True
> >> kiwi . tokenize ( '팅겼다' )
[ Token ( form = '팅기' , tag = 'VV' , start = 0 , len = 2 ),
Token ( form = '었' , tag = 'EP' , start = 1 , len = 1 ),
Token ( form = '다' , tag = 'EF' , start = 2 , len = 1 )]
# 또한 변형된 형태소를 일괄적으로 추가하여 대상 텍스트에 맞춰 분석 성능을 높일 수 있습니다.
> >> kiwi . tokenize ( "안녕하세영, 제 이름은 이세영이에영. 학생이세영?" )
[ Token ( form = '안녕' , tag = 'NNG' , start = 0 , len = 2 ),
Token ( form = '하' , tag = 'XSA' , start = 2 , len = 1 ),
Token ( form = '시' , tag = 'EP' , start = 3 , len = 1 ),
Token ( form = '어' , tag = 'EC' , start = 3 , len = 1 ),
Token ( form = '영' , tag = 'MAG' , start = 4 , len = 1 ), # 오분석
Token ( form = ',' , tag = 'SP' , start = 5 , len = 1 ),
Token ( form = '저' , tag = 'NP' , start = 7 , len = 1 ),
Token ( form = '의' , tag = 'JKG' , start = 7 , len = 1 ),
Token ( form = '이름' , tag = 'NNG' , start = 9 , len = 2 ),
Token ( form = '은' , tag = 'JX' , start = 11 , len = 1 ),
Token ( form = '이세영' , tag = 'NNP' , start = 13 , len = 3 ),
Token ( form = '이' , tag = 'JKS' , start = 16 , len = 1 ),
Token ( form = '에' , tag = 'IC' , start = 17 , len = 1 ),
Token ( form = '영' , tag = 'NR' , start = 18 , len = 1 ),
Token ( form = '.' , tag = 'SF' , start = 19 , len = 1 ),
Token ( form = '님' , tag = 'NNG' , start = 21 , len = 1 ),
Token ( form = '도' , tag = 'JX' , start = 22 , len = 1 ),
Token ( form = '학생' , tag = 'NNG' , start = 24 , len = 2 ),
Token ( form = '이세영' , tag = 'NNP' , start = 26 , len = 3 ), # 오분석
Token ( form = '?' , tag = 'SF' , start = 29 , len = 1 )]
# 종결어미(EF) 중 '요'로 끝나는 것들을 '영'으로 대체하여 일괄 삽입합니다.
# 이 때 변형된 종결어미에는 -3의 페널티를 부여하여 원 형태소보다 우선하지 않도록 합니다.
# 새로 삽입된 형태소들이 반환됩니다.
> >> kiwi . add_re_rule ( 'EF' , '요$' , '영' , - 3 )
[ '어영' , '에영' , '지영' , '잖아영' , '거든영' , 'ᆯ까영' , '네영' , '구영' , '나영' , '군영' , ..., '으니깐영' ]
# 동일한 문장을 재분석하면 분석 결과가 개선된 것을 확인할 수 있습니다.
> >> kiwi . tokenize ( "안녕하세영, 제 이름은 이세영이에영. 님도 학생이세영?" )
[ Token ( form = '안녕' , tag = 'NNG' , start = 0 , len = 2 ),
Token ( form = '하' , tag = 'XSA' , start = 2 , len = 1 ),
Token ( form = '시' , tag = 'EP' , start = 3 , len = 1 ),
Token ( form = '어영' , tag = 'EF' , start = 3 , len = 2 ), # 분석 결과 개선
Token ( form = ',' , tag = 'SP' , start = 5 , len = 1 ),
Token ( form = '저' , tag = 'NP' , start = 7 , len = 1 ),
Token ( form = '의' , tag = 'JKG' , start = 7 , len = 1 ),
Token ( form = '이름' , tag = 'NNG' , start = 9 , len = 2 ),
Token ( form = '은' , tag = 'JX' , start = 11 , len = 1 ),
Token ( form = '이세영' , tag = 'NNP' , start = 13 , len = 3 ),
Token ( form = '이' , tag = 'VCP' , start = 16 , len = 1 ),
Token ( form = '에영' , tag = 'EF' , start = 17 , len = 2 ),
Token ( form = '.' , tag = 'SF' , start = 19 , len = 1 ),
Token ( form = '님' , tag = 'NNG' , start = 21 , len = 1 ),
Token ( form = '도' , tag = 'JX' , start = 22 , len = 1 ),
Token ( form = '학생' , tag = 'NNG' , start = 24 , len = 2 ),
Token ( form = '이' , tag = 'VCP' , start = 26 , len = 1 ),
Token ( form = '시' , tag = 'EP' , start = 27 , len = 1 ),
Token ( form = '어영' , tag = 'EF' , start = 27 , len = 2 ), # 분석 결과 개선
Token ( form = '?' , tag = 'SF' , start = 29 , len = 1 )]
# 기분석 형태를 등록하여 원하는 대로 분석되지 않는 문자열을 교정할 수도 있습니다.
# 다음 문장의 `사겼대`는 오타가 들어간 형태라 제대로 분석되지 않습니다.
> >> kiwi . tokenize ( '걔네 둘이 사겼대' )
[ Token ( form = '걔' , tag = 'NP' , start = 0 , len = 1 ),
Token ( form = '네' , tag = 'XSN' , start = 1 , len = 1 ),
Token ( form = '둘' , tag = 'NR' , start = 3 , len = 1 ),
Token ( form = '이' , tag = 'JKS' , start = 4 , len = 1 ),
Token ( form = '사' , tag = 'NR' , start = 6 , len = 1 ),
Token ( form = '기' , tag = 'VV' , start = 7 , len = 1 ),
Token ( form = '었' , tag = 'EP' , start = 7 , len = 1 ),
Token ( form = '대' , tag = 'EF' , start = 8 , len = 1 )]
# 다음과 같이 add_pre_analyzed_word 메소드를 이용하여 이를 교정할 수 있습니다.
> >> kiwi . add_pre_analyzed_word ( '사겼대' , [ '사귀/VV' , '었/EP' , '대/EF' ], - 3 )
True
# 그 뒤 동일한 문장을 다시 분석해보면 결과가 바뀐 것을 확인할 수 있습니다.
> >> kiwi . tokenize ( '걔네 둘이 사겼대' )
[ Token ( form = '걔' , tag = 'NP' , start = 0 , len = 1 ),
Token ( form = '네' , tag = 'XSN' , start = 1 , len = 1 ),
Token ( form = '둘' , tag = 'NR' , start = 3 , len = 1 ),
Token ( form = '이' , tag = 'JKS' , start = 4 , len = 1 ),
Token ( form = '사귀' , tag = 'VV' , start = 6 , len = 3 ),
Token ( form = '었' , tag = 'EP' , start = 6 , len = 3 ),
Token ( form = '대' , tag = 'EF' , start = 6 , len = 3 )]
# 단, 사귀/VV, 었/EP, 대/EF의 시작위치가 모두 6, 길이가 모두 3으로 잘못 잡히는 문제가 보입니다.
# 이를 고치기 위해서는 add_pre_analyzed_word 시 각 형태소의 위치정보도 함께 입력해주어야합니다.
> >> kiwi = Kiwi ()
> >> kiwi . add_pre_analyzed_word ( '사겼대' , [( '사귀' , 'VV' , 0 , 2 ), ( '었' , 'EP' , 1 , 2 ), ( '대' , 'EF' , 2 , 3 )], - 3 )
True
> >> kiwi . tokenize ( '걔네 둘이 사겼대' )
[ Token ( form = '걔' , tag = 'NP' , start = 0 , len = 1 ),
Token ( form = '네' , tag = 'XSN' , start = 1 , len = 1 ),
Token ( form = '둘' , tag = 'NR' , start = 3 , len = 1 ),
Token ( form = '이' , tag = 'JKS' , start = 4 , len = 1 ),
Token ( form = '사귀' , tag = 'VV' , start = 6 , len = 2 ,
Token ( form = '었' , tag = 'EP' , start = 7 len = 1 ,
Token ( form = '대' , tag = 'EF' , start = 8 len = 1 ]
# v0.12.0 신기능
# 0.12.0 버전부터는 형태소를 결합하여 문장으로 복원하는 기능이 추가되었습니다.
>> > kiwi . join ([( '길' , 'NNG' ), ( '을' , 'JKO' ), ( '묻' , 'VV' ), ( '어요' , 'EF' )])
'길을 물어요'
>> > kiwi . join ([( '흙' , 'NNG' ), ( '이' , 'JKS' ), ( '묻' , 'VV' ), ( '어요' , 'EF' )])
'흙이 묻어요'
# v0.13.0 신기능
# 더 강력한 언어 모델인 SkipBigram(sbg)이 추가되었습니다.
# 기존의 knlm과 달리 먼 거리에 있는 형태소를 고려할 수 있습니다.
>> > kiwi = Kiwi ( model_type = ' knlm ')
>> > kiwi . tokenize ( '이 번호로 전화를 이따가 꼭 반드시 걸어.' )
[ Token ( form = '이' , tag = 'MM' , start = 0 , len = 1 ),
Token ( form = '번호' , tag = 'NNG' , start = 2 , len = 2 ),
Token ( form = '로' , tag = 'JKB' , start = 4 , len = 1 ),
Token ( form = '전화' , tag = 'NNG' , start = 6 , len = 2 ),
Token ( form = '를' , tag = 'JKO' , start = 8 , len = 1 ),
Token ( form = '이따가' , tag = 'MAG' , start = 10 , len = 3 ),
Token ( form = '꼭' , tag = 'MAG' , start = 14 , len = 1 ),
Token ( form = '반드시' , tag = 'MAG' , start = 16 , len = 3 ),
Token ( form = '걷' , tag = 'VV-I' , start = 20 , len = 1 ), # 걷다/걸다 중 틀리게 '걷다'를 선택했음.
Token ( form = '어' , tag = 'EF' , start = 21 , len = 1 ),
Token ( form = '.' , tag = 'SF' , start = 22 , len = 1 )]
>> > kiwi = Kiwi ( model_type = ' sbg ')
>> > kiwi . tokenize ( '이 번호로 전화를 이따가 꼭 반드시 걸어.' )
[ Token ( form = '이' , tag = 'MM' , start = 0 , len = 1 ),
Token ( form = '번호' , tag = 'NNG' , start = 2 , len = 2 ),
Token ( form = '로' , tag = 'JKB' , start = 4 , len = 1 ),
Token ( form = '전화' , tag = 'NNG' , start = 6 , len = 2 ),
Token ( form = '를' , tag = 'JKO' , start = 8 , len = 1 ),
Token ( form = '이따가' , tag = 'MAG' , start = 10 , len = 3 ),
Token ( form = '꼭' , tag = 'MAG' , start = 14 , len = 1 ),
Token ( form = '반드시' , tag = 'MAG' , start = 16 , len = 3 ),
Token ( form = '걸' , tag = 'VV' , start = 20 , len = 1 ), # 걷다/걸다 중 바르게 '걸다'를 선택했음.
Token ( form = '어' , tag = 'EC' , start = 21 , len = 1 ),
Token ( form = '.' , tag = 'SF' , start = 22 , len = 1 )]
# 또한 오타 교정 기능이 추가되었습니다.
# 간단한 오타를 교정하여, 사소한 오타 때문에 전체 분석 결과가 어긋나는 문제를 해결할 수 있습니다.
>> > kiwi = Kiwi ( model_type = ' sbg ', typos = 'basic' )
>> > kiwi . tokenize ( '외않됀대?' ) # 오타 교정 사용 시 로딩 시간이 5~10초 정도 소요됨
[ Token ( form = '왜' , tag = 'MAG' , start = 0 , len = 1 ),
Token ( form = '안' , tag = 'MAG' , start = 1 , len = 1 ),
Token ( form = '되' , tag = 'VV' , start = 2 , len = 1 ),
Token ( form = 'ᆫ대' , tag = 'EF' , start = 2 , len = 2 ),
Token ( form = '?' , tag = 'SF' , start = 4 , len = 1 )]
>> > kiwi . tokenize ( '장례희망이 뭐냐는 선섕님의 질문에 벙어리가 됫따' )
[ Token ( form = '장래' , tag = 'NNG' , start = 0 , len = 2 ),
Token ( form = '희망' , tag = 'NNG' , start = 2 , len = 2 ),
Token ( form = '이' , tag = 'JKS' , start = 4 , len = 1 ),
Token ( form = '뭐' , tag = 'NP' , start = 6 , len = 1 ),
Token ( form = '이' , tag = 'VCP' , start = 7 , len = 0 ),
Token ( form = '냐는' , tag = 'ETM' , start = 7 , len = 2 ),
Token ( form = '선생' , tag = 'NNG' , start = 10 , len = 2 ),
Token ( form = '님' , tag = 'XSN' , start = 12 , len = 1 ),
Token ( form = '의' , tag = 'JKG' , start = 13 , len = 1 ),
Token ( form = '질문' , tag = 'NNG' , start = 15 , len = 2 ),
Token ( form = '에' , tag = 'JKB' , start = 17 , len = 1 ),
Token ( form = '벙어리' , tag = 'NNG' , start = 19 , len = 3 ),
Token ( form = '가' , tag = 'JKC' , start = 22 , len = 1 ),
Token ( form = '되' , tag = 'VV' , start = 24 , len = 1 ),
Token ( form = '엇' , tag = 'EP' , start = 24 , len = 1 ),
Token ( form = '다' , tag = 'EF' , start = 25 , len = 1 )]
# 0.17.1에서는 연철에 대한 오타 교정이 추가되었습니다.
# 받침 + 초성 ㅇ/ㅎ 꼴을 잘못 이어적은 경우에 대해 교정이 가능합니다.
>> > kiwi = Kiwi ( typos = 'continual' )
>> > kiwi . tokenize ( '오늘사무시레서' )
[ Token ( form = '오늘' , tag = 'NNG' , start = 0 , len = 2 ),
Token ( form = '사무실' , tag = 'NNG' , start = 2 , len = 4 ),
Token ( form = '에서' , tag = 'JKB' , start = 5 , len = 2 )]
>> > kiwi . tokenize ( '지가캤어요' )
[ Token ( form = '지각' , tag = 'NNG' , start = 0 , len = 3 ),
Token ( form = '하' , tag = 'XSV' , start = 2 , len = 1 ),
Token ( form = '었' , tag = 'EP' , start = 2 , len = 1 ),
Token ( form = '어요' , tag = 'EF' , start = 3 , len = 2 )]
# 기본 오타 교정에 연철 오타 교정까지 함께 사용할 수도 있습니다.
>> > kiwi = Kiwi ( typos = 'basic_with_continual' )
>> > kiwi . tokenize ( '웨 지가캤니?' )
[ Token ( form = '왜' , tag = 'MAG' , start = 0 , len = 1 ),
Token ( form = '지각' , tag = 'NNG' , start = 2 , len = 3 ),
Token ( form = '하' , tag = 'XSV' , start = 4 , len = 1 ),
Token ( form = '었' , tag = 'EP' , start = 4 , len = 1 ),
Token ( form = '니' , tag = 'EC' , start = 5 , len = 1 ),
Token ( form = '?' , tag = 'SF' , start = 6 , len = 1 )]
# 0.19.0 버전에서는 장음화 오류(한 음절을 여러 음절로 늘려 적는 오류)가
# 포함된 텍스트를 교정하는 기능도 추가되었습니다.
>> > kiwi = Kiwi ( typos = 'lengthening' )
>> > kiwi . tokenize ( '지이인짜 귀여워요' )
[ Token ( form = '진짜' , tag = 'MAG' , start = 0 , len = 4 ),
Token ( form = '귀엽' , tag = 'VA-I' , start = 5 , len = 3 ),
Token ( form = '어요' , tag = 'EF' , start = 7 , len = 2 )]
# 기본 오타 교정 + 연철 오타 교정 + 장음화 오류 교정을 함께 사용할 수도 있습니다.
>> > kiwi = Kiwi ( typos = 'basic_with_continual_and_lengthening' )
>> > kiwi . tokenize ( '지이인짜 기여워요~ 마니 좋아해' )
[ Token ( form = '진짜' , tag = 'MAG' , start = 0 , len = 4 ),
Token ( form = '귀엽' , tag = 'VA-I' , start = 5 , len = 3 ),
Token ( form = '어요' , tag = 'EF' , start = 7 , len = 2 ),
Token ( form = '~' , tag = 'SO' , start = 9 , len = 1 ),
Token ( form = '많이' , tag = 'MAG' , start = 11 , len = 2 ),
Token ( form = '좋아하' , tag = 'VV' , start = 14 , len = 3 ),
Token ( form = '어' , tag = 'EF' , start = 16 , len = 1 )]
# 0.17.0 버전부터는 사용자 사전에 공백이 있는 단어를 추가할 수 있습니다.
>> > kiwi = Kiwi ()
# '대학생 선교회'라는 단어를 등록합니다.
>> > kiwi . add_user_word ( '대학생 선교회' , 'NNP' )
True
# 등록한 것과 동일한 형태에서는
# 당연히 잘 분석됩니다.
>> > kiwi . tokenize ( '대학생 선교회에서' )
[ Token ( form = '대학생 선교회' , tag = 'NNP' , start = 0 , len = 7 ),
Token ( form = '에서' , tag = 'JKB' , start = 7 , len = 2 )]
# 추가로 공백이 없는 형태에도 일치가 가능합니다.
>> > kiwi . tokenize ( '대학생선교회에서' )
kiwi . tokenize ( '대학생선교회에서' )
[ Token ( form = '대학생 선교회' , tag = 'NNP' , start = 0 , len = 6 ),
Token ( form = '에서' , tag = 'JKB' , start = 6 , len = 2 )]
# 탭 문자나 줄바꿈 문자 등이 들어가도 일치가 가능합니다.
# 연속한 공백 문자는 공백 1번과 동일하게 처리합니다.
>> > kiwi . tokenize ( '대학생 t n 선교회에서' )
[ Token ( form = '대학생 선교회' , tag = 'NNP' , start = 0 , len = 11 ),
Token ( form = '에서' , tag = 'JKB' , start = 11 , len = 2 )]
# 그러나 사전 등재 시 공백이 없던 지점에
# 공백이 있는 경우에는 일치가 불가능합니다.
>> > kiwi . tokenize ( '대학 생선 교회에서' )
[ Token ( form = '대학' , tag = 'NNG' , start = 0 , len = 2 ),
Token ( form = '생선' , tag = 'NNG' , start = 3 , len = 2 ),
Token ( form = '교회' , tag = 'NNG' , start = 6 , len = 2 ),
Token ( form = '에서' , tag = 'JKB' , start = 8 , len = 2 )]
# space_tolerance를 2로 설정하여
# 공백이 두 개까지 틀린 경우를 허용하도록 하면
# '대학 생선 교회'에도 '대학생 선교회'가 일치하게 됩니다.
>> > kiwi . space_tolerance = 2
>> > kiwi . tokenize ( '대학 생선 교회에서' )
[ Token ( form = '대학생 선교회' , tag = 'NNP' , start = 0 , len = 8 ),
Token ( form = '에서' , tag = 'JKB' , start = 8 , len = 2 )]
# 0.18.0 버전에서는 외국어 문자, 이모지에 대한 지원이 강화되었습니다.
# 화면에 표시되는 글자 단위로 토큰이 분할됩니다.
>> > kiwi . tokenize ( '?☝?☝?' )
[ Token ( form = '?' , tag = 'W_EMOJI' , start = 0 , len = 1 ),
Token ( form = '☝?' , tag = 'W_EMOJI' , start = 1 , len = 2 ),
Token ( form = '☝?' , tag = 'W_EMOJI' , start = 3 , len = 2 )]
# 참고: v0.17의 결과
# [Token(form='?☝?☝?', tag='SW', start=0, len=5)]
# script 필드가 추가되어 해당 문자가
# 유니코드 상에서 어떤 영역에 속하는지 확인할 수 있습니다.
# SW, SH, SL, W_EMOJI 태그에 대해서만 script값이 부여됩니다.
>> > tokens = kiwi . tokenize ( 'ひらがなカタカナ' )
>> > tokens
[ Token ( form = 'ひらがなカタカナ' , tag = 'SW' , start = 0 , len = 8 )]
>> > tokens [ 0 ]. script
'Kana'
>> > tokens = kiwi . tokenize ( 'résumé' )
>> > tokens
[ Token ( form = 'résumé' , tag = 'SL' , start = 0 , len = 6 )]
# 참고 v0.17까지의 결과
# [Token(form='r', tag='SL', start=0, len=1),
# Token(form='é', tag='SW', start=1, len=1),
# Token(form='sum', tag='SL', start=2, len=3),
# Token(form='é', tag='SW', start=5, len=1)]
>> > tokens [ 0 ]. script
'Latin'
>> > tokens = kiwi . tokenize ( 'ἥρως' )
>> > tokens
[ Token ( form = 'ἥρως' , tag = 'SW' , start = 0 , len = 4 )]
>> > tokens [ 0 ]. script
'Greek and Coptic'
>> > tokens = kiwi . tokenize ( 'ฉันชอบกินข้าวผัด' )
>> > tokens
[ Token ( form = 'ฉันชอบกินข้าวผัด' , tag = 'SW' , start = 0 , len = 16 )]
>> > tokens [ 0 ]. script
'Thai'
# 0.18.1버전부터는 받침만으로 구성된 형태소 출력시
# 호환용 자모를 사용하는 옵션을 제공합니다.
>> > kiwi . tokenize ( '예쁜데' )
[ Token ( form = '예쁘' , tag = 'VA' , start = 0 , len = 2 ),
Token ( form = 'ᆫ데' , tag = 'EF' , start = 1 , len = 2 )]
>> > kiwi . tokenize ( '예쁜데' , compatible_jamo = True )
[ Token ( form = '예쁘' , tag = 'VA' , start = 0 , len = 2 ),
Token ( form = 'ㄴ데' , tag = 'EF' , start = 1 , len = 2 )]
# 받침 ᆫ이 호환용 자모인 ㄴ으로 변환되어 출력됨
# 0.20.0버전에서는 사이시옷 분석을 수행하는 옵션이 추가되었습니다.
# 사전에 등재되어 있지 않은, 사이시옷이 들어간 합성명사는
# 다음과 같이 잘못 분석되는 경우가 많습니다.
>> > kiwi . tokenize ( '시곗바늘' )
[ Token ( form = '시곗' , tag = 'NNG' , start = 0 , len = 2 ),
Token ( form = '바늘' , tag = 'NNG' , start = 2 , len = 2 )]
# saisiot=True 옵션을 주면 사이시옷을 형태소로 간주하여
# 다음과 같이 분리해줍니다.
>> > kiwi . tokenize ( '시곗바늘' , saisiot = True )
[ Token ( form = '시계' , tag = 'NNG' , start = 0 , len = 2 ),
Token ( form = 'ᆺ' , tag = 'Z_SIOT' , start = 1 , len = 1 ),
Token ( form = '바늘' , tag = 'NNG' , start = 2 , len = 2 )]
# saisiot=False 옵션을 주면 사이시옷이 들어간 합성 명사 전체를
# 하나의 형태소로 합쳐서 출력합니다.
>> > kiwi . tokenize ( '시곗바늘' , saisiot = False )
[ Token ( form = '시곗바늘' , tag = 'NNG' , start = 0 , len = 4 )]Wenn die Kiwipiepy -Paketinstallation erfolgreich abgeschlossen wurde, tritt kein Fehler auf, wenn das Paket erstellt wird und das Kiwi -Objekt generiert wird.
from kiwipiepy import Kiwi , Match
kiwi = Kiwi ()Kiwi -Konstruktoren sind wie folgt:
Kiwi ( num_workers = 0 , model_path = None , load_default_dict = True , integrate_allomorph = True , model_type = 'knlm' , typos = None , typo_cost_threshold = 2.5 )num_workers : Wenn Sie 2 oder mehr sind, können Sie Multicore verwenden, um Word -Extrakt und formale Stationen zu analysieren, damit Sie es schneller analysieren können.model_path : Gibt einen Pfad mit einem formalen Analysemodell an. Nach weggelassener Modell wird der Modellpfad aus dem kiwipiepy_model -Paket geladen.load_default_dict : Laden Sie ein zusätzliches Wörterbuch. Das zusätzliche Wörterbuch besteht aus einem Titel der Wikipedia. In diesem Fall steigt die Beladungs- und Analysezeit geringfügig, aber Sie können verschiedene richtige Substantive besser fangen. Um zu verhindern, dass die Analyse erfasst wird, setzen Sie sie auf false.integrate_allomorph : In der Mutter integriert es automatisch die Formulare, die gleich sind, aber die phonologische Umgebung wie "Ah/eo", "//".model_type : Gibt das Sprachmodell an, das für die morphologische Analyse verwendet werden soll. Sie können eines von 'knlm' oder 'sbg' auswählen. 'sbg' ist relativ langsam, kann aber die Beziehung zwischen Morphemen erfassen.typos : Korrigieren Sie einen einfachen Tippfehler bei der Analyse der Morphologie. Führen Sie keine Korrekturen durch, wenn Sie auf None gesetzt werden.typo_cost_threshold : Stellen Sie den maximalen Tippfehler so ein, dass Tippfehler zulässig sind.Kiwi -Objekte können drei Arten von Aufgaben ausführen.
Dies ist ein neues Merkmal seit Kiwi 0,5. Kennen Sie die Muster der häufig erscheinenden Saiten und extrahieren Sie die Schnur, die ein Wort sein soll. Die grundlegende Idee dieser Funktion basiert auf der Wortextraktionstechnik von https://github.com/lovit/soynlp, die eine sno -basierte Substantivwahrscheinlichkeit kombiniert und Wörter extrahiert, von denen erwartet wird, dass sie Substantive sind.
Es gibt zwei Arten von nicht registrierten Vokabular -Extraktionsmethoden von Kiwi:
Kiwi . extract_words ( texts , min_cnt , max_word_len , min_score )
Kiwi . extract_add_words ( texts , min_cnt , max_word_len , min_score , pos_score )extract_words(texts, min_cnt=10, max_word_len=10, min_score=0.25, pos_score=-3.0, lm_filter=True)texts : Fügen Sie den zu analysierenden Text in Iterable[str] ein. Weitere Informationen finden Sie im folgenden Beispiel.min_cnt : Bestimmen Sie, wie oft die Wörter extrahiert werden, die im Eingabetxt angezeigt werden. Je größer der Eingangstext ist, desto besser ist es, den Wert zu erhöhen.max_word_len : Die maximale Länge der zu extrahierenden Wörter. Wenn Sie diesen Wert zu viel festlegen, ist die Zeit zum Scannen eines Wortes länger, sodass es besser ist, ihn richtig anzupassen.min_score : Dies ist die minimale Wortbewertung des zu extrahierenden Worts. Je niedriger der Wert ist, desto höher ist die Wahrscheinlichkeit, dass extrahiert wird, und desto mehr wird die Anzahl der extrahierten Wörter verringert, wenn der Wert erhöht wird. Daher ist es notwendig, ihn auf den entsprechenden Wert einzustellen. Der Standard ist 0,25.pos_score : Dies ist die minimale Substantivbewertung der zu extrahierenden Wörter. Je niedriger der Wert ist, desto wahrscheinlicher ist es, Wörter zu extrahieren, die keine Substantive sind. Der Standard ist -3.lm_filter : Bestimmt die Filterung mithilfe von Teilen, Reden und Sprachmodellen. # 입력으로 str의 list를 줄 경우
inputs = list ( open ( 'test.txt' , encoding = 'utf-8' ))
kiwi . extract_words ( inputs , min_cnt = 10 , max_word_len = 10 , min_score = 0.25 )
'''
위의 코드에서는 모든 입력을 미리 list로 저장해두므로
test.txt 파일이 클 경우 많은 메모리를 소모할 수 있습니다.
그 대신 파일에서 필요한 부분만 가져와 사용하려면(streaming)
아래와 같이 사용해야 합니다.
'''
class IterableTextFile :
def __init__ ( self , path ):
self . path = path
def __iter__ ( self ):
yield from open ( path , encoding = 'utf-8' )
kiwi . extract_words ( IterableTextFile ( 'test.txt' ), min_cnt = 10 , max_word_len = 10 , min_score = 0.25 )extract_add_words(texts, min_cnt=10, max_word_len=10, min_score=0.25, pos_score=-3, lm_filter=True) Extrahieren Sie nur die Substantivwörter als extract_words . Diese Methode registriert jedoch automatisch den extrahierten Substantivkandidaten als NNP im Voraus, damit er für die morphologische Analyse verwendet werden kann. Wenn Sie diese Methode nicht verwenden, müssen Sie das extrahierte nicht registrierte Wort mit der Methode add_user_word im Voraus registrieren.
Um die vorhandenen Wörter, die nicht im Voraus registriert sind, ordnungsgemäß zu analysieren, muss das Wort im Benutzerwörterbuch registriert werden. Dies kann automatisch über extract_add_words oder direkt hinzugefügt werden. Die folgenden Methoden sind die Methoden zur Verwaltung des Benutzerwörterbuchs.
Kiwi . add_user_word ( word , tag , score , orig_word = None )
Kiwi . add_pre_analyzed_word ( form , analyzed , score )
Kiwi . add_rule ( tag , replacer , score )
Kiwi . add_re_rule ( tag , pattern , repl , score )
Kiwi . load_user_dictionary ( user_dict_path )add_user_word(word, tag='NNP', score=0.0, orig_word=None)Registrieren Sie einen neuen Typ im Benutzerwörterbuch.
word : Es ist die Form einer Form, die sich registriert. Derzeit können nur die Zeichen als ein Wort registriert werden, das keinen Abstand enthält (leere Zeichen).tag : Dies ist Teil der Form der Registrierungsform. Der Standardwert ist NNP.score : Dies ist die Punktzahl der Form des zu registrierten Formulars. Wenn in vielen Fällen die gleiche Form wahrscheinlich analysiert wird, desto größer ist dieser Wert, desto mehr Priorität wird die entsprechende Form sein.orig_word : Wenn das zugegebene zusätzliche Formular eine Variante eines bestimmten Formulars ist, können Sie die ursprünglichen Morpheme mit diesem Faktor übergeben. Wenn es nein gibt, kann es weggelassen werden. Wenn dieser Wert angegeben ist, muss es im aktuellen Wörterbuch eine Form von orig_word / tag -Kombination geben, andernfalls generiert er eine Ausnahme von ValueError . Wenn die ursprünglichen Morpheme vorhanden sind, kann orig_word angegeben werden, um genauere Analyseergebnisse zu erzielen. Wenn die formale Einfügung erfolgreich ist, wird True zurückgegeben, und wenn dieselbe Morphologie bereits existiert und fehlschlägt, gibt sie False zurück.
add_pre_analyzed_word(form, analyzed, score=0.0)Registrieren Sie die Stimmungsform im Benutzerwörterbuch. Auf diese Weise können bestimmte Formen den Benutzer dazu veranlassen, die morphologische Analyse in der gewünschten Form zu analysieren.
form : Es ist die Form der Stimmung.analyzed : formale Analyse der form . Dieser Wert muss ein iterbares sein, das aus einem Tupel in Form von (Form, Teilen) oder einem Tupel geformt ist (Form, Teile, Ausgangspunkt, Endpunkt). Die durch diesen Wert angegebenen Morpheme müssen im aktuellen Wörterbuch vorhanden sein, andernfalls erzeugen sie eine Ausnahme vom ValueError .score : Die Gewichtsbewertung der Form der zugegebenen Form. Wenn es mehrere Kombinationen der Morphologie gibt, die der Form entsprechen, ist das Wort, das hoch ist, höher. Wenn die Einfügung erfolgreich ist, False True zurückgegeben, wenn bereits dasselbe Formular existiert und fehlschlägt.
Diese Methode kann dem Analysator einfach unregelmäßige Analyseergebnisse hinzufügen. Zum Beispiel haben die 사귀다 Brüder des Verbs 사귀었다 , aber sie sind 사겼다 falsch. Sie können diese Methode verwenden, um sicherzustellen, dass Sie 사겼다 사귀/VV + 었/EP + 다/EF sind.
kiwi . add_pre_analyzed_word ( '사겼다' , [ '사귀/VV' , '었/EP' , '다/EF' ], - 3 )`
kiwi . add_pre_analyzed_word ( '사겼다' , [( '사귀' , 'VV' , 0 , 2 ), ( '었' , 'EP' , 1 , 2 ), ( '다' , 'EF' , 2 , 3 )], - 3 ) Im letzteren Fall sind start , end und length der entsprechenden Morpheme in den Ergebnissen der KIWI -Analyse genau, indem die Position der einzelnen Analyseergebnisse genau angegeben wird.
add_rule(tag, replacer, score)Fügen Sie die durch die Regeln geänderten Änderungen hinzu.
tag : Teile von Reden, die hinzugefügt werden sollenreplacer : Regeln zur Transformation der Morphologie. Dieser Wert muss in Form von Callable Callable bereitgestellt werden, und muss durch Erhalten des ursprünglichen Formulars Fleck Str und zurückgegeben werden und den Streifen des geänderten Formulars zurückgegeben werden. Wenn Sie den gleichen Wert wie die Eingabe zurückgeben, werden die Deformationsergebnisse ignoriert.score : Gewichtswerte modifizierter Morpheme, die hinzugefügt werden sollen. Wenn es mehrere Kombinationen der Morphologie gibt, die der Form entsprechen, ist das Wort, das hoch ist, höher. Gibt list der neu erzeugten Formulare per replacer zurück.
add_re_rule(tag, pattern, repl, score) Es spielt die gleiche Rolle wie add_rule -Methode, verwendet jedoch regelmäßige Ausdrücke in den Deformationsregeln.
tag : Teile von Reden, die hinzugefügt werden sollenpattern : Schimmelpilzregeln zu transformieren. Dieser Wert muss ein regulärer Ausdruck sein, der mit re.compile kompiliert werden kann.repl : Das durch pattern gefundene Muster wird durch diesen Wert ersetzt. Python3 Dies ist der gleiche wie der repl -Faktor der re.sub -Funktion im regulären Expressionsmodul.score : Gewichtswerte modifizierter Morpheme, die hinzugefügt werden sollen. Wenn es mehrere Kombinationen der Morphologie gibt, die der Form entsprechen, ist das Wort, das hoch ist, höher. Gibt list der neu erzeugten Formulare nach pattern und repl .
Diese Methode ist sehr einfach, Kulissen hinzuzufügen, die nach den Regeln transformiert werden. Zum Beispiel können -요 die Terminatoren registrieren ( 먹어염 , 뛰었구염 , 배불러염 usw.) durch -염 ersetzt.
kiwi . add_re_rule ( 'EF' , r'요$' , r'염' , - 3.0 ) Bei der Registrierung dieser beiden Formen in großen Mengen empfehlen wir, dass die Punktzahl auf einen Wert von -3 oder weniger festgelegt wird, damit die Formation in den Analyseergebnissen keine höhere Priorität hat als die ursprüngliche Form.
load_user_dictionary(user_dict_path)Lesen Sie das Benutzerwörterbuch aus der Datei. Benutzer-Wörterbuchdateien sollten mit UTF-8 codiert werden und im Formular wie folgt konfiguriert werden. Jedes Feld sollte durch das Registerkartenzeichen ( t) getrennt werden und die Wortbewertung kann weggelassen werden.
#으로 시작하는 줄은 주석 처리됩니다.
# 각 필드는 Tab(t)문자로 구분됩니다.
#
# <단일 형태소를 추가하는 경우>
# (형태) t (품사태그) t (점수)
# * (점수)는 생략시 0으로 처리됩니다.
키위 NNP -5.0
#
# <이미 존재하는 형태소의 이형태를 추가하는 경우>
# (이형태) t (원형태소/품사태그) t (점수)
# * (점수)는 생략시 0으로 처리됩니다.
기위 키위/NNG -3.0
#
# <기분석 형태를 추가하는 경우>
# (형태) t (원형태소/품사태그 + 원형태소/품사태그 + ...) t (점수)
# * (점수)는 생략시 0으로 처리됩니다.
사겼다 사귀/VV + 었/EP + 다/EF -1.0
Lesen Sie die Pre -Datei erfolgreich durch und geben Sie die Anzahl der neu hinzugefügten Stationen über das Wörterbuch zurück.
Weitere Beispiele finden Sie in der in Kiwi integrierten Standardpre -Datei.
Wenn Sie ein Kiwi erstellen und dem Benutzer -Wörterbuch Wörter hinzufügen, können Sie die folgende Methode verwenden, um Aufgaben wie formale Analyse, Satztrennung, Abstandskorrektur und Satzwiederherstellung auszuführen.
Kiwi . tokenize ( text , match_option , normalize_coda = False , z_coda = True , split_complex = False , compatible_jamo = False , saisiot = None , blocklist = None )
Kiwi . analyze ( text , top_n , match_option , normalize_coda = False , z_coda = True , split_complex = False , compatible_jamo = False , saisiot = None , blocklist = None )
Kiwi . split_into_sents ( text , match_options = Match . ALL , normalize_coda = False , z_coda = True , split_complex = False , compatible_jamo = False , saisiot = None , blocklist = None , return_tokens = False )
Kiwi . glue ( text_chunks , insert_new_lines = None , return_space_insertions = False )
Kiwi . space ( text , reset_whitespace = False )
Kiwi . join ( morphs , lm_search = True )
Kiwi . template ( format_str , cache = True )tokenize(text, match_option=Match.ALL, normalize_coda=False, z_coda=True, split_complex=False, compatible_jamo=False, saisiot=None, blocklist=None) Eingabered Der text wird analysiert, um einfach das Ergebnis zurückzugeben. Die Analyseergebnisse werden in Form einer Liste von Token wie folgt zurückgegeben:
>> kiwi . tokenize ( '테스트입니다.' )
[ Token ( form = '테스트' , tag = 'NNG' , start = 0 , len = 3 ), Token ( form = '이' , tag = 'VCP' , start = 3 , len = 1 ), Token ( form = 'ᆸ니다' , tag = 'EF' , start = 4 , len = 2 )] normalize_coda löst das Problem, nicht zu analysieren, wenn ein anfänglicher Körper wie ㅋㅋㅋ und ㅎㅎ ㅎㅎ die Unterstützung eingegeben hat.
>> kiwi . tokenize ( "안 먹었엌ㅋㅋ" , normalize_coda = False )
[ Token ( form = '안' , tag = 'NNP' , start = 0 , len = 1 ),
Token ( form = '먹었엌' , tag = 'NNP' , start = 2 , len = 3 ),
Token ( form = 'ㅋㅋ' , tag = 'SW' , start = 5 , len = 2 )]
>> kiwi . tokenize ( "안 먹었엌ㅋㅋ" , normalize_coda = True )
[ Token ( form = '안' , tag = 'MAG' , start = 0 , len = 1 ),
Token ( form = '먹' , tag = 'VV' , start = 2 , len = 1 ),
Token ( form = '었' , tag = 'EP' , start = 3 , len = 1 ),
Token ( form = '어' , tag = 'EF' , start = 4 , len = 1 ),
Token ( form = 'ㅋㅋㅋ' , tag = 'SW' , start = 5 , len = 2 )]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) Eingabe Der text wird analysiert, um das Ergebnis zurückzugeben. Drucken Sie die Total Top_n -Ergebnisse ausführlich. Der Rückgabewert ist wie folgt konfiguriert.
[( 분석결과1 , 점수 ), ( 분석결과2 , 점수 ), ... ] Die Analyseergebnisse werden in Form einer Liste von Token wie folgt zurückgegeben:
Das tatsächliche Beispiel ist wie folgt.
>> kiwi . analyze ( '테스트입니다.' , top_n = 5 )
[([ Token ( form = '테스트' , tag = 'NNG' , start = 0 , len = 3 ), Token ( form = '이' , tag = 'VCP' , start = 3 , len = 1 ), Token ( form = 'ᆸ니다' , tag = 'EF' , start = 4 , len = 2 )], - 25.217018127441406 ),
([ Token ( form = '테스트입니' , tag = 'NNG' , start = 0 , len = 5 ), Token ( form = '다' , tag = 'EC' , start = 5 , len = 1 )], - 40.741905212402344 ),
([ Token ( form = '테스트입니' , tag = 'NNG' , start = 0 , len = 5 ), Token ( form = '다' , tag = 'MAG' , start = 5 , len = 1 )], - 41.81024932861328 ),
([ Token ( form = '테스트입니' , tag = 'NNG' , start = 0 , len = 5 ), Token ( form = '다' , tag = 'EF' , start = 5 , len = 1 )], - 42.300254821777344 ),
([ Token ( form = '테스트' , tag = 'NNG' , start = 0 , len = 3 ), Token ( form = '입' , tag = 'NNG' , start = 3 , len = 1 ), Token ( form = '니다' , tag = 'EF' , start = 4 , len = 2 )], - 45.86524200439453 )
]Wenn der Text eine iterable der Zeichenfolgen ist, werden mehrere Eingaben parallel verarbeitet. Der Rückgabewert zu diesem Zeitpunkt ist der iterable des Rückgabewerts beim Eingeben eines einzelnen Textes. Die Arbeit wird gleichzeitig in mehreren Threads gemäß den num_workers verarbeitet, was bei der Generierung kiwi () ein Argument ist. Der Rückgabewert entspricht der Reihenfolge des eingegebenen Werts.
>> result_iter = kiwi . analyze ([ '테스트입니다.' , '테스트가 아닙니다.' , '사실 맞습니다.' ])
>> next ( result_iter )
[([ Token ( form = '테스트' , tag = 'NNG' , start = 0 , len = 3 ), Token ( form = '이' , tag = 'VCP' , start = 3 , len = 1 ), Token ( form = 'ᆸ니다' , tag = 'EF' , start = 4 , len = 2 ), Token ( form = '.' , tag = 'SF' , start = 6 , len = 1 )], - 20.441545486450195 )]
>> next ( result_iter )
[([ Token ( form = '테스트' , tag = 'NNG' , start = 0 , len = 3 ), Token ( form = '가' , tag = 'JKC' , start = 3 , len = 1 ), Token ( form = '아니' , tag = 'VCN' , start = 5 , len = 2 ), Token ( form = 'ᆸ니다' , tag = 'EF' , start = 7 , len = 2 ), Token ( form = '.' , tag = 'SF' , start = 9 , len = 1 )], - 30.23870277404785 )]
>> next ( result_iter )
[([ Token ( form = '사실' , tag = 'MAG' , start = 0 , len = 2 ), Token ( form = '맞' , tag = 'VV' , start = 3 , len = 1 ), Token ( form = '습니다' , tag = 'EF' , start = 4 , len = 3 ), Token ( form = '.' , tag = 'SF' , start = 7 , len = 1 )], - 22.232769012451172 )]
>> next ( result_iter )
Traceback ( most recent call last ):
File "<stdin>" , line 1 , in < module >
StopIterationMit der für Schleife können Sie paralleliger und bequemer durchführen. Dies ist nützlich, wenn eine große Menge an Textdaten analysiert wird.
>> for result in kiwi . analyze ( long_list_of_text ):
tokens , score = result [ 0 ]
print ( tokens )Wenn Sie Text als iterable in den Saiten angeben, kann es nach dem Ruf der Analyse sein, dies zu lesen. Wenn dieses Argument daher mit anderen IO -Ressourcen verknüpft ist (Datei I / O), sollten Sie die Ressource erst dann beenden, wenn die gesamte Analyse beendet ist.
>> file = open ( 'long_text.txt' , encoding = 'utf-8' )
>> result_iter = kiwi . analyze ( file )
>> file . close () # 파일이 종료됨
>> next ( result_iter ) # 종료된 파일에서 분석해야할 다음 텍스트를 읽어들이려고 시도함
ValueError : I / O operation on closed file .
The above exception was the direct cause of the following exception :
Traceback ( most recent call last ):
File "<stdin>" , line 1 , in < module >
SystemError : < built - in function next > returned a result with an error setsplit_into_sents( text, match_options=Match.ALL, normalize_coda=False, z_coda=True, split_complex=False, compatible_jamo=False, saisiot=None, return_tokens=False ) >> kiwi . split_into_sents ( "여러 문장으로 구성된 텍스트네 이걸 분리해줘" )
[ Sentence ( text = '여러 문장으로 구성된 텍스트네' , start = 0 , end = 16 , tokens = None ),
Sentence ( text = '이걸 분리해줘' , start = 17 , end = 24 , tokens = None )]
>> kiwi . split_into_sents ( "여러 문장으로 구성된 텍스트네 이걸 분리해줘" , return_tokens = True )
[ Sentence ( text = '여러 문장으로 구성된 텍스트네' , start = 0 , end = 16 , tokens = [
Token ( form = '여러' , tag = 'MM' , start = 0 , len = 2 ),
Token ( form = '문장' , tag = 'NNG' , start = 3 , len = 2 ),
Token ( form = '으로' , tag = 'JKB' , start = 5 , len = 2 ),
Token ( form = '구성' , tag = 'NNG' , start = 8 , len = 2 ),
Token ( form = '되' , tag = 'XSV' , start = 10 , len = 1 ),
Token ( form = 'ᆫ' , tag = 'ETM' , start = 11 , len = 0 ),
Token ( form = '텍스트' , tag = 'NNG' , start = 12 , len = 3 ),
Token ( form = '이' , tag = 'VCP' , start = 15 , len = 1 ),
Token ( form = '네' , tag = 'EF' , start = 15 , len = 1 )
]),
Sentence ( text = '이걸 분리해줘' , start = 17 , end = 24 , tokens = [
Token ( form = '이거' , tag = 'NP' , start = 17 , len = 2 ),
Token ( form = 'ᆯ' , tag = 'JKO' , start = 19 , len = 0 ),
Token ( form = '분리' , tag = 'NNG' , start = 20 , len = 2 ),
Token ( form = '하' , tag = 'XSV' , start = 22 , len = 1 ),
Token ( form = '어' , tag = 'EC' , start = 22 , len = 1 ),
Token ( form = '주' , tag = 'VX' , start = 23 , len = 1 ),
Token ( form = '어' , tag = 'EF' , start = 23 , len = 1 )
])]glue(text_chunks, return_space_insertions=False)text_chunks : Eine Liste der kombinierten Textstücke.return_space_insertions : true, geben Sie die Orbitalinsertion jedes Stücks in die List[bool] zurück. >> kiwi . glue ([
"그러나 알고보니 그 봉" ,
"지 안에 있던 것은 바로" ,
"레몬이었던 것이다." ])
"그러나 알고보니 그 봉지 안에 있던 것은 바로 레몬이었던 것이다."
>> kiwi . glue ([
"그러나 알고보니 그 봉" ,
"지 안에 있던 것은 바로" ,
"레몬이었던 것이다." ], return_space_insertions = True )
( "그러나 알고보니 그 봉지 안에 있던 것은 바로 레몬이었던 것이다." , [ False , True ])space(text, reset_whitespace=False)text : Die analysierende Zeichenfolge. Wenn dieses Argument an einen einzelnen STR übertragen wird, wird es in einem einzelnen Faden verarbeitet und von Multisred behandelt, wenn es dem iterablen des STR übergeben wird.reset_whitespace true ist, wird es auch aktiv durchgeführt. Der Standardwert ist falsch, und in diesem Fall konzentriert sich er auf Korrekturen, die die angehängten Wörter verwenden. Die Abstandskorrektionsfunktion dieser Methode basiert auf der morphologischen Analyse. Wenn die Lücke in die Mitte der Morphologie eingefügt wird, können die resultierenden Ergebnisse ungenau sein. In diesem Fall können Sie Kiwi.space_tolerance anpassen reset_whitespace=True um die Räume in der Morphologie zu ignorieren oder die vorhandene Lücke zu ignorieren und das Ergebnis zu verbessern.
>> kiwi . space ( "띄어쓰기없이작성된텍스트네이걸교정해줘" )
"띄어쓰기 없이 작성된 텍스트네 이걸 교정해 줘."
>> kiwi . space ( "띄 어 쓰 기 문 제 가 있 습 니 다" )
"띄어 쓰기 문 제 가 있 습 니 다"
>> kiwi . space_tolerance = 2 # 형태소 내 공백을 최대 2개까지 허용
>> kiwi . space ( "띄 어 쓰 기 문 제 가 있 습 니 다" )
"띄어 쓰기 문제가 있습니다"
>> kiwi . space ( "띄 어 쓰 기 문 제 가 있 습 니 다" , reset_whitespace = True ) # 기존 공백 전부 무시
"띄어쓰기 문제가 있습니다"join(morphs, lm_search=True)morphs : Eine Liste von Morphemen, die kombiniert werden sollen. Jede Morphologie sollte ein von Kiwi.tokenizer erhaltener Token -Typ oder tuple Tupeltyp sein, der aus (Form, Teil, Sprache) besteht.lm_search : Wenn es eine mehrdeutige Schande gibt, die in zwei oder mehr Formularen wiederhergestellt werden kann, wählen Sie die optimale Morphologie durch die Sprachmodellsuche, wenn dieser Wert wahr ist. Wenn Sie falsch sind, suchen Sie nicht nach der Suche, aber Sie können sie schneller wiederherstellen. Diese Methode verwendet eine Regel, die dem ähnlich ist, was im space bei der Kombination einer Morphologie verwendet wird, und fügt den Raum ordnungsgemäß ein. Da die Form des Formulars selbst keine gap -verwandten Informationen enthält, wird der Originaltext nicht wiederhergestellt, selbst wenn der spezifische Text mit tokenize analysiert und dann gekoppelt ist, um erneut zu join .
>> kiwi . join ([( '덥' , 'VA' ), ( '어' , 'EC' )])
'더워'
>> tokens = kiwi . tokenize ( "분석된결과를 다시합칠수있다!" )
# 형태소 분석 결과를 복원.
# 복원 시 공백은 규칙에 의해 삽입되므로 원문 텍스트가 그대로 복원되지는 않음.
>> kiwi . join ( tokens )
'분석된 결과를 다시 합칠 수 있다!'
>> tokens [ 3 ]
Token ( form = '결과' , tag = 'NNG' , start = 4 , len = 2 )
>> tokens [ 3 ] = ( '내용' , 'NNG' ) # 4번째 형태소를 결과->내용으로 교체
>> kiwi . join ( tokens ) # 다시 join하면 결과를->내용을 로 교체된 걸 확인 가능
'분석된 내용을 다시 합칠 수 있다!'
# 불규칙 활용여부가 모호한 경우 lm_search=True인 경우 맥락을 고려해 최적의 후보를 선택합니다.
>> kiwi . join ([( '길' , 'NNG' ), ( '을' , 'JKO' ), ( '묻' , 'VV' ), ( '어요' , 'EF' )])
'길을 물어요'
>> kiwi . join ([( '흙' , 'NNG' ), ( '이' , 'JKS' ), ( '묻' , 'VV' ), ( '어요' , 'EF' )])
'흙이 묻어요'
# lm_search=False이면 탐색을 실시하지 않습니다.
>> kiwi . join ([( '길' , 'NNG' ), ( '을' , 'JKO' ), ( '묻' , 'VV' ), ( '어요' , 'EF' )], lm_search = False )
'길을 묻어요'
>> kiwi . join ([( '흙' , 'NNG' ), ( '이' , 'JKS' ), ( '묻' , 'VV' ), ( '어요' , 'EF' )], lm_search = False )
'흙이 묻어요'
# 동사/형용사 품사 태그 뒤에 -R(규칙 활용), -I(불규칙 활용)을 덧붙여 활용법을 직접 명시할 수 있습니다.
>> kiwi . join ([( '묻' , 'VV-R' ), ( '어요' , 'EF' )])
'묻어요'
>> kiwi . join ([( '묻' , 'VV-I' ), ( '어요' , 'EF' )])
'물어요'
# 0.15.2버전부터는 Tuple의 세번째 요소로 띄어쓰기 유무를 지정할 수 있습니다.
# True일 경우 강제로 띄어쓰기, False일 경우 강제로 붙여쓰기를 수행합니다.
>> kiwi . join ([( '길' , 'NNG' ), ( '을' , 'JKO' , True ), ( '묻' , 'VV' ), ( '어요' , 'EF' )])
'길 을 물어요'
>> kiwi . join ([( '길' , 'NNG' ), ( '을' , 'JKO' ), ( '묻' , 'VV' , False ), ( '어요' , 'EF' )])
'길을물어요'
# 과거형 선어말어미를 제거하는 예시
>> remove_past = lambda s : kiwi . join ( t for t in kiwi . tokenize ( s ) if t . tagged_form != '었/EP' )
>> remove_past ( '먹었다' )
'먹다'
>> remove_past ( '먼 길을 걸었다' )
'먼 길을 걷다'
>> remove_past ( '전화를 걸었다.' )
'전화를 걸다.'template(format_str, cache=True)format_str : Vorlagenzeichenfolge. Verwenden derselben Syntax wie Python's str.format (https://docs.python.org/ko/3/library/string.html#formtrings).cache : Es ist ein Cache Vorlage. Diese Methode hilft Ihnen, die Formationskombination von Kiwi.join wie folgt zu verwenden.
# 빈칸은 {}로 표시합니다.
# 이 자리에 형태소 혹은 기타 Python 객체가 들어가서 문자열을 완성시키게 됩니다.
> >> tpl = kiwi . template ( "{}가 {}을 {}었다." )
# template 객체는 format 메소드를 제공합니다.
# 이 메소드를 통해 빈 칸을 채울 수 있습니다.
# 형태소는 `kiwipiepy.Token` 타입이거나
# (형태, 품사) 혹은 (형태, 품사, 왼쪽 띄어쓰기 유무)로 구성된 tuple 타입이어야 합니다.
> >> tpl . format (( "나" , "NP" ), ( "공부" , "NNG" ), ( "하" , "VV" ))
'내가 공부를 했다.'
> >> tpl . format (( "너" , "NP" ), ( "밥" , "NNG" ), ( "먹" , "VV" ))
'네가 밥을 먹었다.'
> >> tpl . format (( "우리" , "NP" ), ( "길" , "NNG" ), ( "묻" , "VV-I" ))
'우리가 길을 물었다.'
# 형태소가 아닌 Python 객체가 입력되는 경우 `str.format`과 동일하게 동작합니다.
> >> tpl . format ( 5 , "str" , { "dict" : "dict" })
"5가 str를 {'dict': 'dict'}었다."
# 입력한 객체가 형태소가 아닌 Python 객체로 처리되길 원하는 경우 !s 변환 플래그를 사용합니다.
> >> tpl = kiwi . template ( "{!s}가 {}을 {}었다." )
> >> tpl . format (( "나" , "NP" ), ( "공부" , "NNG" ), ( "하" , "VV" ))
"('나', 'NP')가 공부를 했다."
# Python 객체에 대해서는 `str.format`과 동일한 서식 지정자를 사용할 수 있습니다.
> >> tpl = kiwi . template ( "{:.5f}가 {!r}을 {}었다." )
> >> tpl . format ( 5 , "str" , { "dict" : "dict" })
"5.00000가 'str'를 {'dict': 'dict'}었다."
# 서식 지정자가 주어진 칸에 형태소를 대입할 경우 ValueError가 발생합니다.
> >> tpl . format (( "우리" , "NP" ), "str" , ( "묻" , "VV-I" ))
ValueError : cannot specify format specifier for Kiwi Token
# 치환 필드에 index나 name을 지정하여 대입 순서를 설정할 수 있습니다.
> >> tpl = kiwi . template ( "{0}가 {obj}를 {verb}ㄴ다. {1}는 {obj}를 안 {verb}었다." )
> >> tpl . format (
[( "우리" , "NP" ), ( "들" , "XSN" )],
[( "너희" , "NP" ), ( "들" , "XSN" )],
obj = ( "길" , "NNG" ),
verb = ( "묻" , "VV-I" )
)
'우리들이 길을 묻는다. 너희들은 길을 안 물었다.'
# 위의 예시처럼 종성 자음은 호환용 자모 코드 앞에 \로 이스케이프를 사용해야합니다.
# 그렇지 않으면 종성이 아닌 초성으로 인식됩니다.
> >> tpl = kiwi . template ( "{0}가 {obj}를 {verb}ㄴ다. {1}는 {obj}를 안 {verb}었다." )
> >> tpl . format (
[( "우리" , "NP" ), ( "들" , "XSN" )],
[( "너희" , "NP" ), ( "들" , "XSN" )],
obj = ( "길" , "NNG" ),
verb = ( "묻" , "VV-I" )
)
'우리들이 길을 묻 ᄂ이다. 너희들은 길을 안 물었다.' Basierend auf den Sejong Partsa -Tags wird es verwendet und verwendet, um einige teilweise Tags hinzuzufügen und zu ändern.
| Kategorie | Etikett | Erläuterung |
|---|---|---|
| Schritt (n) | Nng | Allgemeines Substantiv |
| Nnp | Substantiv | |
| Nnb | Abhängigkeit | |
| Nr | Untersuchung | |
| Np | Pronomen | |
| Abschnitt (v) | VV | Verb |
| Va | Adjektiv | |
| Vx | Hilfs | |
| VCP | Positive Anweisung (IDA) | |
| Vcn | Negative Anweisungen (nein) | |
| Röhrenförmig | Mm | Röhrenförmig |
| Adverb (MA) | Mag | Allgemeines Adverb |
| Maj | Verbindung | |
| Zwischenruf | IC | Zwischenruf |
| Umfrage (j) | Jks | Hauptuntersuchung |
| JKC | Aufgeben | |
| JKG | Röhrenuntersuchung | |
| JKO | Objektive Untersuchung | |
| JKB | Insiderschaft | |
| JKV | Hub -Umfrage | |
| JKQ | Zitat | |
| JX | Assistent | |
| JC | Verbindung | |
| Mutter (e) | EP | Willen |
| EF | Ende | |
| EC | Mutter verbinden | |
| ETN | Substantiv | |
| ETM | Röhrenförmig | |
| Präfix | XPN | Präfix des Temperierens |
| Tracky (xs) | Xsn | Substantiv -Ableitungssuffix |
| Xsv | Verben Derivates Suffix | |
| XSA | Adjektivderivat -Suffix | |
| Xsm | Adverb -Ableitungen * | |
| Radix | Xr | Radix |
| Code, Fremdsprache, Sonderzeichen (en) | Sf | Kündigungscode (.!?) |
| Sp | Klassifizierungscode (, /:;) | |
| Ss | Zitate Code und Klammern ('()] <> {} -' '' '' '' ≫ usw.) | |
| SSO | Code, der in SS * beginnt | |
| SSC | Code von in der Nähe von SS * | |
| Se | Reduktionstabelle (…) | |
| Also | Beigefügte Tabelle (- ~) | |
| SW | Andere Sonderzeichen | |
| Sl | Alphabet (AZ AZ) | |
| Sh | chinesischer Charakter | |
| Sn | Nummer (0-9) | |
| Sb | Bestellt Kopf (a. Ich . | |
| Unfähigkeit zu analysieren | UN | Unfähigkeit zur Analyse * |
| Web (w) | W_url | URL -Adresse * |
| W_email | E-Mail-Adresse * | |
| W_HASHTAG | Hashtag (#abcd) * | |
| W_mention | Erwähnen (@abcd) * | |
| W_SERIAL | Seriennummer (Telefonnummer, Kontonummer, IP -Adresse usw.) * * * | |
| W_emoji | Emoji * | |
| usw | Z_CODA | Unterstützung hinzugefügt * |
| Z_SIOT | Sai Shi -Kleidung * | |
| Benutzer0 ~ 4 | Benutzerdefinierte Tag * |
* Es ist ein einzigartiges Tag mit Sejong Partsa -Tag.
Aus der Version 0.12.0 kann das Suffix -R und -I VV , VA , VX und XSA -Tags hinzugefügt werden. -R gibt die Verwendung von Regeln an, -I an den unregelmäßigen Gebrauch.
Aus Version 0.10.3 unterstützen wir die Satzverzählungsfunktionen experimentell. Aus der Version 0.11.0 wurde die Genauigkeit erheblich verbessert. Weitere Informationen finden Sie auf dieser Seite, um die Funktion der Satztrennfunktion zu erzielen.
Ein Wort kann in vielerlei Hinsicht analysiert werden, daher hat Kiwi eine hohe Genauigkeit in einer Situation, in der es wichtig ist, den Kontext zu sehen. In dieser Seite finden Sie die Leistung von Mehrdeutigkeiten.
Weitere Informationen finden Sie in Kiwi#Citation, um zu zitieren.