def summarize_text(text): # < workaround cooes > for crash problem with django and konlpy # - related issue : https://github.com/konlpy/konlpy/issues/104 if jpype.isJVMStarted(): jpype.attachThreadToJVM() # < workaround codes end!!! > #print_with_timestamp("textrank init") _textrank = TextRank(text) #print_with_timestamp("textrank init end") return _textrank.summarize()
def summerize(event, context): if not event['body']: return {"statusCode": 400, "body": ""} textrank = TextRank(event['body'], phraser=ApiPhraser(api_url=phraser_api_url).phrases) response = { "statusCode": 200, "body": textrank.summarize(), "headers": { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "POST" } } return response
def parse_link(url): req = requests.get(url) soup = bs(req.text, 'html.parser') title = str( soup.find('h3', { 'class': 'ending_tit_new' }).find('img')['alt']) img_url = soup.find('span', {'class': 'img_wrap2'}) if img_url: img_url = str(img_url.find('img')['src']) soup = soup.find('div', {'class': 'na_doc'}) [tag.extract() for tag in soup.find_all('caption')] [tag.extract() for tag in soup.find_all('p', {'class': 'cap'})] [tag.extract() for tag in soup.find_all('div', {'class': 'tmp_source2'})] [tag.extract() for tag in soup.find_all('div', {'id': 'na_author_top'})] [tag.extract() for tag in soup.find_all('div', {'class': 't_pdate'})] [tag.extract() for tag in soup.find_all('div', {'class': 'na_cmt_bx'})] [tag.extract() for tag in soup.find_all('', {'style': 'display:none'})] text_all = ' '.join(soup.get_text().split()) ret = list() ret.append(title) ret.append(url) ret.append(img_url) import jpype if jpype.isJVMStarted(): jpype.attachThreadToJVM() ret.append(TextRank(text_all).summarize().split('\n')) return ret
class TestTextrankr(unittest.TestCase): def setUp(self): self.text = "ํธ์ํฐ, \"์ ๋ณด๋น๊ตญ์ ๋ฐ์ดํฐ ๋ถ์์๋ฃ ํ์ง ์๊ฒ ๋ค\". ํธ์ํฐ๊ฐ ์๋ง์ ํธ์์ ๋ถ์ํด ์ ๋ณด๋ฅผ ํ๋งคํ๋ ์๋น์ค๋ฅผ ๋ฏธ๊ตญ ์ ๋ณด๋น๊ตญ์๋ ์ ๊ณตํ์ง ์๊ธฐ๋ก ํ๋ค. ์์คํธ๋ฆฌํธ์ ๋์ ๋ฏธ๊ตญ ์ ๋ณด๋น๊ตญ ๊ด๊ณ์ ๋ฑ์ ์ธ์ฉํด ๋ฐ์ดํฐ๋ง์ด๋(Dataminer)๊ฐ ์ ๋ณด๋น๊ตญ์ ๋ํ ์๋น์ค๋ ์ค๋จํ๊ธฐ๋ก ํ๋ค๊ณ 9์ผ(ํ์ง์๊ฐ) ๋ณด๋ํ๋ค. ํธ์ํฐ๊ฐ 5% ์ง๋ถ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ง์ด๋๋ ์์ ๋ฏธ๋์ด์ ์๋ฃ๋ฅผ ๋ถ์ํด ๊ณ ๊ฐ์ด ์์ฌ๊ฒฐ์ ์ ํ๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ธฐ์ ์ด๋ค. ํธ์ํฐ์ ์ฌ๋ผ์ค๋ ํธ์์ ์ค์๊ฐ์ผ๋ก ์ ๊ทผํด ๋ถ์ํ ์๋ฃ๋ฅผ ๊ณ ๊ฐ์๊ฒ ํ ์ ์๋ ๋ ์ ๊ถ์ ๊ฐ๊ณ ์๋ค. ์ ๋ณด๋น๊ตญ์ ์ด ํ์ฌ๋ก๋ถํฐ ๊ตฌ๋งคํ ์๋ฃ๋ก ํ ๋ฌ๋ ์ ์น์ ๋ถ์์ ๋ฑ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ํ๋ํ๋ค. ์ด ํ์ฌ๊ฐ ์ ๋ณด๋น๊ตญ์ ์๋น์ค๋ฅผ ํ๋งคํ์ง ์๊ธฐ๋ก ํ ๊ฒ์ ํธ์ํฐ์ ๊ฒฐ์ ์ธ ๊ฒ์ผ๋ก ์๋ ค์ก๋ค. ๋ฐ์ดํฐ๋ง์ด๋ ๊ฒฝ์์ง์ ์ต๊ทผ โํธ์ํฐ๊ฐ ์ ๋ณด๋น๊ตญ์ ์๋น์คํ๋ ๊ฒ์ ์์น ์๋๋คโ๊ณ ๋ฐํ๋ค๊ณ ์ด ์ ๋ฌธ์ ์ ํ๋ค. ํธ์ํฐ๋ ์ฑ๋ช ์ ๋ด๊ณ โ์ ๋ณด๋น๊ตญ ๊ฐ์์ฉ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ง ์๋ ๊ฒ์ ํธ์ํฐ์ ์ค๋๋ ์ ์ฑ โ์ด๋ผ๋ฉฐ โํธ์ํฐ ์๋ฃ๋ ๋์ฒด๋ก ๊ณต๊ฐ์ ์ด๊ณ ๋ฏธ๊ตญ ์ ๋ถ๋ ๋ค๋ฅธ ์ฌ์ฉ์์ฒ๋ผ ๊ณต๊ฐ๋ ์ด์นด์ดํธ๋ฅผ ์ดํด๋ณผ ์ ์๋คโ๊ณ ํด๋ช ํ๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ด ํ์ฌ๊ฐ 2๋ ๋์ ์ ๋ณด๋น๊ตญ์ ์๋น์ค๋ฅผ ์ ๊ณตํด ์จ ๋ฐ ๋ํด์๋ ํ๋นํ ์ค๋ช ์ด ๋์ง ์๋๋ค. ํธ์ํฐ์ ์ด๋ฒ ๊ฒฐ์ ์ ๋ฏธ๊ตญ์ ์ ๋ณด๊ธฐ์ (IT)๊ธฐ์ ๊ณผ ์ ๋ณด๋น๊ตญ ๊ฐ ๊ฐ๋ฑ์ ์ฐ์ฅ ์ ์์์ ์ด๋ค์ง ๊ฒ์ผ๋ก ์ฌ๊ฒจ์ง๊ณ ์๋ค. IT๊ธฐ์ ์ ์ด์ฉ์ ํ๋ผ์ด๋ฒ์์ ๋ฌด๊ฒ ์ค์ฌ์ ๋๋ ๋ฐ ๋นํด ์ ๋ณด๋น๊ตญ์ ๊ณต๊ณต์์ ์ ์ฐ์ ์ํด ์ฐจ์ด๊ฐ ์์๋ค. ํนํ ์ ํ์ ์บ๋ฆฌํฌ๋์ ์ฃผ ์๋ฒ๋๋๋ ธ ์ด๊ฒฉ๋ฒ์ ์์ดํฐ์ ์ ์ฅ๋ ์ ๋ณด๋ฅผ ๋ณด๊ฒ ๋ค๋ฉฐ ๋ฐ์ดํฐ ์ ๊ธ์ฅ์น ํด์ ๋ฅผ ์๊ตฌํ๋ ๋ฏธ ์ฐ๋ฐฉ์์ฌ๊ตญ(FBI)๊ณผ ์์ก๊น์ง ์งํํ๋ค. ์ ๋ณด๋น๊ตญ ๊ณ ์ ๊ด๊ณ์๋ โํธ์ํฐ๊ฐ ์ ๋ณด๋น๊ตญ๊ณผ ๋๋ฌด ๊ฐ๊น์ ๋ณด์ด๋ ๊ฒ์ ์ฐ๋ คํ๋ ๊ฒ ๊ฐ๋คโ๊ณ ๋งํ๋ค. ๋ฐ์ดํฐ๋ง์ด๋๋ ๊ธ์ต๊ธฐ๊ด์ด๋, ์ธ๋ก ์ฌ ๋ฑ ์ ๋ณด๋น๊ตญ์ ์ ์ธํ ๊ณ ๊ฐ์ ๋ํ ์๋น์ค๋ ๊ณ์ํ ๊ณํ์ด๋ค. ." self.textrank = TextRank(self.text) def test_ranked(self): results = self.textrank.summarize(3, verbose=False) self.assertEqual(len(results), 3) self.assertEqual(results[0], "ํธ์ํฐ, \"์ ๋ณด๋น๊ตญ์ ๋ฐ์ดํฐ ๋ถ์์๋ฃ ํ์ง ์๊ฒ ๋ค\".") def test_verbose(self): result = self.textrank.summarize(1, verbose=True) self.assertEqual(result, "ํธ์ํฐ, \"์ ๋ณด๋น๊ตญ์ ๋ฐ์ดํฐ ๋ถ์์๋ฃ ํ์ง ์๊ฒ ๋ค\".") def test_sentence(self): sent = self.textrank.sentences[0] self.assertEqual(str(sent), "ํธ์ํฐ, \"์ ๋ณด๋น๊ตญ์ ๋ฐ์ดํฐ ๋ถ์์๋ฃ ํ์ง ์๊ฒ ๋ค\".")
def summareader(): url = "https://news.naver.com" context = ssl._create_unverified_context() response = urlopen.urlopen(url, context=context) objBS = bs4.BeautifulSoup(response, "html.parser") news_item = objBS.find_all("ul", {"class": "section_list_ranking"}) naverurl = [] newstitle = [] article = [] for nws in news_item: txt = nws.find_all("a") for we in txt: k = "https://news.naver.com" + we.get('href') title = we.text.strip() naverurl.append(k) newstitle.append(title) for i in range(len(naverurl)): url = naverurl[i] context2 = ssl._create_unverified_context() response2 = urlopen.urlopen(url, context=context) objBS2 = bs4.BeautifulSoup(response2, "html.parser") newstime = str(objBS2.select('.t11')) newstime = re.sub('<.+?>', '', newstime, 0, re.I | re.S) newscontent = str( objBS2.find("div", {"class": "_article_body_contents"})) newscontent = re.sub('<script.*?>.*?</script>', '', newscontent, 0, re.I | re.S) text = re.sub('<.+?>', '', newscontent, 0, re.I | re.S) articlecontent = text textrank = TextRank(articlecontent) suma = textrank.summarize(3) article.append(suma) print(article[i]) print( "--------------------------------------------------------------------------------------------" ) return newstitle, article
def summarize_text(text): # < workaround cooes > for crash problem with django and konlpy # - related issue : https://github.com/konlpy/konlpy/issues/104 if jpype.isJVMStarted(): jpype.attachThreadToJVM() # < workaround codes end!!! > #print_with_timestamp("textrank init") #ignore_words = ["@newsworks.kr"] ignore_words = [] _textrank = TextRank(text, ignore_words) previous_sentence = "" for s in _textrank.get_sentences(): if len(previous_sentence) > 0 and previous_sentence == s: return "" if len(s) > SENTENCE_MAX_SIZE: return "" previous_sentence = s #print_with_timestamp("textrank init end") return _textrank.summarize()
def summareader(): url="https://news.naver.com" context=ssl._create_unverified_context() response=urlopen.urlopen(url, context=context) objBS= bs4.BeautifulSoup(response, "html.parser") news_item=objBS.find_all("ul",{"class":"section_list_ranking"}) naverurl=[] newstitle=[] article=[] for nws in news_item: txt=nws.find_all("a") for we in txt: k = "https://news.naver.com"+we.get('href') title=we.text.strip() naverurl.append(k) newstitle.append(title) for i in range(len(naverurl)): news = Article(naverurl[i], language='ko') news.download() news.parse() textrank = TextRank(news.text) suma=textrank.summarize(3) article.append(suma) # print(article[i],"\n-----------------------------------------------------------------------------------\n") # print(newstitle[i], "\n-----------------------------------------------------------------------------------\n") return newstitle, article # test = summareader() # print(test[0][0]) # print(test[1][0])
def total_work(total_train): new_text = [] mytokenizer: MyTokenizer = MyTokenizer() textrank: TextRank = TextRank(mytokenizer) for i in range(0, len(total_train)): if (total_train.loc[i, "๋ฌธ์ฅ ๊ฐ์"] >= 8): k: int = 8 summarized: str = textrank.summarize(total_train.loc[i, "์"], k) new_text.append(summarized + "\n") else: m = (7 - total_train.loc[i, "๋ฌธ์ฅ ๊ฐ์"]) // 2 + 1 k = total_train.loc[i, "๋ฌธ์ฅ ๊ฐ์"] main_summarized: str = textrank.summarize(total_train.loc[i, "์"], m) summarized: str = textrank.summarize(total_train.loc[i, "์"], k) if (m > 2): main_list = main_summarized.split("\n") for i in range(0, m): summarized = summarized.replace(main_summarized[i], "") new_text.append(main_summarized + "\n" + summarized + "\n" + main_summarized + "\n") else: new_text.append(main_summarized + "\n" + summarized + "\n" + main_summarized + "\n") text_model = markovify.NewlineText(new_text, state_size=2) lyrics = [] for i in range(8): lyrics.append(text_model.make_sentence()) lyrics = list(filter(lambda a: a != None, lyrics)) final = [] for i in range(0, len(lyrics)): if len(lyrics[i]) > 50: final.append(lyrics[i][:50]) final.append(lyrics[i][50:]) else: final.append(lyrics[i]) if not final: total_work(total_train) else: return final return final
def textfile_similarity(): data = request.get_json() data = text_parse_sen(data) mytokenizer: MyTokenizer = MyTokenizer() textrank: TextRank = TextRank(mytokenizer) k: int = 3 # num sentences in the resulting summary summarized: str = textrank.summarize(data, k) # print(summarized) # gives you some text # if verbose=False, it returns a list summaries: List[str] = textrank.summarize(data, k, verbose=False) # for summary in summaries: # print(summary) if request.method == 'POST': return json.dumps(summaries, ensure_ascii=False) return '3sentence'
def parse_link(url): req = requests.get(url) soup = bs(req.text, 'html.parser') title = str(soup.find('h3', {'class': 'ending_tit_new'}).find('img')['alt']) img_url = soup.find('span', {'class': 'img_wrap2'}) if img_url: img_url = str(img_url.find('img')['src']) soup = soup.find('div', {'class': 'na_doc'}) [tag.extract() for tag in soup.find_all('p', {'class': 'cap'})] [tag.extract() for tag in soup.find_all('caption')] dl = soup.find('dl', {'class': 'na_reference'}) if not dl: dl = soup.find('div', {'id': 'na_author_top'}) if not dl: [tag.extract() for tag in [tag for tag in dl.next_elements]] text_all = str(soup) helper = HTML2Text() helper.ignore_links = True helper.ignore_images = True helper.ignore_tables = True text_all = helper.handle(text_all) for ch in ['#', '/', '*', '_', '>', '>', '<', ';', ':', '\\']: text_all = text_all.replace(ch, ' ') text_all = ' '.join(text_all.split()) ret = list() ret.append(title) ret.append(url) ret.append(img_url) import jpype if jpype.isJVMStarted(): jpype.attachThreadToJVM() ret.append(TextRank(text_all).summarize().split('\n')) return ret
from __future__ import print_function from textrankr import TextRank textrank = TextRank("์๋ ์ธ๊ฐ์ ์ถ์ ๋ฐ์ํ๋ค. ์์์ ๋ฐ์์ ํ์ค๊ณผ ์ธ์์ ๋ชจ๋ฐฉํ๋ค๋ ์๋ฏธ์์ ์ธ๋ถ ํ์ค์ ์ ์์ ๋ด์๋ด๋๊ฒ์ผ๋ก, ์ญ์ฌ์ ํ์ค์ ์ํฉ์ ์๋ฅผ ํตํด ์ด๋ป๊ฒ ์ฌํํ ๊ฒ์ธ๊ฐ์ ์ด์ ์ ๋๋ค. ์ฌ๊ธฐ์ ๋ฐ์์ โ์๋ ๊ทธ๋๋ก์ ํ์คโ๋ก์์ ๋ฐ์๊ณผ โ์์ด์ผ ํ๋ ํ์คโ๋ก์์ ๋ฐ์์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค. ์ ์๋ ์ญ์ฌ์ ํ์ค์ ๋ชจ์ต์ ์ฌ์ค ๊ทธ๋๋ก ๋ณด์ฌ์ฃผ๋ ์ผ์์ ์ง์ค์ ๋ฐ์ํ๋ ๊ฒ์ ๋งํ๊ณ , ํ์๋ ์ผ์์ ํ์ค์ ๋์ด ํ์๊ฐ ์งํฅํ๋ ๋น์์ ์ง์ค์ ๋ฐ์ํ๋ ๊ฒ์๋งํ๋ค.") print(textrank.summarize())
def summarize_text(text): jpype.attachThreadToJVM() textrank = TextRank(text) return textrank.summarize()
def setUp(self) -> None: self.text: str = "ํธ์ํฐ, \"์ ๋ณด๋น๊ตญ์ ๋ฐ์ดํฐ ๋ถ์์๋ฃ ํ์ง ์๊ฒ ๋ค\". ํธ์ํฐ๊ฐ ์๋ง์ ํธ์์ ๋ถ์ํด ์ ๋ณด๋ฅผ ํ๋งคํ๋ ์๋น์ค๋ฅผ ๋ฏธ๊ตญ ์ ๋ณด๋น๊ตญ์๋ ์ ๊ณตํ์ง ์๊ธฐ๋ก ํ๋ค. ์์คํธ๋ฆฌํธ์ ๋์ ๋ฏธ๊ตญ ์ ๋ณด๋น๊ตญ ๊ด๊ณ์ ๋ฑ์ ์ธ์ฉํด ๋ฐ์ดํฐ๋ง์ด๋(Dataminer)๊ฐ ์ ๋ณด๋น๊ตญ์ ๋ํ ์๋น์ค๋ ์ค๋จํ๊ธฐ๋ก ํ๋ค๊ณ 9์ผ(ํ์ง์๊ฐ) ๋ณด๋ํ๋ค. ํธ์ํฐ๊ฐ 5% ์ง๋ถ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ง์ด๋๋ ์์ ๋ฏธ๋์ด์ ์๋ฃ๋ฅผ ๋ถ์ํด ๊ณ ๊ฐ์ด ์์ฌ๊ฒฐ์ ์ ํ๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ธฐ์ ์ด๋ค. ํธ์ํฐ์ ์ฌ๋ผ์ค๋ ํธ์์ ์ค์๊ฐ์ผ๋ก ์ ๊ทผํด ๋ถ์ํ ์๋ฃ๋ฅผ ๊ณ ๊ฐ์๊ฒ ํ ์ ์๋ ๋ ์ ๊ถ์ ๊ฐ๊ณ ์๋ค. ์ ๋ณด๋น๊ตญ์ ์ด ํ์ฌ๋ก๋ถํฐ ๊ตฌ๋งคํ ์๋ฃ๋ก ํ ๋ฌ๋ ์ ์น์ ๋ถ์์ ๋ฑ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ํ๋ํ๋ค. ์ด ํ์ฌ๊ฐ ์ ๋ณด๋น๊ตญ์ ์๋น์ค๋ฅผ ํ๋งคํ์ง ์๊ธฐ๋ก ํ ๊ฒ์ ํธ์ํฐ์ ๊ฒฐ์ ์ธ ๊ฒ์ผ๋ก ์๋ ค์ก๋ค. ๋ฐ์ดํฐ๋ง์ด๋ ๊ฒฝ์์ง์ ์ต๊ทผ โํธ์ํฐ๊ฐ ์ ๋ณด๋น๊ตญ์ ์๋น์คํ๋ ๊ฒ์ ์์น ์๋๋คโ๊ณ ๋ฐํ๋ค๊ณ ์ด ์ ๋ฌธ์ ์ ํ๋ค. ํธ์ํฐ๋ ์ฑ๋ช ์ ๋ด๊ณ โ์ ๋ณด๋น๊ตญ ๊ฐ์์ฉ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ง ์๋ ๊ฒ์ ํธ์ํฐ์ ์ค๋๋ ์ ์ฑ โ์ด๋ผ๋ฉฐ โํธ์ํฐ ์๋ฃ๋ ๋์ฒด๋ก ๊ณต๊ฐ์ ์ด๊ณ ๋ฏธ๊ตญ ์ ๋ถ๋ ๋ค๋ฅธ ์ฌ์ฉ์์ฒ๋ผ ๊ณต๊ฐ๋ ์ด์นด์ดํธ๋ฅผ ์ดํด๋ณผ ์ ์๋คโ๊ณ ํด๋ช ํ๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ด ํ์ฌ๊ฐ 2๋ ๋์ ์ ๋ณด๋น๊ตญ์ ์๋น์ค๋ฅผ ์ ๊ณตํด ์จ ๋ฐ ๋ํด์๋ ํ๋นํ ์ค๋ช ์ด ๋์ง ์๋๋ค. ํธ์ํฐ์ ์ด๋ฒ ๊ฒฐ์ ์ ๋ฏธ๊ตญ์ ์ ๋ณด๊ธฐ์ (IT)๊ธฐ์ ๊ณผ ์ ๋ณด๋น๊ตญ ๊ฐ ๊ฐ๋ฑ์ ์ฐ์ฅ ์ ์์์ ์ด๋ค์ง ๊ฒ์ผ๋ก ์ฌ๊ฒจ์ง๊ณ ์๋ค. IT๊ธฐ์ ์ ์ด์ฉ์ ํ๋ผ์ด๋ฒ์์ ๋ฌด๊ฒ ์ค์ฌ์ ๋๋ ๋ฐ ๋นํด ์ ๋ณด๋น๊ตญ์ ๊ณต๊ณต์์ ์ ์ฐ์ ์ํด ์ฐจ์ด๊ฐ ์์๋ค. ํนํ ์ ํ์ ์บ๋ฆฌํฌ๋์ ์ฃผ ์๋ฒ๋๋๋ ธ ์ด๊ฒฉ๋ฒ์ ์์ดํฐ์ ์ ์ฅ๋ ์ ๋ณด๋ฅผ ๋ณด๊ฒ ๋ค๋ฉฐ ๋ฐ์ดํฐ ์ ๊ธ์ฅ์น ํด์ ๋ฅผ ์๊ตฌํ๋ ๋ฏธ ์ฐ๋ฐฉ์์ฌ๊ตญ(FBI)๊ณผ ์์ก๊น์ง ์งํํ๋ค. ์ ๋ณด๋น๊ตญ ๊ณ ์ ๊ด๊ณ์๋ โํธ์ํฐ๊ฐ ์ ๋ณด๋น๊ตญ๊ณผ ๋๋ฌด ๊ฐ๊น์ ๋ณด์ด๋ ๊ฒ์ ์ฐ๋ คํ๋ ๊ฒ ๊ฐ๋คโ๊ณ ๋งํ๋ค. ๋ฐ์ดํฐ๋ง์ด๋๋ ๊ธ์ต๊ธฐ๊ด์ด๋, ์ธ๋ก ์ฌ ๋ฑ ์ ๋ณด๋น๊ตญ์ ์ ์ธํ ๊ณ ๊ฐ์ ๋ํ ์๋น์ค๋ ๊ณ์ํ ๊ณํ์ด๋ค. ." self.tokenizer: OktTokenizer = OktTokenizer() self.textrank: TextRank = TextRank(self.tokenizer)
for sent1, sent2 in combinations(self.sentences, 2): weight = self._jaccard(sent1, sent2) if weight: self.graph.add_edge(sent1, sent2, weight=weight) def _jaccard(self, sent1, sent2): p = sum((sent1.bow & sent2.bow).values()) q = sum((sent1.bow | sent2.bow).values()) return p / q if q else 0 def summarize(self, count=3, verbose=True): results = sorted(self.reordered[:count], key=lambda sentence: sentence.index) results = [result.text for result in results] if verbose: return '\n'.join(results) else: return results from textrankr import TextRank if __name__ == '__main__': text = '' f = open('file.txt', 'r') for line in f: text = text + line # print(text) textrank = TextRank(text) print(textrank.summarize()) f.close()
from typing import List from textrankr import TextRank from konlpy.tag import Okt class OktTokenizer: okt: Okt = Okt() def __call__(self, text: str) -> List[str]: tokens: List[str] = self.okt.phrases(text) return tokens okt_tokenizer: OktTokenizer = OktTokenizer() textrank: TextRank = TextRank(okt_tokenizer) # num sentences in the resulting summary k: int = 5 with open('../data/test1_punct.txt', 'r') as f: text = f.read().split('\n') text = ' '.join(text) # summarized: str = textrank.summarize(text, k) # print(summarized) # if verbose=False, it returns a list summaries: List[str] = textrank.summarize(text, k, verbose=False) for i, summary in enumerate(summaries): print(i, summary)
def test_ranked(self): textrank = TextRank(self.text) print(textrank.summarize())
def decode(self, text, count=3): return TextRank(text).summarize(count)
def test_ranked(self): textrank = TextRank(self.text) self.assertEqual(textrank.summarize(1), "ํธ์ํฐ, \"์ ๋ณด๋น๊ตญ์ ๋ฐ์ดํฐ ๋ถ์์๋ฃ ํ์ง ์๊ฒ ๋ค\".")
def test_ranked(self): textrank = TextRank(self.text) self.assertEqual(textrank.summarize(1), "ํธ์ํฐ, \"์ ๋ณด๋น๊ตญ์ ๋ฐ์ดํฐ ๋ถ์์๋ฃ ํ์ง ์๊ฒ ๋ค\".")
from lexrankr import LexRank import asyncio from contextlib import suppress import queue #from html2text import html2text # workaround preloading kkma in konlpy # kkma ํํ์ ๋ถ์๊ธฐ ๋ก๋ฉ์ด ์์ฒญ ์ค๋ ๊ฑธ๋ฆผ... ( 10์ด? ) ######################################### if jpype.isJVMStarted(): jpype.attachThreadToJVM() _textrank = TextRank("test") ######################################### def summarize_text(text): # < workaround cooes > for crash problem with django and konlpy # - related issue : https://github.com/konlpy/konlpy/issues/104 if jpype.isJVMStarted(): jpype.attachThreadToJVM() # < workaround codes end!!! > #print_with_timestamp("textrank init") _textrank = TextRank(text) #print_with_timestamp("textrank init end") return _textrank.summarize()
def summarizeTextRank(text, max=3): tr = TextRank(text) return tr.summarize(max)
from __future__ import print_function from textrankr import TextRank # ์ด๊ฑฐ ์๋, ์ด๊ฑด ์ํฐ๊ฐ ์์ผ๋ฉด ๊ตฌ๋ถ์ด ์๋จ ! textrank = TextRank(''' ์ก์์ ํ์ํ์ด ๋ ๋ฌผํฐ์๊ฐ ์๋ ๋ฅด๊ธฐ์ ์์ธ์ด ๋ ์ ์๋ค๋ ์ฐ๊ตฌ ๊ฒฐ๊ณผ๊ฐ ๋์๋ค. ๋ฏธ๊ตญ ๋ ธ์ค์จ์คํด๋ํ๊ต ์ฐ๊ตฌ์ง์ ๋ฌผํฐ์๋ก ์๊ธฐ๋ฅผ ๋ฆ์ผ๋ฉด ํผ๋ถ์ ๋จ์ ๋น๋๊ธฐ(๋ผ์ฐ๋ฆดํฉ์ฐ๋ํธ๋ฅจ ๋ฑ ๊ณ๋ฉดํ์ฑ์ )๊ฐ ๋ณดํธ๋ง ์ญํ ์ ํ๋ ๊ธฐ๋ฆ๊ธฐ(์ง์ง)๋ฅผ ์์ ์๊ธฐ๋ค์๊ฒ ์๋ ๋ฅด๊ธฐ๊ฐ ์๊ธฐ๊ธฐ ์ฝ๋ค๊ณ ๋ฐํ๋ค. ํนํ ์ด๋ฒ ์ฐ๊ตฌ์์ ์ฃผ๋ชฉํ ์ ์ ์ ์ ์ ์ผ๋ก ํผ๋ถ๊ฐ ์ฝํ ์๊ธฐ๋ค์๊ฒ ๋ฌผํฐ์์ ํํ๋ฌผ์ง์ ์ํ ์๋ ๋ฅด๊ธฐ์ ์์ธ์ด ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์กฐ์ค ์ฟก ๋ฐ์ค ๊ต์๋ '์ ์ ์, ๋จผ์ง์ ์์, ๊ทธ๋ฆฌ๊ณ ๋ฌผํฐ์๋ ์ ์ ์๋ ๋ฅด๊ธฐ์ '๋ ํ ์ ์์ด ๋์ ์ํฉ(perfect storm)'์ด๋ค'๋ผ๊ณ ๋งํ๋ค. ์ฐ๊ตฌ์ ๋ฐ๋ฅด๋ฉด ์๋ ๋ฅด๊ธฐ๊ฐ ์๋ ์์ด๋ค์ ํผ๋ถ ๋ณดํธ๋ง์ ์ฝํ๊ฒ ํ๋ ์ธ ๊ฐ์ง ๋์ฐ๋ณ์ด ์ ์ ์๊ฐ ์์๋ค. ๊ทธ๋ฌ๋ ํด๋น ์ ์ ์๋ฅผ ๊ฐ์ก๋ค๊ณ ํด์ ๋ชจ๋ ์ํ ์๋ ๋ฅด๊ธฐ ๋ฐ์์ ๋ณด์ธ ๊ฒ์ ์๋์๋ค. ์์ปจ๋ ํด๋น ์ ์ ์๋ฅผ ๊ฐ์ง ์คํ์ฉ ์์ฅ๋ฅผ ๋ ์ฝฉ์ ๋ ธ์ถํด๋ ๋ณ๋ค๋ฅธ ๋ฐ์์ด ๋ํ๋์ง ์์๋ ๊ฒ. ์ฐ๊ตฌ์ง์ ํ๊ฒฝ์ ์์ธ์ ์ฃผ๋ชฉํ๋ค. ์คํ ๋์ ์ฐ๊ตฌ์ง์ด ์ํ ์๋ ๋ฅด๊ธฐ๋ฅผ ์ ๋ฐํ๋ ์์ธ์ผ๋ก ์ง๋ชฉํ ๊ฒ ์ค ํ๋๊ฐ ๋ฌผํฐ์์๋ค. ์ฐ๊ตฌ์ง์ ๋ฌผํฐ์์ ๋น๋ ์ฑ๋ถ์ด ํผ๋ถ์ ๋ณดํธ๋ง์ ์ฝํ๊ฒ ๋ง๋ค์ด ํนํ ์ ์ ์ ์ผ๋ก ์ทจ์ฝํ ์์ด๋ค์๊ฒ ๋์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค. ์ฐ๊ตฌ์ง์ ์ ์ ์ ๊ฒฐํจ์ด ์๋ ์๊ธฐ๋ค์ ํผ๋ถ๊ฐ ๋ฌผํฐ์์ ๋น๋ ์ฑ๋ถ์ ์ ์ดํ์ ๋ ๋จผ์ง๋ ๋ ์ฝฉ ๋ฑ ์๋ ๋ฅด๊ธฐ ๋ฌผ์ง์ด ์ฒด๋ด์ ์ ์ ๋๊ธฐ ์ฝ๋ค๊ณ ์ง์ ํ๋ค. ์ด ๊ฒฝ์ฐ ์์ปจ๋ ๋ ์ฝฉ๋ฒํฐ ์๋์์น๋ฅผ ๋จน์ ๋๊ตฐ๊ฐ๊ฐ ์๊ธฐ์๊ฒ ์ ์ดํ๋ ๊ฒ๋ง์ผ๋ก๋ ์๋ ๋ฅด๊ธฐ๊ฐ ์๊ธธ ์ ์๋ค๊ณ ์ฐ๊ตฌ์ง์ ๊ฒฝ๊ณ ํ๋ค. ์ฐ๊ตฌ์ง์ '์ ์ธ๋ ๋ถ๋ชจ๋ค์ด ๋ฌผํฐ์ ์ฌ์ฉ์ ์ค์ด๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค'๋ฉด์ '๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์์ ์ ๋ถ๋ชจ๋ค์ด ๊ทธ๋ฌ๋ฏ์ด ๋ฌผ๋ก ์ป๊ธฐ๋ ๊ฒ'์ด๋ผ๊ณ ๋ง๋ถ์๋ค. ''') print(textrank.summarize(1)) print(textrank.summarize(1))
def tokenize(doc): return [''.join(t) for t in pos_tagger2.phrases(doc)] # In[7]: def term_exists(doc): return {'{}'.format(word): (word in set(doc)) for word in tokens} # In[15]: text = select_sentence() textrank = TextRank(text) main_sentences = textrank.summarize(5).split('\n') random.shuffle(main_sentences) main_sentence = main_sentences.pop() main_sentence2 = main_sentences.pop() main_sentence3 = main_sentences.pop() # In[20]: pos_tagger2 = Okt() trainSet = select_sentence_by_keyword() train_docs = [(tokenize(row[0]), row[1]) for row in trainSet] tokens = [t for d in train_docs for t in d[0]] train_xy = [(term_exists(d), c) for d, c in train_docs]
line_modify = [] content = "" line_modify.append(line[0]) #line_modify.append(line[1]) line_modify.append(re.sub('[^0-9a-zA-Zใฑ-ํ .]', ' ', line[1])) # ๊ธฐ์ฌ ๋งจ ๋ค ์ด๋ฉ์ผ ์ญ์ reversed_content = ''.join(reversed(line[2])) for i in range(0, len(line[2])): # reverse ๋ ๊ธฐ์ฌ ๋ด์ฉ์ค, ".๋ค"๋ก ๋๋๋ ๊ฒฝ์ฐ ๊ธฐ์ฌ ๋ด์ฉ์ด ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ์ฌ ๋ด์ฉ์ด ๋๋ ํ์ ๊ด๊ณ , ๊ธฐ์ ๋ฑ์ ์ ๋ณด๋ ๋ค ์ง์ if reversed_content[i:i + 2] == '.๋ค': content = ''.join(reversed(reversed_content[i:])) break content = content.replace('.', '. ') line_modify.append(re.sub('[^0-9a-zA-Zใฑ-ํ .]', ' ', content)) text = TextRank(content) text = text.summarize() text = re.sub('[^0-9a-zA-Zใฑ-ํ .]', ' ', text) line_modify.append(text) print(text) line_modify.append(line[3]) writer.writerow(line_modify) f.close() f2.close()
from __future__ import print_function from textrankr import TextRank import sys #textrank = TextRank("๋๋ ํ๋ก๊ทธ๋๋จธ ์ ๋๋ค. ์๋ฐ ํ๋ก๊ทธ๋๋จธ, ๊ทธ๋ฅ ํ๋ก๊ทธ๋๋จธ"); #print(sys.argv[1]); textrank = TextRank(sys.argv[1]) print(textrank.summarize())