hyunwoongko / kss

KSS: Korean String processing Suite
BSD 3-Clause "New" or "Revised" License
413 stars 60 forks source link

-하다, -합니다 split_sentences 결과 차이 오류 #15

Closed vg-rlo closed 3 years ago

vg-rlo commented 3 years ago
# 문장에 마침표 없는 경우 어떻게 문장 분리 수행하는지 확인
test = ['과연 어떻게 할지 궁금하다 이거는 마침표없는 문장인데 어떻게 분리해낼까 할 수 있을까나 걱정됩니다']
test = list(map(kss.split_sentences, test)) # 문장으로 split
test

# 출력 
[['과연 어떻게 할지 궁금하다 이거는 마침표없는 문장인데 어떻게 분리해낼까 할 수 있을까나 걱정됩니다']]
# 문장에 마침표 없는 경우 어떻게 문장 분리 수행하는지 확인
test = ['과연 어떻게 할지 궁금합니다 이거는 마침표없는 문장인데 어떻게 분리해낼까 할 수 있을까나 걱정됩니다']
test = list(map(kss.split_sentences, test)) # 문장으로 split
test

# 출력
[['과연 어떻게 할지 궁금합니다', '이거는 마침표없는 문장인데 어떻게 분리해낼까 할 수 있을까나 걱정됩니다']]

안녕하세요 해당 라이브러리로 문단에서 문장을 추출해보고 있습니다. '-하다'로 끝나는 경우는 문장 분리가 안됩니다. :) 확인 부탁드려요. 감사합니다

hyunwoongko commented 3 years ago

우선 가장 먼저 kss는 통계기반이나 뉴럴기반이 아닌 룰베이스로 구현되어있으며, 완벽한 모듈이 아닌것을 감안해주시면 감사할 것 같습니다. '~하다'의 경우 제가 정말 고민을 많이 하고 있는 연결어미(EC)와 종결어미(EF) 문제 때문에 분절하지 않는 것으로 결정하였습니다.

1. 연결어미로 쓰이는 경우: "나 어제 게임하다 갑자기 엄마와서 놀랐잖아." (분절하면 안됨)
2. 종결어미로 쓰이는 경우: "과연 어떻게 할지 궁금하다 이거는 마침표 없는 문장인데" (분절해야 함)

현재의 kss는 100% 룰 기반으로 작동되고 있기 때문에 위와 같이 어미의 용법에 따라 분절 여부를 결정할 수 없습니다. 그래서 현재버전에서는 모든 '~하다'를 분절하거나 혹은 분절하지 않는 것으로 결정할 수 밖에 없습니다. 그러나 실제 뉴스 등의 데이터를 분석해본 결과, 일반적으로 종결어미 '~하다'보다는 연결어미 '~하다'가 더 자주 등장하였으며 종결어미 '~하다'보다는 비교적 종결어미 '~한다', '~했다'등이 문어체/구어체에 더 많이 등장하는 것을 관찰하였습니다. 따라서 성능 평가 결과 '~하다'를 분절하지 않는 것이 더 좋은 성능을 거두었고 현재 버전에 그러한 내용이 반영되어 있습니다.

그러나 아무리 그렇다고 해도, 종결어미 '~하다.' 부분에서는 문장을 분절해주는 것이 맞습니다. 따라서 현재 kss 2.X버전의 문제들을 해결할 수 있는 kss 3.X를 고안하고 있고, 3.X 버전부터는 어미의 용법에 따라 분절점을 결정하는 로직을 추가하려고 계획하고 있으며 여기에 사용할 전용 형태소 분석기를 직접 개발하고 있습니다. 이에 대한 자세한 사항은 #12 와 pecab에서 확인해주시면 감사하겠습니다.

hyunwoongko commented 3 years ago

별다른 추가 의견 없으시면 이슈 닫도록 하겠습니다 :)

vg-rlo commented 3 years ago

넵 친절한 설명 감사합니다! :) 안내해주신 #12와 pecab도 확인했습니다.