Closed tree1891 closed 1 year ago
안녕하세요 @tree1891 아쉽게도 현재 Kiwi에는 문장 분리의 예외를 처리하는 기능이 없는데요, 질문해주신 사례들을 보니 문장 분리를 금지하는 패턴을 직접 지정할 수 있게 해주는게 좋을 것 같네요. 차기 업데이트에 고려하도록 하겠습니다.
그 전까지는 다음과 같이 임시방편으로 후처리를 통해 분리된 문장을 강제로 붙여서 쓰는 방법을 추천드립니다.
import re
from kiwipiepy import Kiwi, Sentence
def split(kiwi:Kiwi, text:str, dont_split_pattern:str = None):
ranges = []
if dont_split_pattern:
for m in re.finditer(dont_split_pattern, text):
ranges.append(m.span())
ret = []
sents = kiwi.split_into_sents(text)
concat = False
for sent in sents:
if concat:
ret[-1] = Sentence(
text=text[ret[-1].start:sent.end],
start=ret[-1].start,
end=sent.end,
tokens=None,
subs=ret[-1].subs + sent.subs
)
else:
ret.append(sent)
concat = any(s <= sent.end <= e for s, e in ranges)
return ret
kiwi = Kiwi()
sents = split(kiwi, '다들 좋겠다하는데 사실 뭘까요입니다.')
print(sents)
# [Sentence(text='다들 좋겠다', start=0, end=6, tokens=None, subs=[]),
# Sentence(text='하는데 사실 뭘까요', start=6, end=16, tokens=None, subs=[]),
# Sentence(text='입니다.', start=16, end=20, tokens=None, subs=[])]
sents = split(kiwi, '다들 좋겠다하는데 사실 뭘까요입니다.', dont_split_pattern=r"(좋겠다하는데|뭘까요입니다)")
print(sents)
# [Sentence(text='다들 좋겠다하는데 사실 뭘까요입니다.', start=0, end=20, tokens=None, subs=[])]
위의 split함수에서는 정규표현식을 이용해 붙일 구간을 찾는 방법을 사용하고 있으니 이를 참조하셔서 원하시는 기능을 구현하시면 될듯합니다.
가능한 모든 패턴을 지정해 주는것은 무리일것 같은데요
@tree1891 아 예외처리가 아니라 분석 오류 개선에 대한 요청이신건가요?
두 건 모두 공백이 없이 연결되어 있고, 어미 다음에 하/VV
, 이/VCP
와 같은 동사가 바로 이어지는 경우로 묶어볼 수 있겠는데요,
이 규칙에 의해 분리 오류가 악화되는 경우가 있는지 살펴보고 문제 없으면 반영하도록 하겠습니다~
아래와 같은 경우 문장분리가 되지 않게 하는 방법이 있을까요?