Hyunwoongko Kss Versions Save

KSS: Korean String processing Suite

v4.5.0

1 year ago

1. Add ignores parameter to prevent missplitting sentences

You can add ignores list to split_sentences and summarize_sentences.

import kss

text = """첫째. 베트남 지역에서는 일찍부터 반랑국, 어우락 왕국, 남비엣(남월) 등이 건국되어 발전하였다. 그러나 한 무제의 공격으로 중국의 지배를 받기 시작하면서 중국 문화의 영향을 받게 되었다. 특히 당의 지배를 받으면서 당 문화의 영향을 많이 받았다.
둘째. 베트남에서도 중국 문화의 영향 속에서 유교 문화가 발달하였다. 특히 베트남의 리 왕조 때에는 문묘가 설치되고, 과거제가 시행되기도 하였다. 한편 레(후기) 왕조 때에는 성리학을 바탕으로 한 유교 문화가 확산되었다.
셋째. 베트남에서는 강수량이 풍부하고, 날씨가 따뜻하여 벼농사 중심의 농경 생활이 이루어지고 있다.
넷째. 동아시아 지역은 계절에 따라 방향이 바뀌는 계절풍의 영향을 강하게 받는 곳이다. 서안 해양성 기후는 중위도의 대륙 서쪽 지역에 주로 나타난다.
"""

output = kss.split_sentences(text)
print(output)
# ['첫째.', '베트남 지역에서는 일찍부터 반랑국, 어우락 왕국, 남비엣(남월) 등이 건국되어 발전하였다.', '그러나 한 무제의 공격으로 중국의 지배를 받기 시작하면서 중국 문화의 영향을 받게 되었다.', '특히 당의 지배를 받으면서 당 문화의 영향을 많이 받았다.', '둘째.', '베트남에서도 중국 문화의 영향 속에서 유교 문화가 발달하였다.', '특히 베트남의 리 왕조 때에는 문묘가 설치되고, 과거제가 시행되기도 하였다.', '한편 레(후기) 왕조 때에는 성리학을 바탕으로 한 유교 문화가 확산되었다.', '셋째.', '베트남에서는 강수량이 풍부하고, 날씨가 따뜻하여 벼농사 중심의 농경 생활이 이루어지고 있다.', '넷째.', '동아시아 지역은 계절에 따라 방향이 바뀌는 계절풍의 영향을 강하게 받는 곳이다.', '서안 해양성 기후는 중위도의 대륙 서쪽 지역에 주로 나타난다.']

output = kss.split_sentences(text, ignores=["첫째.", "둘째.", "셋째.", "넷째."])
print(output)
# ['첫째. 베트남 지역에서는 일찍부터 반랑국, 어우락 왕국, 남비엣(남월) 등이 건국되어 발전하였다.', '그러나 한 무제의 공격으로 중국의 지배를 받기 시작하면서 중국 문화의 영향을 받게 되었다.', '특히 당의 지배를 받으면서 당 문화의 영향을 많이 받았다.', '둘째. 베트남에서도 중국 문화의 영향 속에서 유교 문화가 발달하였다.', '특히 베트남의 리 왕조 때에는 문묘가 설치되고, 과거제가 시행되기도 하였다.', '한편 레(후기) 왕조 때에는 성리학을 바탕으로 한 유교 문화가 확산되었다.', '셋째. 베트남에서는 강수량이 풍부하고, 날씨가 따뜻하여 벼농사 중심의 농경 생활이 이루어지고 있다.', '넷째. 동아시아 지역은 계절에 따라 방향이 바뀌는 계절풍의 영향을 강하게 받는 곳이다.', '서안 해양성 기후는 중위도의 대륙 서쪽 지역에 주로 나타난다.']

2. Add circle characters and bracket characters

Kss considers circle characters like ①, ②, ③ and bracket characters like ⑴, ⑵, ⑶ from version 4.5.0.

import kss

