Skip to content

Releases: hyunwoongko/kss

v4.5.0

25 Jan 10:58
41e9afa
Compare
Choose a tag to compare

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

12 Jan 05:25
Compare
Choose a tag to compare

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

09 Jan 10:32
Compare
Choose a tag to compare
  • Fix the following bugs
    • Fix empty sentence removing of postprocess
    • Fix unknown token retrieval

v4.3.1

05 Jan 11:20
Compare
Choose a tag to compare
  • Remove infinite loop in 'λ“―' rule.
  • Hide networkx for faster import.

v.4.3.0

04 Jan 10:44
583ae2b
Compare
Choose a tag to compare

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

27 Dec 19:59
Compare
Choose a tag to compare
  • 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

27 Dec 15:09
Compare
Choose a tag to compare
  • λ¬΄μŠ¨μΌμ΄μ˜€μ„κΉŒμš© λ°”λ‘œ 이것이죠
    • before: ["λ¬΄μŠ¨μΌμ΄μ˜€μ„κΉŒ", "용 λ°”λ‘œ 이것이죠"]
    • after: ["λ¬΄μŠ¨μΌμ΄μ˜€μ„κΉŒμš©", "λ°”λ‘œ 이것이죠"]
  • λ¬΄μŠ¨μΌμ΄μ˜€κ²Œμš© λ°”λ‘œ 이것이죠
    • before: ["λ¬΄μŠ¨μΌμ΄μ˜€κ²Œμš© λ°”λ‘œ 이것이죠"]
    • after: ["λ¬΄μŠ¨μΌμ΄μ˜€κ²Œμš©", "λ°”λ‘œ 이것이죠"]

v4.1.3

21 Dec 07:49
Compare
Choose a tag to compare
  • Add 'nμž₯' to exception of SF based split.
  • Modify a lot of sanity checks message.

v4.1.2

21 Dec 04:04
Compare
Choose a tag to compare

1. Unicode related update (feature addition & bug fixes)

  • 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

20 Dec 14:28
Compare
Choose a tag to compare

Add footnote processing

  • before: ["κΈ°λ‘ν•˜μ§€λŠ” λͺ»ν–ˆλ‹€., "[12][14] μ‘°λ³„λΌμš΄λ“œ 2차전인 λŒ€ν•œλ―Όκ΅­κ³Όμ˜"]
  • after: ["κΈ°λ‘ν•˜μ§€λŠ” λͺ»ν–ˆλ‹€.[12][14]", "μ‘°λ³„λΌμš΄λ“œ 2차전인 λŒ€ν•œλ―Όκ΅­κ³Όμ˜"]