koshort / pyeunjeon

(deprecated) 은전한닢 프로젝트와 mecab 기반의 한국어 형태소 분석기의 독립형 python 인터페이스
Other
59 stars 16 forks source link

토크나이즈 이슈입니다 #5

Open smbslt3 opened 4 years ago

smbslt3 commented 4 years ago

안녕하세요

윈도우 10 환경에서 eunjeon으로 Mecab을 사용중입니다. 코퍼스 분석 중에 에러가 발생하는 것을 확인하고, 글 남깁니다.

캘리 에듀 라는 단어가, 뒤에 공백이 올 경우 공백까지 포함하여 토크나이즈가 됩니다. 즉, 캘리 라는 토큰과 캘리라는 토큰이 각각 존재합니다. 에듀도 마찬가지구요. 아래 스크린샷 확인해주세요.


# tokenizer = Mecab()

sent1 = [x for (x,y) in tokenizer.pos('고구마참치비빔밥')]
sent1
>>> ['고구마', '참치', '비빔밥']
sent2 = [x for (x,y) in tokenizer.pos('고구마  참치  비빔밥')]
sent2
>>> ['고구마', '참치', '비빔밥']
sent1 = [x for (x,y) in tokenizer.pos('캘리참치비빔밥')]
sent1
>>> ['캘리', '참치', '비빔밥']
sent2 = [x for (x,y) in tokenizer.pos('캘리  참치  비빔밥')]
sent2
>>> ['캘리 ', '참치', '비빔밥']
sent3 = [x for (x,y) in tokenizer.pos('고구마  캘리  비빔밥')]
sent3
>>> ['고구마', '캘리 ', '비빔밥']
sent1[0] == sent2[0]
>>> False   # '캘리' != '캘리 '
sent2[0] == sent3[1]
>>> True
sent1[0] == sent2[0].strip()
>>> True   # 공백을 제거하면 해결
sent3[1][-1] == ' '  # 마지막에 덧붙는 것이 공백인지 확인
>>> True

sent1 = [x for (x,y) in tokenizer.pos('고구마에듀비빔밥')]
sent1
>>> ['고구마', '에듀', '비빔밥']
sent2 = [x for (x,y) in tokenizer.pos('고구마 에듀 비빔밥')]
sent2
>>> ['고구마', '에듀 ', '비빔밥']
sent1[1] == sent2[1]
>>> False  # '에듀' != '에듀 '
sent1[1] == sent2[1].strip()
>>> True
sent2[1][-1] == ' '  # 마지막에 덧붙는 것이 공백인지 확인
>>> True
sent3 = [x for (x,y) in tokenizer.pos('고구마초코비빔밥')]
sent3
>>> ['고구마', '초코', '비빔밥']
sent4 = [x for (x,y) in tokenizer.pos('고구마 초코 비빔밥')]
sent4
>>> ['고구마', '초코', '비빔밥']

제가 사용한 코퍼스 안에서 저렇게 나타난것이지, 다른 오작동 토큰들이 있을지도 모릅니다.