text = """
③ 구석기 시대에는 사냥, 채집, 물고기잡이로 생계를 유지하였다.
④ 신석기 시대에 이르러 조, 피 등을 재배하는 농경이 시작되었다.
⑤ 청동기 시대 이후 청동이나 철기 등의 금속을 이용하여 무기를  만들어 사용하였다.
"""

output = kss.split_sentences(text)
print(output)
# before:
# ['③ 구석기 시대에는 사냥, 채집, 물고기잡이로 생계를 유지하였다.\n④', 신석기 시대에 이르러 조, 피 등을 재배하는 농경이 시작되었다.\n⑤', 청동기 시대 이후 청동이나 철기 등의 금속을 이용하여 무기를  만들어 사용하였다.']

# after
# ['③ 구석기 시대에는 사냥, 채집, 물고기잡이로 생계를 유지하였다.', '④ 신석기 시대에 이르러 조, 피 등을 재배하는 농경이 시작되었다.', '⑤ 청동기 시대 이후 청동이나 철기 등의 금속을 이용하여 무기를  만들어 사용하였다.']

3. Support strip and ignores parameters in summarize_sentences

You can use strip and ignores parameters in summarize_sentences similar with split_sentences.

kss.summarize_sentences(text, ignores=["첫째.", "둘째.", "셋째.", "넷째."], strip=False)

v4.4.0

1 year ago

v4.4.0

  • Add punct backend. This could be helpful for well-structed documents or english documents
    • Interestingly, It shows better performance than nltk.sent_tokenize in English.
      import nltk
      import kss    
      
      text = "Thanks Mr. Kim. I love your suggestion.😁 We can choose one of them. 1. going to Korea, 2. going to Japan. I prefer Korea. because there are many foods. e.g. Kimchi, Bibimpap, and so on.🧡 (And I lived in Korean when I was young. I have some great experience) Please let me know your opinion!"
      
      nltk.sent_tokenize(text)
      ['Thanks Mr. Kim.', 'I love your suggestion.😁 We can choose one of them.', '1. going to Korea, 2. going to Japan.', 'I prefer Korea.', 'because there are many foods.', 'e.g.', 'Kimchi, Bibimpap, and so on.🧡 (And I lived in Korean when I was young.', 'I have some great experience) Please let me know your opinion!']
      
      kss.split_sentences(text, backend="punct")
      ['Thanks Mr. Kim.', 'I love your suggestion.😁', 'We can choose one of them. 1. going to Korea, 2. going to Japan.', 'I prefer Korea.', 'because there are many foods. e.g. Kimchi, Bibimpap, and so on.🧡', '(And I lived in Korean when I was young. I have some great experience)', 'Please let me know your opinion!']
      
  • Improve emoji processing
    • before: ['내가 바라던 것.🙂 그런데 그것이 쉽지 않다.']
    • after: ['내가 바라던 것.🙂', '그런데 그것이 쉽지 않다.']
  • Add many sf-splitting related excpetions
    • for example, e.g., i.e., Mr., Dr., Def., Prof., ...

v4.3.2

1 year ago
  • Fix the following bugs
    • Fix empty sentence removing of postprocess
    • Fix unknown token retrieval

v4.3.1

1 year ago
  • Remove infinite loop in '듯' rule.
  • Hide networkx for faster import.

v4.3.0

1 year ago

v4.3.0

  • Added summarize_sentences function

Why text summarization in Kss?

There's textrankr, a text summarization module for Korean. So someone might ask me like "Why are you adding summarization feature into Kss?". The reason of adding this feature is sentence segmentation performance is very important in text summarization domain.

Before summarize text into sentences, we must split text into sentences. but textrankr has been split sentences using very naive regex based method, and this makes text summarization performance poorly. In addition, user must input tokenizer into the TextRank class, but this is a little bit bothering. So I fixed the two problems of textrankr, and added the codebase into Kss.

Kss has one of the best sentence segmentation module in all of the Korean language processing libraries, and this can improve text summarization performance without modifying any summarization related algorithms in textrankr.

