KR-WordRank: Unsupervised Korean Word & Keyword Extractor
- pure Python code
- author: Lovit (Hyunjoong Kim)
- reference: Kim, H. J., Cho, S., & Kang, P. (2014). KR-WordRank: An Unsupervised Korean Word Extraction Method Based on WordRank. Journal of Korean Institute of Industrial Engineers, 40(1), 18-33
Keyword extraction
Substring graph๋ฅผ ๋ง๋ค๊ธฐ ์ํ์ฌ substring์ ์ต์ ๋ฑ์ฅ ๋น๋์ (min count)์ substring์ ์ต๋ ๊ธธ์ด (max length)๋ฅผ ์ ๋ ฅํด์ผ ํฉ๋๋ค.
from krwordrank.word import KRWordRank
min_count = 5 # ๋จ์ด์ ์ต์ ์ถํ ๋น๋์ (๊ทธ๋ํ ์์ฑ ์)
max_length = 10 # ๋จ์ด์ ์ต๋ ๊ธธ์ด
wordrank_extractor = KRWordRank(min_count=min_count, max_length=max_length)
KR-WordRank๋ PageRank ์ ๋น์ทํ graph ranking ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ๋จ์ด๋ฅผ ์ถ์ถํฉ๋๋ค (HITS algorithm ์ ์ด์ฉํฉ๋๋ค). Substring graph์์ node (substrig) ๋ญํน์ ๊ณ์ฐํ๊ธฐ ์ํ์ฌ graph ranking ์๊ณ ๋ฆฌ์ฆ์ parameters ๊ฐ ์ ๋ ฅ๋์ผ ํฉ๋๋ค.
beta = 0.85 # PageRank์ decaying factor beta
max_iter = 10
texts = ['์์ ๋ฌธ์ฅ ์
๋๋ค', '์ฌ๋ฌ ๋ฌธ์ฅ์ list of str ์
๋๋ค', ... ]
keywords, rank, graph = wordrank_extractor.extract(texts, beta, max_iter)
Graph ranking ์ด ๋์ ๋ ธ๋๋ค(substrings)์ด ํ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์ณ ๋จ์ด๋ก ์ถ๋ ฅ๋ฉ๋๋ค. ์ํ '๋ผ๋ผ๋๋'์ ์ํ ํ ๋ฐ์ดํฐ์์ ํค์๋ (๋จ์ด) ์ถ์ถ์ ํ ๊ฒฐ๊ณผ ์์๊ฐ tutorials์ ์์ต๋๋ค.
for word, r in sorted(keywords.items(), key=lambda x:x[1], reverse=True)[:30]:
print('%8s:\t%.4f' % (word, r))
์ํ: 229.7889
๊ด๋๊ฐ: 112.3404
๋๋ฌด: 78.4055
์์
: 37.6247
์ ๋ง: 37.2504
....
Python ์ wordcloud package ๋ฅผ ์ด์ฉํ๋ฉด ํค์๋์ ๊ดํ word cloud figure ๋ฅผ ๊ทธ๋ฆด ์ ์์ต๋๋ค.
Figure ์ ๋ํ๋ด์ง ์์ ์ผ๋ฐ์ ์ธ ๋จ์ด (stopwords) ๋ฅผ ์ ๊ฑฐํ์ฌ passwords ๋ฅผ ๋ง๋ญ๋๋ค. dict ํ์์ผ๋ก {๋จ์ด:์ ์} ํ์์ด์ด์ผ ํฉ๋๋ค.
stopwords = {'์ํ', '๊ด๋๊ฐ', '๋๋ฌด', '์ ๋ง', '๋ณด๊ณ '}
passwords = {word:score for word, score in sorted(
keywords.items(), key=lambda x:-x[1])[:300] if not (word in stopwords)}
ํน์ ์์ ๊ณผ์ ์ ๊ฐ๋จํ summarize_with_keywords ํจ์๋ก ์งํํ ์๋ ์์ต๋๋ค.
from krwordrank.word import summarize_with_keywords
keywords = summarize_with_keywords(texts, min_count=5, max_length=10,
beta=0.85, max_iter=10, stopwords=stopwords, verbose=True)
keywords = summarize_with_keywords(texts) # with default arguments
wordcloud ์ ์ค์น๋ ์๋์ ๋ช ๋ น์ด๋ก ์ค์นํ ์ ์์ต๋๋ค.
pip install wordcloud
wordcloud ๊ฐ ์ด์ฉํ๋ ๊ธฐ๋ณธ ํฐํธ๋ ํ๊ธ ์ง์์ด ๋์ง ์์ต๋๋ค. ํ๊ธ์ ์ง์ํ๋ ๋ณธ์ธ์ ํฐํธ๋ฅผ ์ฐพ์ font_path ๋ฅผ ์ค๋นํฉ๋๋ค. ๊ทธ๋ฆผ์ ํฌ๊ธฐ (width, height) ์ ๋ฐฐ๊ฒฝ์ (background_color) ๋ฑ์ ์ง์ ํ ๋ค, generate_from_frequencies() ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฝ๋๋ค.
from wordcloud import WordCloud
# Set your font path
font_path = 'YOUR_FONT_DIR/truetype/nanum/NanumBarunGothic.ttf'
krwordrank_cloud = WordCloud(
font_path = font_path,
width = 800,
height = 800,
background_color="white"
)
krwordrank_cloud = krwordrank_cloud.generate_from_frequencies(passwords)
Jupyter notebook ์์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋์๋ ๋ฐ๋์ ์๋์ฒ๋ผ %matplotlib inline ์ ์ ๋ ฅํด์ผ ํฉ๋๋ค. .py ํ์ผ๋ก ๋ง๋ค ๋์๋ ์ด๋ฅผ ์ ๋ ฅํ์ง ์์ต๋๋ค.
%matplotlib inline
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10, 10))
plt.imshow(krwordrank_cloud, interpolation="bilinear")
plt.show()
๊ทธ๋ ค์ง ๊ทธ๋ฆผ์ ์ ์ฅํ ์ ์์ต๋๋ค.
fig.savefig('./lalaland_wordcloud.png')
์ ์ฅ๋ ๊ทธ๋ฆผ์ ์๋์ ๊ฐ์ต๋๋ค.
Key-sentence extraction
KR-WordRank >= 1.0.0
๋ถํฐ๋ key sentence extraction ์ ์ ๊ณตํฉ๋๋ค. KR-WordRank ๋ ํ๊ตญ์ด์ ํ ํฌ๋์ด์ ๊ธฐ๋ฅ์ด ๋ด์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ํ ํฌ๋์ด์ง์ด ๋ ๋ฌธ์ฅ ๊ฐ ์ ์ฌ๋๋ฅผ ์ด์ฉํ๋ TextRank ๋ฐฉ์์ ์ด์ฉํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋์ KR-WordRank ์์๋ keywords ๋ฅผ ๋ง์ด ํฌํจํ ๋ฌธ์ฅ์ ํต์ฌ ๋ฌธ์ฅ์ผ๋ก ์ ํํฉ๋๋ค. ๋ฌธ์ฅ์ ์ถ์ถํ๋ ์๋ฆฌ๋ ์ถ์ถ๋ ํค์๋์ ๋ญํฌ๊ฐ์ ์ด์ฉํ์ฌ ํค์๋ ๋ฒกํฐ๋ฅผ ๋ง๋ ๋ค, ์ฝ์ธ์ธ ์ ์ฌ๋ ๊ธฐ์ค์ผ๋ก ์
๋ ฅ๋ ๋ฌธ์ฅ ๋ฒกํฐ๊ฐ ํค์๋ ๋ฒกํฐ์ ์ ์ฌํ ๋ฌธ์ฅ์ ์ ํํ๋ ๊ฒ์
๋๋ค.
summarize_with_sentences ํจ์์ texts ๋ฅผ ์ ๋ ฅํ๋ฉด KR-WordRank ๋ฅผ ํ์ตํ์ฌ ํค์๋์ ์ด๋ฅผ ์ด์ฉํ ํต์ฌ ๋ฌธ์ฅ์ ์ ํํฉ๋๋ค.
from krwordrank.sentence import summarize_with_sentences
texts = [] # ๋ผ๋ผ๋๋ ์ํํ
keywords, sents = summarize_with_sentences(texts, num_keywords=100, num_keysents=10)
keywords ์๋ KR-WordRank ๋ก๋ถํฐ ํ์ต๋ num_keywords
๊ฐ์์ ํค์๋์ ์ด๋ค์ ๋ญํฌ ๊ฐ์ด dict{str:float} ํ์์ผ๋ก ์ ์ฅ๋์ด ์์ต๋๋ค.
{'์ํ': 201.02402099523516,
'๋๋ฌด': 81.53699026386887,
'์ ๋ง': 40.53709233921311,
'์์
': 40.43446188536923,
'๋ง์ง๋ง': 38.598509495213484,
'๋ฎค์ง์ปฌ': 23.198810378709844,
'์ต๊ณ ': 21.810147306627464,
'์ฌ๋': 20.638511587426862,
'๊ฟ์': 20.43744237599688,
'์๋ฆ': 20.324710458174806,
'์์': 20.283994278960186,
'์ฌ์ด์ด': 19.471356929084546,
'์ง์ง': 19.06433920013137,
'๋
ธ๋': 18.732801785265316,
...
}
sents ์๋ num_sents
๊ฐ์ ํต์ฌ ๋ฌธ์ฅ์ด list of str ํ์์ผ๋ก ํฌํจ๋์ด ์์ต๋๋ค.
['์ฌ์ด์ด ํฌ๊ฒ๋จ๋์ํ ์ ๋ง์คํค ๋๋ฌด ์ฌ๋์ค๋ฝ๊ณ ๋ผ์ด์ธ๊ณ ์ฌ๋ง ๋จ์๊ฐ๋ด๋ ์ ๋ง ๋งค๋ ฅ์ ์ธ ๋ฐฐ์ฐ์ธ๋ฏ ์์๋ฏธ ์์
์ฐ๊ธฐ ๊ตฌ์ฑ ์ ๋ถ ์ข์๊ณ ๋ง์ง๋ง ์๋ฉ๊น์ง ์ ์ ํ๋ฉด์ ์ ํํ๊ตฌ์ 30์ค๋ฐ์ ๊ฐ์ ์ด ๋ง์ด ๋ฉ๋ง๋ผ์์๋๋ฐ ์ค๋๋ง์ ๊ฐ์ด์ด ์ด์ดํด์ง๋ค์',
'์์๋ฏธ๋ ๋๋ฌด ์๋ฆ๋ต๊ณ ์ ๋๋ ์์
๋ ์ข์๋ค ๋ง์ง๋ง ์ธ๋ฐ์ค์ฐฌ๊ณผ ๋ฏธ์์ ๋๋น๊ตํ์ ์ ๋ง ๋ง์ ์ํ ์ ์ํ๊ด์ ๊ณ ๋ฉ๋ค์ด ์์ฒญ ๋ง๋๋ฐ ๊ณ ๋ฉ๋ค์ ์ํ ๋ด์ฉ ์ดํด๋ฅผ ๋ชปํ๋๋ผใ
กใ
ก์ฌ๋์ ๊น๊ฒ ํด๋ณธ ์ฌ๋์ด๋ผ๋ฉด ๋๊ตฌ๋ ๋๊ปด๋ณผ์์๋ ๋จน๋จนํจ์ด ์๋ค',
'์ ๋ง ์์๋ฏธ๋ ์์
์ ์ต๊ณ ์๋ค ๊ทธ๋ฆฌ๊ณ ์ ์ ํ๋ค ์์
์ด ๋๋ฌด ๋ฉ์์ด์ ์ฐ๊ธฐ๋ฅผ ๋ด์ผ ํ ์ง ๋
ธ๋๋ฅผ ๋ค์ด์ผ ํ ์ง ๋ชจ๋ฅผ ์ ๋๋ก ๊ทธ๋ฆฌ๊ณ ๋ณด๊ณ ๋์ ์๊ฐ ์ข ๋ง์์ง ์ํ ์ ๋ง ์ด ์ฐ๋ง์ ๋ณด๊ธฐ ์ข์ ์ํ ์ธ ๊ฒ ๊ฐ๋ค',
'๋ฌด์ธ์ ๋ง์ง๋ง ํผ์๋
ธ์ฐ์ฃผ ์์ ์ฌํใ
๋ณด๋์ด๋ค์๊ฒ ๊ฟ์ ์๊ธฐ์์ผ์ค๋ฏ ๋ ๋ณด๊ณ ์ถ์ ๋ด์์ ์ต๊ณ ์ ๋ฎค์ง์ปฌ์ํ์์ ๋จ์ํ ์ ์๋ ๋ด์ฉ์ ๋ฎค์ง์ปฌ์ ๊ฐ๋ฏธ์์ผ์งธ์ฆ์์
๊ณผ ์ถค์ผ๋ก ์ง๋ฃจํ ํ์์ด ๋น ์ ธ์๋ด ost๋๋ฌด์ข์์',
'์ฒ์์ ์ด๋ฉ๋ค ๋ณด๋ ๊ทธ๋ฅ ๊ทธ๋ฐ์ํ์ธ์ค ์์๋๋ฐ ์ ๋ง๋ก ๋๊ณผ ๊ท๊ฐ ์ฆ๊ฑฐ์ด ์ํ์์ต๋๋ค ์ด์ฐ๋ณด๋ฉด ๋ปํ ์คํ ๋ฆฌ์ผ์ง ๋ชฐ๋ผ๋ ๊ทธ๋ฅ ๋ณด๊ณ ๋ฃ๋๊ฒ ์ฆ๊ฑฐ์ด ๊ทธ๋ฌ๋ค๊ฐ ์ ๋ง ๋ง์ง๋ง์ ๋๋ฌด ์๋ฆ๋ต๊ณ ์ฌํ ์์
์ด ๋์ด๋ฒ๋ฆฐ',
'์ ๋ง ๋ฉ์ง ๋
ธ๋์ ์์
๊ณผ ์์๋ฏธ๊น์ง ์ ๋ง ๋๋ฌด ๋ฉ์๋ ์ํ ๋๋ฌผ์ ํ๋ฆฌ๋ฉด์ ๋ดค์ต๋๋ค ์ํ๊ฐ ๋๋ ์๊ฐ ๊ฐํ๊ณผ ๋์์ ์ฌ์ด์ด ๊ธธ๊ฒ ๋จ์ ๋ ๋๋ฌผ์ ํ๋ ธ๋๋ด ์ธ์ ์ต๊ณ ์ ๋ฎค์ง์ปฌ ์ํ',
'ํ์ ๋ฎค์ง์ปฌ ์ํ ์ข์ํ๋ ํธ์ธ๋ฐ๋ ํ์ ์ ๋นํด ๋๋ฌด๋ ๋ณ๋ก์๋ ์ํ ์ฌ์ฆ์์
์ด๋ ์์๋ฏธ ๊ฐ์ ๊ฑด ์ข์์ง๋ง ์ค๊ฑฐ๋ฆฌ๋ ๊ธ์ ๊ฒฐ๋ง์ ์ ๋ง ๋ณ๋ก 6 7์ ์ ๋ ์ฃผ๋๊ฒ ๋ง๋ค๊ณ ์๊ฐํ์ง๋ง ๊ฐ์ธ์ ์ผ๋ก ํ๋ฐ๋ถ๊ฐ ๋๋ฌด ๋ณ๋ก์ฌ์',
'์ค๋๋ง์ ์ข์ ์ํ๋ดค๋ค๋ ์๊ฐ๋ค์๊ตฌ์ ์์
๋ ์์๋ ์คํ ๋ฆฌ๋ ๋๋ฌด๋์ข์๊ณ ๋ฌด์๋ณด๋ค ์งํ ์ฌ์ด์ด ๋จ๋ ์ํ๋ ์ ๋ง ์ค๋๋ง์ด์์ด์ ์ฐ์ธ๋ผ๋ฆฌ ๊ฐ์ ๋ณด๊ธฐ ์ ๋ง ์ข์์ํ ๋๋ฎค๋๋ฎค๋๋ฎค ์ฌ๋ฐ๊ฒ ์ ๋ดค์ต๋๋ค',
'์์
๋ฏธ์ ์ฐ๊ธฐ ๋ฑ ๋ชจ๋ ๊ฒ์ด ์ข์์ง๋ง ๋ง์ง๋ง ๊ฒฐ๋ง์ด ๋๋ฌด ํ์ค์ ๋ค๋จ์ด์ง ๊ฟ๋ง ๊ฐ๋ค ๊ฟ์ ์ด์ผ๊ธฐํ๋ ์ํ์ง๋ง ๊ณผ์ ๊ณผ ๊ฒฐ๊ณผ์ ์์ด ์์ ๊ฐ๋ค์ ํ์ค์ ๋๋ฌด ๋ฐ์ํ์ง ๋ชปํ ๊ฒ์ด ์๋๊ฐํ๋ ์๊ฐ์ด๋ ๋ค ๊ทธ๋์ ๋ณด๊ณ ๋ ๋ค ๋๋ ๊ฟ์ ๊ฟ์ผํ๋๋ฐ ํํํ๋ค',
'๋ง์ง๋ง ํ์์ฌ์ ๊ฐ๋์ด ์ํ์ง์ง์๋๋ค๋ง์ง๋ง ์ญ๋ถ๋ง์ผ๋ก ํฐ์ผ๊ฐ์ด ์๊น์ง์์ ์ํ ์์
๋ค๋ ๋๋ฌด ์๋ฆ๋ค์ ๋ค์๋ ๋ฎค์ง์ปฌ ๊ฐ์ ๋นํฐ์ง์์๋ฏธ๋ ์ต๊ณ ']
๋ช ๊ฐ์ง ํจ๋ฌ๋งคํฐ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ธธ์ด๊ฐ ์ง๋์น๊ฒ ๊ธธ๊ฑฐ๋ ์งง์ ๋ฌธ์ฅ์ ์ ๊ฑฐํ๊ธฐ ์ํด penalty ํจ์๋ฅผ ์ ์ํฉ๋๋ค. ์๋๋ ๊ธธ์ด๊ฐ 25 ๊ธ์๋ถํฐ 80 ๊ธ์์ธ ๋ฌธ์ฅ์ ์ ํธํ๋ค๋ ์๋ฏธ์
๋๋ค. stopwords ๋ ํค์๋์์ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ค์ ํค์๋๋ฒกํฐ๋ฅผ ๋ง๋ค ๋์๋ ์ด์ฉ๋์ง ์์ต๋๋ค. ๋ํ ํค์๋ ๋ฒกํฐ์ ์ ์ฌํ ๋ฌธ์ฅ์ ์ฐ์ ์ ์ผ๋ก ์ ํํ๋ค๋ณด๋ฉด ์ด์ ์ ์ ํ๋ ๋ฌธ์ฅ๊ณผ ์ค๋ณต๋๋ ๋ฌธ์ฅ๋ค์ด ์ ํ๋๊ธฐ๋ ํฉ๋๋ค. ์ด๋ diversity
๋ฅผ ์ด์ฉํ์ฌ ์กฐ์ ํ ์ ์์ต๋๋ค. diversity
๋ ์ฝ์ธ์ธ ์ ์ฌ๋ ๊ธฐ์ค ํต์ฌ๋ฌธ์ฅ ๊ฐ์ ์ต์ ๊ฑฐ๋ฆฌ ์
๋๋ค. ์ด ๊ฐ์ด ํด์๋ก ๋ค์ํ ๋ฌธ์ฅ์ด ์ ํ๋ฉ๋๋ค.
penalty = lambda x:0 if (25 <= len(x) <= 80) else 1
stopwords = {'์ํ', '๊ด๋๊ฐ', '๋๋ฌด', '์ ๋ง', '์ง์ง'}
keywords, sents = summarize_with_sentences(
texts,
penalty=penalty,
stopwords = stopwords,
diversity=0.5,
num_keywords=100,
num_keysents=10,
verbose=False
)
์ด๋ฒ์ ์ถ์ถ๋ ํค์๋์๋ ์ํ
, ๊ด๋๊ฐ
, ๋๋ฌด
์ ๊ฐ์ stopwords ๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค.
{'์์
': 40.43446188536923,
'๋ง์ง๋ง': 38.598509495213484,
'๋ฎค์ง์ปฌ': 23.198810378709844,
'์ต๊ณ ': 21.810147306627464,
'์ฌ๋': 20.638511587426862,
'๊ฟ์': 20.43744237599688,
'์๋ฆ': 20.324710458174806,
'์์': 20.283994278960186,
'์ฌ์ด์ด': 19.471356929084546,
'๋
ธ๋': 18.732801785265316,
...
}
ํต์ฌ ๋ฌธ์ฅ๋ ๊ธธ์ด๊ฐ 25 ~ 80 ๊ธ์์ธ ๋ฌธ์ฅ๋ค์ ์ ํธํฉ๋๋ค.
['์ต๊ณ ๋ผ๋ ๋ง๋ฐ์ ์์
์ฐ์ถ ์์ ์คํ ๋ฆฌ ๋ชจ๋์๋ฒฝ ๋ง์ง๋ง 10๋ถ์์์์๋ค ํํธ์ ๋ฎค์ง์ปฌ์๋ณธ๋ฏํ ๋๋์ธ์์ํ',
'๊ธฐ๋ํ์๋๋ฐ ์ ํํ
์คํ ๋ฆฌ๋ ์์
๋ ํ๋ฒํ์ด์ ์ํ๋ณด๋๋ด๋ด ์ง๋ฃจํ๋ค๋ ๋๋์ ๋ง์ด ๋ฐ์๋๋ฐ ์ ๊ธฐํ๊ฒ๋ ๋ง์ง๋ง ์ฌ์ ๋ณด๊ณ ๋๋ ์ฌ์ด์ด ๋จ๋ค์',
'์ฌํ์ง๋ง ์๋ฆ๋ค์ ๋ ๋์ฌ๋์ ์ฌ๋๊ณผ ๊ฐ๋ฑ ๊ทธ๋ฆฌ๊ณ ์์
๋ง์ง๋ง ์ค๋ฒ๋ฉ์ ๊ทธ๋ฅ ํ ๋ง์ ์์์ต๋๋ค ์ฌ์ด์ด ๋จ๋ ์ํ',
'๋ง์ง๋ง ํ์์ ์์ ๋๋ฌผ์ด ์์นต ์์์ง๋ปํ๋ค ์ฌํด์ค ์ต๊ณ ์ ์ํ๋ฅผ ๋ณธ๊ฑฐ ๊ฐ๋ค์์
์ด๋ฉฐ ๋ฐฐ์ฐ๋ค์ด๋ฉฐ ์์์ด๋ฉฐ ๋ค์ ๋ ๋ณด๊ณ ์ถ์ ๊ทธ๋ฐ ์ํ์ด๋ค',
'์์ ์์๊ณผ ์๋ฆ๋ค์ด ์์
๊ฟ์ ์ซ๋ ๋์ฌ๋์ ์ ํ์ด ๋ฌ๋๋ค๋ฉด ์ด๋ ์๊น ์์ํ๋ ์ฅ๋ฉด์ด ์ธ์๊น์๋ค ์ธ์ธํ์ง๋ง ํ์ค์ ์ธ ์ฌ๋์ด๋๊น',
'์์
๋ ์ข๊ณ ๋ฏธ์์ ์ธ๋ฐ์คํฐ์์ ์๋ฆ๋ค์ด ์ฌ๋๊ณผ ์์ ์ ๋ํ ์ด์ ์ด ๊ฐ๋์ ์ด์์ต๋๋ค ์ฌ์ฆ์์
์ ์ฌ๋ํ๊ณ ๋ฎค์ง์ปฌ์ ์ข์ํ๋ ์ฌ๋๋ค์๊ฒ ๊ฐ์ถํฉ๋๋ค',
'์๊ฐ๋ณด๋ค ๊ต์ฅํ ์ฌ๋ฏธ์๋ ๋ปํ ๊ฒฐ๋ง๋ ์๋๊ณ ์๋ฆ๋ค์ด ์์
๊ณผ ํ์ค์ ์ธ ์คํ ๋ฆฌ๊ตฌ์ฑ ๋ชจ๋์๊ฒ ์๋ฟ์๋ฒํ ์ธ๋ฆผ๋ค์ด ์ฐจ ์ข์์ด์ ์ถ์ฒ',
'์ต๊ณ ์
๋๋ค ๋ง์ง๋ง ์ฅ๋ฉด์ ์ํด ์์
๊ณผ ํจ๊ป ๋ฌ๋ ค์๊ณ ํ์ค์ ์ด์ง๋ง ๋ชจ๋์ ๊ฐ์ด์ ๋ญํดํ๊ฒ ๋ง๋๋ ๋ฉ์ง ๊ฒฐ๋ง์
๋๋ค ๋
ธ๋๊ฐ ๋จธ๋ฆฌ์์์ ๋ ๋์ง์๋ค์',
'๋จผ์ ์์
์ด ๋๋ฌด ์ข๊ณ ์๋ฆ๋ค์ด ์์๋ฏธ๋ง์ผ๋ก๋ ์ต๊ณ ๋ค์ ์๋ฆ๋ต์ง๋ง ์ง ๋ด๋ ๋๊ตฌ์ ๋ณ ์๊ฐ์์ด ๋ดค๋๋ฐ ๊ฐ์ถ์
๋๋ค ์ํ๋ณด๊ณ ๊ณ์ ์์
์ด ๊ท์ ๋งด๋์์',
'์ด๋ฐ์ ์ข ์ง๋ฃจํ๋ ์์
๋ ์ข๊ณ ์์๋ ์ข์์ ๋ณด๋ ๋ง์ด ์์ด์ ๋ง์ง๋ง์ด ์ข์์ด์']
๋ง์ฝ ๋ง์ง๋ง
์ด๋ผ๋ ๋จ์ด๊ฐ ํฌํจ๋ ๋ฌธ์ฅ๋ ํต์ฌ ๋ฌธ์ฅ์์ ์ ๊ฑฐํ๊ณ ์ถ๋ค๋ฉด ์๋์ฒ๋ผ penalty
ํจ์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
penalty=lambda x:0 if (25 <= len(x) <= 80 and not '๋ง์ง๋ง' in x) else 1,
keywords, sents = summarize_with_sentences(
texts,
penalty=penalty,
stopwords = stopwords,
diversity=0.5,
num_keywords=100,
num_keysents=10,
verbose=False
)
print(sents)
['์์ ์์๊ณผ ์๋ฆ๋ค์ด ์์
๊ฟ์ ์ซ๋ ๋์ฌ๋์ ์ ํ์ด ๋ฌ๋๋ค๋ฉด ์ด๋ ์๊น ์์ํ๋ ์ฅ๋ฉด์ด ์ธ์๊น์๋ค ์ธ์ธํ์ง๋ง ํ์ค์ ์ธ ์ฌ๋์ด๋๊น',
'์์
๋ ์ข๊ณ ๋ฏธ์์ ์ธ๋ฐ์คํฐ์์ ์๋ฆ๋ค์ด ์ฌ๋๊ณผ ์์ ์ ๋ํ ์ด์ ์ด ๊ฐ๋์ ์ด์์ต๋๋ค ์ฌ์ฆ์์
์ ์ฌ๋ํ๊ณ ๋ฎค์ง์ปฌ์ ์ข์ํ๋ ์ฌ๋๋ค์๊ฒ ๊ฐ์ถํฉ๋๋ค',
'์๊ฐ๋ณด๋ค ๊ต์ฅํ ์ฌ๋ฏธ์๋ ๋ปํ ๊ฒฐ๋ง๋ ์๋๊ณ ์๋ฆ๋ค์ด ์์
๊ณผ ํ์ค์ ์ธ ์คํ ๋ฆฌ๊ตฌ์ฑ ๋ชจ๋์๊ฒ ์๋ฟ์๋ฒํ ์ธ๋ฆผ๋ค์ด ์ฐจ ์ข์์ด์ ์ถ์ฒ',
'๋จผ์ ์์
์ด ๋๋ฌด ์ข๊ณ ์๋ฆ๋ค์ด ์์๋ฏธ๋ง์ผ๋ก๋ ์ต๊ณ ๋ค์ ์๋ฆ๋ต์ง๋ง ์ง ๋ด๋ ๋๊ตฌ์ ๋ณ ์๊ฐ์์ด ๋ดค๋๋ฐ ๊ฐ์ถ์
๋๋ค ์ํ๋ณด๊ณ ๊ณ์ ์์
์ด ๊ท์ ๋งด๋์์',
'์ฌ๋ ๊ฟ ํ์ค ๋ชจ๋ ๊ฑธ ๋ค์ํ๋ฒ ์๊ฐํ๊ฒ ํ๋ ์ํ์์ด์ ์์๋ฏธ๋ ๋๋ฌด ์์๊ณ ์ฃผ์ธ๊ณต๋ ์์๊ณ ๋ด์ฉ๋ ์๋ฆ๋ต๋ค์ใ
ใ
์ธ์ ์ํ',
'๋๋ฌด ์ข์ ์ํ ์คํ ๋ฆฌ๋ ๋น์ซํ๊ฒ๊ฐ์์ ๊ทธ๋๋ ์์
์์ ์ด๋ฃจ์ด์ง์ง์๋ ์ฌ๋์ ๋ ๋งค๋ ฅ์ ์ผ๋ก ์ ๋ฌํ์ํ์ธ๊ฒ๊ฐ์์ ๋ณด๊ณ ๋์๋ ์ฌ์ด์ด ๋จ๋',
'๋
ธ๋๋ ์ข๊ณ ์์๋ฏธ๋ ์ข๊ณ ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ฐ๋ค ์ฐ๊ธฐ๊น์ง ์ ๋ง ์ข์์ด์ ๊ฐ์ธ์ ์ผ๋ก ๋ฎค์ง์ปฌ ํ์ ์ํ๋ฅผ ์์ข์ํ๋ ํธ์ธ๋ฐ ์ฌ๋ฐ๊ฒ ๋ดค์ต๋๋ค',
'16๋
์ต๊ณ ์์ํ ์ธ์์ํ์
๋๋ค ์์๋ฏธ ์๊ฐ ์์
๊ฐ์ ์ ๋ค์ข์๋๋ฐ ์๋ฉ์ด ์ฐธํ์ค์ ์ด๋ค์ ใ
ใ
์ฐธ ๊ณต๊ฐ๋๊ณ ๊ฐ๋๋ฐ์์ต๋๋ค ์์ธํ๋ ์ ๋ง์๋ดค์ด์',
'์ฌ์ค ๋๋ฒ์งธ ๋ณด๋ ์ํ์
๋๋ค ์์ ํธ์ง๊ณผ ์์
์ด ๋๋ฌด ์ข์์ ์ด๋ป๊ฒ ๋ณด๋ฉด ๋๋ฌด๋ ํ์ค์ ์ผ ์ ์๋ ๊ฒฐ๋ง์ด ์ฌํ๊ธฐํ์ง๋ง ์๋ฆ๋ต์ต๋๋ค',
'์ํ์ฌ์ ๋จ์ ์ต๊ณ ์ ๋ฎค์ง์ปฌ์ํ์
๋๋ค ์์
๊ณผ ์์์ด ๋๋ฌด ์๋ฆ๋ต๊ณ ๋ ์ฃผ์ฐ๋ฐฐ์ฐ์ ์ฐ๊ธฐ๋ ๋งค์ฐ ๊ฐ๋์ ์
๋๋ค ๋ฌด์กฐ๊ฑด ๋ณด์ธ์ ์ต๊ณ ']
๋ ์์ธํ key sentence extraction tutorials ์ tutorials ํด๋์ krwordrank_keysentence.ipynb ํ์ผ์ ์ฐธ๊ณ ํ์ธ์.
Setup
pip install krwordrank
tested in
- python 3.5.9
- python 3.7.7
Requirements
- Python >= 3.5
- numpy
- scipy