Let's see the following example.

text = """어느화창한날 출근전에 너무일찍일어나 버렸음 (출근시간 19시)
할꺼도없고해서 카페를 찾아 시내로 나갔음
새로생긴곳에 사장님이 커피선수인지 커피박사라고 해서 갔음
오픈한지 얼마안되서 그런지 손님이 얼마없었음
조용하고 좋다며 좋아하는걸시켜서 테라스에 앉음"""

Output of textrankr is:

import textrankr
import mecab

tokenizer = mecab.MeCab().morphs
textrankr_class = textrankr.TextRank(tokenizer=tokenizer)
textrankr_output = textrankr_class.summarize(text, verbose=False)
print(textrankr_output)
output:

['어느화창한날 출근전에 너무일찍일어나 버렸음 (출근시간 19시) 할꺼도없고해서 카페를 찾아 시내로 나갔음 새로생긴곳에 사장님이 커피선수인지 커피박사라고 해서 갔음 오픈한지 얼마안되서 그런지 손님이 얼마없었음 조용하고 좋다며 좋아하는걸시켜서 테라스에 앉음 근데 조용하던 카페가 산만해짐 소리의 출처는 카운터였음(테라스가 카운터 바로옆)']

Output of kss is:

import kss

kss.sumarize_sentences(text)
output:

['할꺼도없고해서 카페를 찾아 시내로 나갔음', '새로생긴곳에 사장님이 커피선수인지 커피박사라고 해서 갔음', '조용하고 좋다며 좋아하는걸시켜서 테라스에 앉음']

You can see textrankr failed summarizing text because it couldn't split input text into sentences. but Kss summarized text very well. And usage of kss is also much easier than textrankr! That's why I am adding this feature into Kss.

For more details, please check our README document. Thanks !

v4.2.0

1 year ago
  • Add new benchmark dataset: wikipedia.txt image image

  • Modify single quote backup

  • Modify logic for heavy backup dict

  • Add some backup strings

  • Add postprocessing rules for symbol only sentences

v4.1.4

1 year ago
  • 무슨일이였을까용 바로 이것이죠
    • before: ["무슨일이였을까", "용 바로 이것이죠"]
    • after: ["무슨일이였을까용", "바로 이것이죠"]
  • 무슨일이였게용 바로 이것이죠
    • before: ["무슨일이였게용 바로 이것이죠"]
    • after: ["무슨일이였게용", "바로 이것이죠"]

v4.1.3

1 year ago
  • Add 'n장' to exception of SF based split.
  • Modify a lot of sanity checks message.

v4.1.2

1 year ago
  • Add drop_space for split_morphemes
  • Add strip for split_sentences
  • Fix unicode related bugs

2. Powerful support for wikipedia-like text and paper-like text

텍스트 렌더링에 가까운 수준의 정확도와 디테일을 제공합니다.

  • 예제 1 (각주 및 인용)
from kss import split_sentences

data = """메시는 조별라운드 1차전인 나이지리아와의 경기에 선발 출전했으나 상대 골키퍼인 빈센트 에니에아마의 선방들에 막혀 골을 기록하지는 못했다.[12] 조별라운드 2차전인 대한민국과의 경기에서도 선발 출장했으며 아르헨티나의 모든 골(4골 가운데 3골은 곤살로 이과인이 기록한 득점(해트트릭)이었으며 나머지 1골은 대한민국의 박주영이 기록한 자책골이었다.)에 기여를 했다.[13] 또한 조별리그 3차전인 그리스와의 경기에서 메시는 경고누적을 우려하여 결장한 하비에르 마스체라노를 대신하여 주장 완장을 착용한 채 경기에 임했고, 좋은 경기력으로 상대를 위협하면서 무득점에도 맨 오브 더 매치에 선정되었다. "메시는 최고의 선수였다. 선수들이 경기 끝나고 '축구 하기 싫어졌다'고 할 정도였다. 워낙 훌륭한 선수라 막아낼 힘이 나지 않았다. 뭐 저런 선수가 있나 싶었다. 수비하려고 우르르 달려들면 옆으로 툭 패스하고 빠져들어가고… 참 영리한 선수였다." - 조용형, 월드컵 조별 리그에서 아르헨티나에 1 – 4로 패한 후. 16강전에 진출하자 4년 만에 다시 만난 상대인 멕시코를 상대로도 좋은 경기력을 보여줬으며 카를로스 테베스에게 어시스트를 기록하면서 테베스가 골을 넣을 수 있도록 도와줬다. 하지만 이 경기는 당시 오심 논란으로 화제가 되기도 했다. 테베스는 경기 직후 인터뷰에서 득점을 한 이후 주심을 쳐다봤고 주심이 오프사이드 판정을 내릴것이라 생각했지만 자신의 생각과 다르게 오프사이드 판정이 내려지지않아 그때서야 기뻐할 수 있었다고 한다. 실제로 정지된 화면으로 보면 메시에게서 공이 연결되는 순간 테베스는 완벽한 오프사이드 위치에 있었다."""

for sent in split_sentences(data):
    print(sent)
메시는 조별라운드 1차전인 나이지리아와의 경기에 선발 출전했으나 상대 골키퍼인 빈센트 에니에아마의 선방들에 막혀 골을 기록하지는 못했다.[12]
조별라운드 2차전인 대한민국과의 경기에서도 선발 출장했으며 아르헨티나의 모든 골(4골 가운데 3골은 곤살로 이과인이 기록한 득점(해트트릭)이었으며 나머지 1골은 대한민국의 박주영이 기록한 자책골이었다.)에 기여를 했다.[13]
또한 조별리그 3차전인 그리스와의 경기에서 메시는 경고누적을 우려하여 결장한 하비에르 마스체라노를 대신하여 주장 완장을 착용한 채 경기에 임했고, 좋은 경기력으로 상대를 위협하면서 무득점에도 맨 오브 더 매치에 선정되었다.
"메시는 최고의 선수였다. 선수들이 경기 끝나고 '축구 하기 싫어졌다'고 할 정도였다. 워낙 훌륭한 선수라 막아낼 힘이 나지 않았다. 뭐 저런 선수가 있나 싶었다. 수비하려고 우르르 달려들면 옆으로 툭 패스하고 빠져들어가고… 참 영리한 선수였다."
- 조용형, 월드컵 조별 리그에서 아르헨티나에 1 – 4로 패한 후.
16강전에 진출하자 4년 만에 다시 만난 상대인 멕시코를 상대로도 좋은 경기력을 보여줬으며 카를로스 테베스에게 어시스트를 기록하면서 테베스가 골을 넣을 수 있도록 도와줬다.
하지만 이 경기는 당시 오심 논란으로 화제가 되기도 했다.
테베스는 경기 직후 인터뷰에서 득점을 한 이후 주심을 쳐다봤고 주심이 오프사이드 판정을 내릴것이라 생각했지만 자신의 생각과 다르게 오프사이드 판정이 내려지지않아 그때서야 기뻐할 수 있었다고 한다.
실제로 정지된 화면으로 보면 메시에게서 공이 연결되는 순간 테베스는 완벽한 오프사이드 위치에 있었다.
  • 예제 2 (단락기호)
from kss import split_sentences

data = """¶ 나무위키는 2015년 4월 17일에 설립된, 이용자의 자유와 권리를 평등하게 보장하고 지식과 정보의 공유에 힘쓰기 위해 개설된 위키이다.위키 사이트로서 나무위키는 특정 영역에 편중되지 않은, 학문·서브컬처 등 다양한 분야를 포용하여 진흥시키는 것을 목표로 하며, 경직되고 건조한 서술이 아닌 어느 정도 재미도 갖춘 서술을 지향한다.나무위키는 토론을 통해 중립적이고 사실적인 서술과 특정한 관점·세력에 종속되지 않는 서술을 지향하며, 보편적인 인권과 윤리에 어긋나는 사상과 집단을 배격한다. ¶ 나무위키는 문서를 작성하고 편집하기 위한 특별한 자격 증명을 두지 않는다. 다만, 나무위키의 편집자들이 모두 일관된 생각을 하고 있는 것은 아니기에, 분쟁이 발생할 시 이용자 간의 정당하고 자유로운 토론을 통하여 합의점을 도출함을 원칙으로 한다. 이러한 원칙이 지켜질 때 나무위키는 이용자의 자유로운 문서 서술과 토론을 보장한다. 그러나 타인의 의견을 무시하는 행위, 차별과 비하를 조장하는 행위는 용인되지 않으며, 이러한 행위를 할 시 제재될 수 있다. ¶ 나무위키의 이용자에 의한 자율운영, 분쟁 해결 시 최소한의 가이드라인의 정립을 통해 선량한 이용자들의 자유로운 위키 활동을 보장하기 위해서 2015년 5월 3일부터 나무위키 이용자들의 지속적인 자유토론을 통하여 본 기본방침을 작성하였고, 2015년 9월 5일 규정토론에 참여한 토론자 전원을 포함한 이용자의 합의에 따라 본 기본방침을 공표한다."""

for sent in split_sentences(data):
    print(sent)
¶ 나무위키는 2015년 4월 17일에 설립된, 이용자의 자유와 권리를 평등하게 보장하고 지식과 정보의 공유에 힘쓰기 위해 개설된 위키이다.
위키 사이트로서 나무위키는 특정 영역에 편중되지 않은, 학문·서브컬처 등 다양한 분야를 포용하여 진흥시키는 것을 목표로 하며, 경직되고 건조한 서술이 아닌 어느 정도 재미도 갖춘 서술을 지향한다.
나무위키는 토론을 통해 중립적이고 사실적인 서술과 특정한 관점·세력에 종속되지 않는 서술을 지향하며, 보편적인 인권과 윤리에 어긋나는 사상과 집단을 배격한다.
¶ 나무위키는 문서를 작성하고 편집하기 위한 특별한 자격 증명을 두지 않는다.
다만, 나무위키의 편집자들이 모두 일관된 생각을 하고 있는 것은 아니기에, 분쟁이 발생할 시 이용자 간의 정당하고 자유로운 토론을 통하여 합의점을 도출함을 원칙으로 한다.
이러한 원칙이 지켜질 때 나무위키는 이용자의 자유로운 문서 서술과 토론을 보장한다.
그러나 타인의 의견을 무시하는 행위, 차별과 비하를 조장하는 행위는 용인되지 않으며, 이러한 행위를 할 시 제재될 수 있다.
¶ 나무위키의 이용자에 의한 자율운영, 분쟁 해결 시 최소한의 가이드라인의 정립을 통해 선량한 이용자들의 자유로운 위키 활동을 보장하기 위해서 2015년 5월 3일부터 나무위키 이용자들의 지속적인 자유토론을 통하여 본 기본방침을 작성하였고, 2015년 9월 5일 규정토론에 참여한 토론자 전원을 포함한 이용자의 합의에 따라 본 기본방침을 공표한다.
  • 예제3 (참조기호; 애스터리스크, 칼표 등)
    • 참고로 문서 구조에 관련된 부분 (제 4절. 등)은 행갈이 기호(\n)가 살아 있어야 이렇게 나타낼 수 있습니다. 단 문장간의 행갈이는 필요 없습니다.
from kss import split_sentences

data = """제 4절. 모델링\n그래서 우리는 모델의 레이어는 28개로 정했고*, 보캡사이즈는 50400으로 설정하였다.† 참고로 GPT(Generative Pre-trained Transformers)계열의 모델들은 OpenAI에서 발표하였고, NLG 작업을 수행할 수 있는 모델이다. 자기회귀 언어모델(Autoregressive Language Model)이라고 하는데, 과거의 텍스트를 디코더의 입력으로 받아 현재의 텍스트를 예측하여 출력한다. * 각 레이어는 하나의 피드포워드 블록과 하나의 셀프 어텐션 블록으로 구성된다. † 임베딩 매트릭스의 크기는 50400이지만 GPT-2 토크나이저는 50257 항목만 사용한다."""

for sent in split_sentences(data):
    print(sent)
제 4 절. 모델링
그래서 우리는 모델의 레이어는 28개로 정했고*, 보캡사이즈는 50400으로 설정하였다.†
참고로 GPT(Generative Pre-trained Transformers)계열의 모델들은 OpenAI에서 발표하였고, NLG 작업을 수행할 수 있는 모델이다.
자기회귀 언어모델(Autoregressive Language Model)이라고 하는데, 과거의 텍스트를 디코더의 입력으로 받아 현재의 텍스트를 예측하여 출력한다.
* 각 레이어는 하나의 피드포워드 블록과 하나의 셀프 어텐션 블록으로 구성된다.
† 임베딩 매트릭스의 크기는 50400이지만 토크나이저는 50257 항목만 사용한다.
  • 예제 4 (논문)
    • 참고로 문서 구조에 관련된 부분 (1. 서론 등)은 행갈이 기호(\n)가 살아 있어야 이렇게 나타낼 수 있습니다. 단 문장간의 행갈이는 필요 없습니다.
from kss import split_sentences

data = """1. 서론\n문장이란 생각이나 감정을 말로 표현할 때 완결된 내용을 나타내는 최소의 단위로, 자연어 처리의 주요 작업들에서 문장이 기본적인 처리 단위가 된다. 문장 단위의 작업을 수행하기 위해서는 우선 문장의 경계를 인식하는 것이 필요하다[1]. 최근 다양한 SNS 플랫폼이 등장하고, 이용자의 수가 급증함에 따라 온라인에서 얻을 수 있는 다양한 분야의 정보 활용 가치가 높아지고 있다. 일반적으로 문어체는 비교적 정확한 구두점을 사용하며, 제한된 종결어미를 사용하고 있으므로 비교적 간단하게 문장 경계를 인식할 수 있다. 기존에 공개된 여러 문장 경계 인식기1)는 일 반 문서에 대해 높은 성능을 보인다. 반면 댓글이나 SNS 문서에는 좋은 성능을 보이지 않는다. 그 이유는 SNS 문 서의 다음과 같은 특징을 고려하지 않았기 때문이다. 1) 구두점이 자주 생략된다. 2) 특수기호나 자소를 이용한 다양한 이모티콘이 사용된다. 3) 유행어, 줄임말 등 새로운 형태의 종결어미가 자주 사용된다. 본 논문은 문어체뿐 아니라 SNS에서 사용되는 다양한 문체에서도 잘 적용되는 문장 경계 인식기를 제안한다. 제안된 문장 경계 인식기는 SNS 문서에 잘 적용되도록 다음의 두 가지를 개선한다. 첫째로 학습 말뭉치를 확장 한다. 학습 말뭉치를 일반 문서로만 제한하지 않고, SNS 문서도 함께 학습할 수 있도록 학습 말뭉치에 SNS 문서를 추가한다. 둘째로 자질 집합을 확장한다. 기존의 문장 경계 인식기의 자질을 이용하여 말뭉치의 범위만 늘리는 것으로는 성능을 높이기에 한계가 있어 각종 자소, 특수기호, 이모티콘을 추가하여 다양한 형식으로 문장이 종결되는 SNS 문서에 적합하도록 개선한다. 이와 같은 개선법을 적용하여 CRF로 학습한 제안된 모델은 일반 문서뿐 아니라 SNS 문서에서도 좋은 성능을 보였다. 본 논문의 구성을 다음과 같다. 2장에서 문장 분리에 관련된 연구를 조사하고, 3장에서 SNS 문서에서의 다양한 고려사항을 자세히 기술한다. 4장에서는 각각 제안된 모델을 평가하고 5장에서 결론을 맺고 향후 연구에 대해 기술한다.\n4. 실험 및 분석\n4.1 실험 환경\n훈련 및 평가를 위해 3장에서 기술한 말뭉치 구축 방법에 따라 일반 문서와 SNS 문서에서 문장을 추출하여 전체 말뭉치를 구성하였다. 전체 말뭉치 중에서 훈련 및 평가 말뭉치를 표 3과 같이 분리하였다.\n\n5. 결론 및 향후 연구\n본 논문에서는 기계학습 방법을 이용하여 문어체로 이루어진 일반 문서와 비형식적인 문장으로 구성된 SNS 문서 문장 경계 인식 모델을 제안하였다. 학습 말뭉치의 영역을 일반 문서와 SNS 문서로 확장하고, SNS 문서에서 자주 보이는 형태의 단어 유형을 새로 정의해 이를 자질로 사용하여 효과적으로 문장 경계 인식을 수행하였다. 제안한 모델은 일반 문서의 문장 경계 인식 성능으로 99.1%의 재현율을 보였으며, SNS 문서에서도 88.3%의 높은 재현율을 보였다. 향후 연구로는 후처리 규칙을 이용하여 재현율을 더 높여 다양한 내용의 말뭉치를 사용하여 더 넓은 분야에서 이용 가능한 문장 경계 인식기를 제안하고자 한다.\n참고문헌\n[1] 김주희, 서정연, “비형식적인 문서에 강건한 문장 경계 인식”,한국컴퓨터종합학술대회 논문집, vol. 37, no. 1, pp. 266-270, 2010.\n[2] M. D. Riley, “Some Applications of Tree-based Modeling to Speech and Language”, Proceedings of the DARPA Speech and Natural Language Workshop, pp. 339-352, 1989\n[3] 임희석, 한군희, “메모리 기반의 기계 학습을 이용한 한국어 문장 경계 인식”, 한국콘텐츠학회논문지 vol. 4, no. 4, pp. 133-139, 2004\n[4] 이충희, 장명길, 서영훈, "웹 문서를 위한 개선된 문장경계인식 방법", 정보과학회논문지, 소프트웨어 및 응용, 제37권, 제6호, pp. 455-465, 2010.\n[5] 이주은, 구민서, 김선홍, 신호섭, “블로그 데이터에 대한 문장 경계 인식”, 한국HCI학회 학술대회, pp.1221-1223, 2014"""

for sent in split_sentences(data):
    print(sent)
1. 서론
문장이란 생각이나 감정을 말로 표현할 때 완결된 내용을 나타내는 최소의 단위로, 자연어 처리의 주요 작업들에서 문장이 기본적인 처리 단위가 된다.
문장 단위의 작업을 수행하기 위해서는 우선 문장의 경계를 인식하는 것이 필요하다[1].
최근 다양한 SNS 플랫폼이 등장하고, 이용자의 수가 급증함에 따라 온라인에서 얻을 수 있는 다양한 분야의 정보 활용 가치가 높아지고 있다.
일반적으로 문어체는 비교적 정확한 구두점을 사용하며, 제한된 종결어미를 사용하고 있으므로 비교적 간단하게 문장 경계를 인식할 수 있다.
기존에 공개된 여러 문장 경계 인식기1)는 일 반 문서에 대해 높은 성능을 보인다.
반면 댓글이나 SNS 문서에는 좋은 성능을 보이지 않는다.
그 이유는 SNS 문 서의 다음과 같은 특징을 고려하지 않았기 때문이다.
1) 구두점이 자주 생략된다.
2) 특수기호나 자소를 이용한 다양한 이모티콘이 사용된다.
3) 유행어, 줄임말 등 새로운 형태의 종결어미가 자주 사용된다.
본 논문은 문어체뿐 아니라 SNS에서 사용되는 다양한 문체에서도 잘 적용되는 문장 경계 인식기를 제안한다.
제안된 문장 경계 인식기는 SNS 문서에 잘 적용되도록 다음의 두 가지를 개선한다.
첫째로 학습 말뭉치를 확장 한다.
학습 말뭉치를 일반 문서로만 제한하지 않고, SNS 문서도 함께 학습할 수 있도록 학습 말뭉치에 SNS 문서를 추가한다.
둘째로 자질 집합을 확장한다.
기존의 문장 경계 인식기의 자질을 이용하여 말뭉치의 범위만 늘리는 것으로는 성능을 높이기에 한계가 있어 각종 자소, 특수기호, 이모티콘을 추가하여 다양한 형식으로 문장이 종결되는 SNS 문서에 적합하도록 개선한다.
이와 같은 개선법을 적용하여 CRF로 학습한 제안된 모델은 일반 문서뿐 아니라 SNS 문서에서도 좋은 성능을 보였다.
본 논문의 구성을 다음과 같다.
2장에서 문장 분리에 관련된 연구를 조사하고, 3장에서 SNS 문서에서의 다양한 고려사항을 자세히 기술한다.
4장에서는 각각 제안된 모델을 평가하고 5장에서 결론을 맺고 향후 연구에 대해 기술한다.
4. 실험 및 분석
4.1 실험 환경
훈련 및 평가를 위해 3장에서 기술한 말뭉치 구축 방법에 따라 일반 문서와 SNS 문서에서 문장을 추출하여 전체 말뭉치를 구성하였다.
전체 말뭉치 중에서 훈련 및 평가 말뭉치를 표 3과 같이 분리하였다.
5. 결론 및 향후 연구
본 논문에서는 기계학습 방법을 이용하여 문어체로 이루어진 일반 문서와 비형식적인 문장으로 구성된 SNS 문서 문장 경계 인식 모델을 제안하였다.
학습 말뭉치의 영역을 일반 문서와 SNS 문서로 확장하고, SNS 문서에서 자주 보이는 형태의 단어 유형을 새로 정의해 이를 자질로 사용하여 효과적으로 문장 경계 인식을 수행하였다.
제안한 모델은 일반 문서의 문장 경계 인식 성능으로 99.1%의 재현율을 보였으며, SNS 문서에서도 88.3%의 높은 재현율을 보였다.
향후 연구로는 후처리 규칙을 이용하여 재현율을 더 높여 다양한 내용의 말뭉치를 사용하여 더 넓은 분야에서 이용 가능한 문장 경계 인식기를 제안하고자 한다.
참고문헌
[1] 김주희, 서정연, “비형식적인 문서에 강건한 문장 경계 인식”,한국컴퓨터종합학술대회 논문집, vol. 37, no. 1, pp. 266-270, 2010.
[2] M. D. Riley, “Some Applications of Tree-based Modeling to Speech and Language”, Proceedings of the DARPA Speech and Natural Language Workshop, pp. 339-352, 1989
[3] 임희석, 한군희, “메모리 기반의 기계 학습을 이용한 한국어 문장 경계 인식”, 한국콘텐츠학회논문지 vol. 4, no. 4, pp. 133-139, 2004
[4] 이충희, 장명길, 서영훈, "웹 문서를 위한 개선된 문장경계인식 방법", 정보과학회논문지, 소프트웨어 및 응용, 제37권, 제6호, pp. 455-465, 2010.
[5] 이주은, 구민서, 김선홍, 신호섭, “블로그 데이터에 대한 문장 경계 인식”, 한국HCI학회 학술대회, pp.1221-1223, 2014

v4.0.6

1 year ago

Add footnote processing

  • before: ["기록하지는 못했다., "[12][14] 조별라운드 2차전인 대한민국과의"]
  • after: ["기록하지는 못했다.[12][14]", "조별라운드 2차전인 대한민국과의"]