예제 #1
0
def post():
    try:
        start = time()
        parser = reqparse.RequestParser()
        parser.add_argument('contents', type=str)
        args = parser.parse_args()

        contents = args['contents']
        print("==== contents ==== : ", contents)

        print(contents)

        # lexrank.summarize(contents)
        # originalText = "이 업체 물건 절대 사지마세요. 형편없습니다. 직원들이 고객은 안중에도 없습니다. 열 받게 만드는 데 선수입니다. 박지원 직원인지 대표인지 몰라도 열받게 하는 제주가 보통이 넘습니다. 다시 한 번 강조하지만 절대 네버네버 스위트피 사지 마세요. 절대 비추입니다."
        lex = LexRank()
        lex.summarize(contents)

        sum = lex.probe(2)

        print(lex.probe(2))

        strd = sum[1] + " " + sum[0]

        resp = {"sum": strd}

        return jsonify(resp)
    except Exception as e:
        return {'error': str(e)}
예제 #2
0
def lexrank(rst):
    print("=" * 20)
    print(len(rst))
    print(rst[0])
    print("=" * 20)
    lexInputText = ""
    hangul = re.compile('[^ ㄱ-ㅣ가-힣]+')
    for news in rst:
        lexInputText += str(news['id'])
        parse = hangul.sub('', news['title'])
        parse = re.sub(' +', ' ', parse).strip()
        parse = re.sub('\.', '', parse)
        lexInputText += parse
        parse = hangul.sub('', news['content'])
        parse = re.sub(' +', ' ', parse).strip()
        parse = re.sub('\.', '', parse)
        lexInputText += parse
        lexInputText += ". "

    print("=" * 10 + "LEXRANK" + "=" * 10)
    lexrank = LexRank()
    lexrank.summarize(lexInputText)
    summaries = lexrank.probe(10)
    searchId = re.compile('[0-9]{5,6}')
    idList = []
    for summary in summaries:
        idList.append(searchId.search(summary).group())
    return (idList)
예제 #3
0
    def post(self):
        import jpype
        if jpype.isJVMStarted():
            jpype.attachThreadToJVM()
        result = []
        corpus = self.params['corpus']

        if corpus:
            result_count = self.params['result_count']
            data_save = self.params['data_save']

            if data_save.upper() == 'Y':
                self.getDataApi().WordPool.add_word_pool(corpus)

            config = {
                # 'useful_tags': ['Noun', 'Verb', 'Adjective', 'Determiner', 'Adverb', 'Conjunction', 'Josa', 'PreEomi',
                #                 'Eomi', 'Suffix', 'Alpha', 'Number'],
                'useful_tags': ['Noun', 'ProperNoun'],
                'min_token_length': 5
            }

            lexRank = LexRank(**config)
            lexRank.summarize(corpus)

            result_count = min(result_count, lexRank.num_sentences - 1)
            if result_count == 0:
                result_count = 1

            result = lexRank.probe(result_count)

        return result
예제 #4
0
def summarize_text_with_lexrank(text):
    lexrank = LexRank(n_clusters=1)
    lexrank.summarize(text)
    summaries = lexrank.probe(3)

    if len(summaries) == 0:
        return ""

    return ". ".join(summaries)
예제 #5
0
	def summarize(self, n_summary):
		print("summarize in %d sentences" %n_summary)
		lexrank = LexRank()
		lexrank.summarize(" ".join(self.preprocessed))
		summaries = lexrank.probe(n_summary)  
		# `num_summaries` can be `None` (using auto-detected topics)

		for summary in summaries:
			print(summary)
		self.summaries = summaries
		return summaries
예제 #6
0
파일: test.py 프로젝트: DSLDataStorage/KETI
class TestLexRank(unittest.TestCase):

    def setUp(self):
        self.text = "사과 배 감 귤. 배 감 귤 수박. 감 귤 수박 딸기. 오이 참외 오징어. 참외 오징어 달팽이."
        self.lexrank = LexRank(min_keyword_length=0, no_below_word_count=0, min_cluster_size=1)

    def test_summarized(self):
        self.lexrank.summarize(self.text)
        summaries = self.lexrank.probe()
        self.assertEqual(len(summaries), 2)
        self.assertEqual(summaries[0], "배 감 귤 수박")
예제 #7
0
    def sum_talker(self, cluster):

        per_talker_dict = {}
        lexrank = LexRank(clustering=None)
        for sen in cluster.sentences:
            if sen.talker not in per_talker_dict:
                per_talker_dict[sen.talker] = ""
            per_talker_dict[sen.talker] += sen.text+"\n"

        for k,v in per_talker_dict.items():
            lexrank.summarize(v)
            self.sum_per_talker[k].append(lexrank.probe(1))
예제 #8
0
 def sum_cluster(self):
     self.clusters = self.clustering()
     lexrank = LexRank(clustering=None)
     self.summaries = []
     for c in self.clusters:
         lexrank.summarize(c.sen2txt())
         for i, s in enumerate(c.sentences):
             print(i, s.text)
         if len(c.sentences)<20:
             self.summaries.append(lexrank.probe(0.3))
         else:
             self.summaries.append(lexrank.probe(0.2))
         self.sum_talker(c) # use current cluster to summarize per talker
예제 #9
0
def wordRank(text):
    text = text.replace('\\n', '.')
    new = re.sub('[^가-힝0-9a-zA-Z\\s\\.]', '', text)

    lexrank = LexRank()
    lexrank.summarize(new)
    summaries = lexrank.probe(3)
    word = Twitter()
    out = []
    for summary in summaries:
        out += word.nouns(summary)

    out = list(set(out))
    print(out)
예제 #10
0
    def insertSumma(self):

        lexrank = LexRank()
        curs = self.conn.cursor()

        summa_total = ""
        sql = "SELECT id,raw,sentence_cnt FROM " + self.table + " WHERE sentence_cnt > 5  ORDER BY id ASC;"
        curs.execute(sql)
        rows = curs.fetchall()

        for row in rows:
            raw = row[1]
            sentence_cnt = row[2]
            text = "".join(raw)

            if (lexrank.summarize(text) == 0):
                continue

            if (sentence_cnt <= 20):
                summaries = lexrank.probe(5)
            else:
                summaries = lexrank.probe(10)

            for summa in summaries:
                summa_total += "".join(summa)
                summa_total += ". "

            curs.execute("UPDATE " + self.table + " SET summa=%s WHERE id=%s;",
                         (summa_total, row[0]))
            self.conn.commit()
            summa_total = ""
예제 #11
0
    def insertSumma(self):

        lexrank = LexRank()
        curs = self.conn.cursor()

        summa_total = ""
        sql = "SELECT id,raw,sentence_cnt FROM " + self.table + " ORDER BY id ASC limit 3;"
        curs.execute(sql)
        rows = curs.fetchall()
        for row in rows:
            print("insert summa to id=" + str(row[0]))
            text = "".join(row[1])
            if (lexrank.summarize(text) == 0):
                continue

            if (row[2] <= 20):
                summaries = lexrank.probe(5)
            else:
                summaries = lexrank.probe(10)

            for summa in summaries:
                summa_total += "".join(summa)
                summa_total += ". "

            print(" summa = " + summa_total + "\n")

            curs.execute("UPDATE " + self.table + " SET summa=%s WHERE id=%s;",
                         (summa_total, row[0]))
            self.conn.commit()
            summa_total = ""
예제 #12
0
파일: tasks.py 프로젝트: Seoyoung2/Sumalyze
def videoSumalyze(pk):
    post = get_object_or_404(VideoPost, pk=pk)
    lang = 'en-US'
    if post.lang == '한국어':
        lang = 'ko-KR'
    from lexrankr import LexRank
    lexrank = LexRank()
    chunk = []
    chunk2 = []
    url = post.url
    path = youtubeToAudio(url)
    #post.title = re.sub('[^가-힣\\s]', '', str(path))
    chunk = splitandSTT(path, lang)
    text = " ".join(chunk)
    os.remove(path + '.mp3')
    os.remove(path)
    idxToDB = ''
    #요약 적용
    idx = 0
    while idx != (len(chunk)):
        try:
            lexrank.summarize(chunk[idx])
            summaries = lexrank.probe(3)
        except:
            idx += 1
            continue
        summaries[0] = summaries[0] + '. '
        summaries[1] = summaries[1] + '. '
        summaries[2] = summaries[2] + '. '
        indexStr = ''.join(summaries)
        chunk[idx] = indexStr
        idxToDB += ibmIndex(indexStr, summaries)
        idxToDB += '#'
        chunk2.append(chunk[idx])
        idx += 1
    post.index = idxToDB

    chunk = []
    chunkToDB = ''
    for c in chunk2:
        chunkToDB += c + '\n'

    post.content = chunkToDB
    # 요약본이 아닌 원본으로 ibm Natural Language Understanding
    post.keyword, post.relevance, post.category_ibm = ibmContent(text)
    post.save()
예제 #13
0
def lexlank_function(result):
    # 참조 : https://wikidocs.net/72820
    # LexRank : https://github.com/theeluwin/lexrankr
    try:
        lexrank = LexRank()
        lexrank.summarize(result)

        summarize_data = []
        print("요약 진행중!")
        summaries = lexrank.probe(10)
        for i, summary in enumerate(summaries):
            summarize_data.append(summary)

        return summarize_data
    except:
        print("요약 내용이 부족합니다.")
        return []
예제 #14
0
    def summarize(self):
        lex = LexRank()
        lex.summarize(self.paragraph)

        if len(self.paragraph) < 100:
            self.probe_num = 1
        elif len(self.paragraph) < 200:
            self.probe_num = 2
        elif len(self.paragraph) < 300:
            self.probe_num = 3
        elif len(self.paragraph) < 400:
            self.probe_num = 4
        else:
            self.probe_num = 5

        summaries = lex.probe(self.probe_num)
        return summaries
예제 #15
0
def imageSumalyze(pk):
    post = get_object_or_404(ImagePost, pk=pk)
    from lexrankr import LexRank
    lexrank = LexRank()
    path = os.path.dirname(os.path.dirname(
        os.path.abspath(__file__))) + '\\media\\' + str(post.pdf)
    text = img2Text(path)
    os.remove(path)
    chunk = []
    if len(text) < 650:
        chunk.append(text)
    else:
        chunk = list(map(''.join, zip(*[iter(text)] * 650)))
    chunk2 = []
    idxToDB = ''
    #요약 적용
    idx = 0
    while idx != (len(chunk)):
        try:
            lexrank.summarize(chunk[idx])
            summaries = lexrank.probe(3)
        except:
            idx += 1
            continue
        summaries[0] = summaries[0] + '. '
        summaries[1] = summaries[1] + '. '
        summaries[2] = summaries[2] + '. '
        indexStr = ''.join(summaries)
        chunk[idx] = indexStr
        idxToDB += ibmIndex(indexStr, summaries)
        idxToDB += '#'
        chunk2.append(chunk[idx])
        idx += 1
    post.index = idxToDB

    chunk = []
    chunkToDB = ''
    for c in chunk2:
        chunkToDB += c + '\n'

    post.content = chunkToDB
    post.pdf = None
    post.index = idxToDB
    # 요약본이 아닌 원본으로 ibm Natural Language Understanding
    post.keyword, post.relevance, post.category_ibm = ibmContent(text)
    post.save()
예제 #16
0
class LexRankforSummarization():
    def __init__(self):

        self.lexrank = LexRank(min_keyword_length=0,
                               no_below_word_count=0,
                               min_cluster_size=1)

    def test_summarized(self, text):
        self.lexrank.summarize(text)
        try:
            summaries = self.lexrank.probe(3)
        except:
            summaries = self.lexrank.probe(2)
        result = []
        for summary in summaries:
            result.append(summary)
        # print("result",result)
        return result
예제 #17
0
def smry(q):
    while True:
        try:
            print("smry start")
            global count
            data = q.get()
            count += 1
            #print("get{}!".format(count))
            lexrank = LexRank()
            lexrank.summarize(data[4]) #data[4] (본문)가져와서 요약
            summaries = lexrank.probe(3) #3줄요약, summaries 타입은 list
            data[4] = '. '.join(summaries)+'.' #요약된 내용 다시 .으로 join후 저장
            print(data) #db에 저장되어야 하는 최종 결과
            db_store(data)
            # for summary in summaries:
            #     print(summary)
        except (IndexError,ValueError,AttributeError):
            pass
예제 #18
0
파일: tasks.py 프로젝트: Seoyoung2/Sumalyze
def audioSumalyze(pk):
    post = get_object_or_404(AudioPost, pk=pk)
    lang = 'en-US'
    if post.lang == '한국어':
        lang = 'ko-KR'
    from lexrankr import LexRank
    lexrank = LexRank()
    chunk2 = []
    chunk = []

    #speechtotext(str(post.pdf), lang, chunk)
    chunk = splitandSTT(path + str(post.pdf), lang)
    text = " ".join(chunk)
    idxToDB = ''
    #요약 적용
    idx = 0
    while idx != (len(chunk)):
        try:
            lexrank.summarize(chunk[idx])
            summaries = lexrank.probe(3)
        except:
            idx += 1
            continue
        summaries[0] = summaries[0] + '. '
        summaries[1] = summaries[1] + '. '
        summaries[2] = summaries[2] + '. '
        indexStr = ''.join(summaries)
        chunk[idx] = indexStr
        idxToDB += ibmIndex(indexStr, summaries)
        idxToDB += '#'
        chunk2.append(chunk[idx])
        idx += 1
    post.index = idxToDB

    chunk = []
    chunkToDB = ''
    for c in chunk2:
        chunkToDB += c + '\n'

    post.content = chunkToDB
    # 요약본이 아닌 원본으로 ibm Natural Language Understanding
    post.keyword, post.relevance, post.category_ibm = ibmContent(text)
    post.save()
예제 #19
0
def textSumalyze(pk):
    post = get_object_or_404(TextPost, pk=pk)
    from lexrankr import LexRank
    lexrank = LexRank()
    text = post.text
    chunk = []
    if len(text) < 650:
        chunk.append(text)
    else:
        chunk = list(map(''.join, zip(*[iter(text)] * 650)))
    chunk2 = []
    idxToDB = ''
    #요약 적용
    idx = 0
    while idx != (len(chunk)):
        try:
            lexrank.summarize(chunk[idx])
            summaries = lexrank.probe(3)
        except:
            idx += 1
            continue
        summaries[0] = summaries[0] + '. '
        summaries[1] = summaries[1] + '. '
        summaries[2] = summaries[2] + '. '
        indexStr = ''.join(summaries)
        chunk[idx] = indexStr
        idxToDB += ibmIndex(indexStr, summaries)
        idxToDB += '#'
        chunk2.append(chunk[idx])
        idx += 1
    post.index = idxToDB

    chunk = []
    chunkToDB = ''
    for c in chunk2:
        chunkToDB += c + '\n'

    post.content = chunkToDB
    post.text = 'clear'
    # 요약본이 아닌 원본으로 ibm Natural Language Understanding
    post.keyword, post.relevance, post.category_ibm = ibmContent(text)
    post.save()
def lexranker(text,code,date):

    text = text.replace('\\n','.')
    text2 = re.sub('[^가-힝0-9a-zA-Z\\s\\.]', '', text)

    lexrank =LexRank()
    #print(text2)
    lexrank.summarize(text2)
    summaries = lexrank.probe(3)
    word = Twitter()
    out = []
    print(summaries)
    for summary in summaries:
        out += word.nouns(summary)

    word = list(set(out))
    share = Share(code)
    startprice = share.get_open()
    endprice = share.get_price()
    for part in word:
        save_record(part, code, startprice, endprice, date)
예제 #21
0
	def highlight(self, threshold=0.5):

		print("highlight : return list of chats and scores ")

		lexrank = LexRank()
		
		lexrank.summarize(" ".join(self.preprocessed))
		lexrank_sentences = [x.text for x in lexrank.sentences]

		scores = lexrank.sentence_score_pair()  
		
		preprocessed = self.preprocessed[:]
		preprocessed = [x.strip().strip(".").strip() for x in preprocessed]
		lex_idx = 0 
		skip_amount = 0
		jump = 0 
		for ts_sentence in self.ts.chat_to_sentence_mapping:
			ts_idx, chat_idxs, sentence = ts_sentence
			
			if lex_idx >= len(scores): break
			
			if len(sentence.strip()) == 0 :
				jump += 1
			else :
				if preprocessed[lex_idx + skip_amount] != scores[lex_idx][1] :
					skip_amount += 1 
				else :					
					scores[lex_idx] = list(scores[lex_idx])
					scores[lex_idx][0] = lex_idx + jump + skip_amount
					scores[lex_idx].append(chat_idxs)
					lex_idx += 1; 
		self.highlight_lexrank = scores[:]
		print("highlight result")
		return_list = self._map_to_chat(self.highlight_lexrank)
		for chat in return_list :
			if chat[0] == 1 : 
				print(chat)
		return return_list
예제 #22
0
token_all_string = pos_tag(word_tokenize(all_string))

process_str = ""
index = 0
while (len(token_all_string)):
    for i in range(len(sent_analy)):
        for j in sent_analy[i]:
            if index + 1 == len(sent_analy[i]):
                for k in range(index + 1):
                    process_str += token_all_string[k][0] + " "
                process_str = process_str.rstrip()
                process_str += ". "
                del token_all_string[0:index + 1]
                index = 0
            elif j == token_all_string[index][1]:
                index += 1

lexrank.summarize(process_str)

#print(int(probNumber))
summaries = lexrank.probe(int(probNumber))
result = ""
#print(filePath)
#print(probNumber)
with open("summarizedText", "w", encoding="UTF-8") as f:
    for summary in summaries:
        result += summary + ".  "
    f.write(result)
    print(result)
print("EXIT")  # trigger word
예제 #23
0
def simpleLexrank(arg):
    lexrank = LexRank()
    lexrank.summarize(arg)
    summaries = lexrank.probe(3)
    return (summaries)
예제 #24
0
dir_list = os.listdir(BASE_DIR)

for directory in dir_list:
    create_dic_file(BASE_DIR, directory)
    local_dir = BASE_DIR + "\\" + directory
    print(local_dir)
    file_list = os.listdir(local_dir)
    print(file_list)
    for file in file_list:
        print("\n\nFile:" + file + "\n\n")
        with open(local_dir + "\\" + file, encoding="utf-8-sig") as json_file:
            datas = json.load(json_file)
        json_file.close()
        print(datas)
        inted_contents = datas['contents']
        lexrank.summarize(inted_contents)
        summaries = lexrank.probe(None)
        print("\n\n 요약문 :::\n")
        for summary in summaries:
            print("\n" + summary)
            dic_titles.append(datas['title'])
            dic_urls.append(datas['href'])
            dic_raw_contents.append(datas['contents'])
            dic_summaries.append(summaries)
            keywords = ""
            locate = ""
            score = ""
            dic_keywords.append(keywords)
            dic_locates.append(locate)
            dic_scores.append(score)
    dic_frames = {
예제 #25
0
def summarizeLexRank(text, num=3):
    lr = LexRank()
    lr.summarize(text)
    summaries = lr.probe(num)
    return summaries
예제 #26
0
    def makeEvents(self, summaries, rows, x_event):

        lexrank = LexRank()
        events = []
        events_size = 0
        for summa in summaries:

            find = False
            text = {}
            summa = str(summa)
            db_date = ""
            if (summa.find("기자]") != -1):
                summa = self.deleteNoise(summa)

            for row in rows:

                # When Summa value is none
                if (row[2] is None):
                    temp = "".join(row[1])
                    if (temp.find("".join(summa)) != -1):
                        find = True

                        db_raw = str(row[1])
                        db_summa = str(row[2])
                        db_title = str(row[3])
                        db_date = str(row[4])
                        db_sentenceCnt = str(row[6])
                        db_link = str(row[7])

                        if (db_raw.find("기자]") != -1):
                            db_raw = self.deleteNoise(db_raw)
                        if (db_summa.find("기자]") != -1):
                            db_summa = self.deleteNoise(db_summa)
                        if (db_title.find("기자]") != -1):
                            db_title = self.deleteNoise(db_title)

                        text["headline"] = db_title
                        text["text"] = db_raw
                        text["text2"] = db_raw
                        if (db_sentenceCnt > self.summa_count):
                            raw = "".join(row[1])
                            lexrank.summarize(raw)
                            raw_summaries = lexrank.probe(self.summa_count)
                            text3_summa = ""

                            for raw_summa in raw_summaries:
                                text3_summa += str(raw_summa) + ". "

                            if (text3_summa.find("기자]") != -1):
                                text3_summa = self.deleteNoise(text3_summa)
                            text["text3"] = text3_summa
                        else:
                            text["text3"] = ""
                        break

                # When Summa value isn't none
                else:
                    temp = "".join(row[2])
                    if (temp.find("".join(summa)) != -1):
                        find = True

                        db_raw = str(row[1])
                        db_summa = str(row[2])
                        db_title = str(row[3])
                        db_date = str(row[4])
                        db_sentenceCnt = str(row[6])
                        db_link = str(row[7])

                        if (db_raw.find("기자]") != -1):
                            db_raw = self.deleteNoise(db_raw)
                        if (db_summa.find("기자]") != -1):
                            db_summa = self.deleteNoise(db_summa)
                        if (db_title.find("기자]") != -1):
                            db_title = self.deleteNoise(db_title)

                        text["headline"] = db_title
                        text["text"] = db_raw
                        text["text2"] = db_summa

                        if (db_sentenceCnt > self.summa_count):
                            raw = "".join(row[1])
                            lexrank.summarize(raw)
                            raw_summaries = lexrank.probe(self.summa_count)
                            text3_summa = ""

                            for raw_summa in raw_summaries:
                                text3_summa += str(raw_summa) + ". "

                            if (text3_summa.find("기자]") != -1):
                                text3_summa = self.deleteNoise(text3_summa)
                            text["text3"] = text3_summa
                        else:
                            text["text3"] = ""
                        break

            if (find == True):
                event = {
                    "start_date": {
                        "year": db_date.split('-')[0],
                        "month": db_date.split('-')[1],
                        "day": db_date.split('-')[2],
                        "hour": "",
                        "minute": "",
                        "second": "",
                        "millisecond": "",
                        "format": ""
                    },
                    "group": db_date.split('-')[1],
                    "media": {
                        "caption": "",
                        "credit": "",
                        "url": db_link,
                        "thumb": ""
                    }
                }
                event["text"] = text
                events.append(event)
                events_size += 1

            if (events_size == x_event):
                break

        return events
예제 #27
0
    def createJSON(self):

        start_time_createJSON = time.time()
        if (self.main_event > len(self.main_idx)):
            sys.exit("main_event must be smaller than main_idx")
        elif ((self.total_event - self.main_event) > len(self.outlier_idx)):
            sys.exit("total_event-main_event must be smaller than outlier_idx")

        lexrank = LexRank()  # can init with various settings
        curs = self.conn.cursor()

        ##############################################################################
        # MAKE TITLE #
        ##############################################################################
        main_outlier_text = ""

        main_outlier_idx = self.main_idx + self.outlier_idx
        main_outlier_idx_size = len(main_outlier_idx)

        tag = ""
        main_outlier_sentence_cnt = 0

        main_outlier_sql = "SELECT id,raw,summa,title,date,tag,sentence_cnt,link FROM " + self.table + " WHERE id in("

        for i in range(main_outlier_idx_size):
            if (i != (main_outlier_idx_size - 1)):
                main_outlier_sql += str(main_outlier_idx[i]) + ","
            else:
                main_outlier_sql += str(main_outlier_idx[i]) + ");"

        curs.execute(main_outlier_sql)
        main_outlier_rows = curs.fetchall()

        for row in main_outlier_rows:
            tag += "".join(row[5])
            main_outlier_sentence_cnt += row[6]
            if (row[2] is None):
                main_outlier_text += "".join(row[1])
            else:
                main_outlier_text += "".join(row[2])
        #main_outlier_tag=self.selectTag(tag)

        print(
            "===============================================================")
        print(
            "====================== START CREATE_JSON ======================")
        print(
            "===============================================================\n"
        )

        start_time = time.time()
        lexrank.summarize(main_outlier_text)
        print("first total : ")
        print("     %.02f sec" % (time.time() - start_time))

        summaries = lexrank.probe(self.total_event)

        find = 0
        db_link = ""
        main_outlier_summa = ""
        for summa in summaries:

            summa = str(summa)
            if (summa.find("기자]") != -1):
                summa = self.deleteNoise(summa)

            for row in main_outlier_rows:
                if (row[2] is None):
                    temp = "".join(row[1])
                    if (temp.find("".join(summa)) != -1):
                        db_link = str(row[7])
                        find += 1
                        main_outlier_summa += summa + ". "
                        break
                else:
                    temp = "".join(row[2])
                    if (temp.find("".join(summa)) != -1):

                        db_link = str(row[7])
                        find += 1
                        main_outlier_summa += summa + ". "
                        break

            if (find == (1)):
                break

        main_outlier_tag = self.selectTag(tag, main_outlier_summa)

        total_data = OrderedDict()

        total_data["scale"] = ""
        total_data["title"] = {
            "media": {
                "caption": "",
                "credit": "",
                "url": db_link,
                "thumb": ""
            },
            "text": {
                "headline": main_outlier_tag,
                "text": main_outlier_summa
            }
        }
        ##############################################################################
        # MAKE TITLE # END
        ##############################################################################

        ##############################################################################
        # MAKE EVENTS # START
        ##############################################################################
        events = []

        main_idx_size = len(self.main_idx)
        main_text = ""

        outlier_idx_size = len(self.outlier_idx)
        outlier_text = ""

        main_sql = "SELECT id,raw,summa,title,date,tag,sentence_cnt,link FROM " + self.table + " WHERE id in("
        for i in range(main_idx_size):
            if (i != (main_idx_size - 1)):
                main_sql += str(self.main_idx[i]) + ","
            else:
                main_sql += str(self.main_idx[i]) + ");"

        curs.execute(main_sql)
        main_rows = curs.fetchall()
        for row in main_rows:
            if (row[2] is None):
                main_text += "".join(row[1])
            else:
                main_text += "".join(row[2])

        start_time = time.time()
        lexrank.summarize(main_text)
        start_time = time.time()
        summaries = self.getDistinctArticleSummaries(lexrank, main_rows,
                                                     self.main_event)

        start_time = time.time()

        events += self.makeEvents(summaries, main_rows, self.main_event)

        outlier_sql = "SELECT id,raw,summa,title,date,tag,sentence_cnt,link FROM " + self.table + " WHERE id in("
        for i in range(outlier_idx_size):
            if (i != (outlier_idx_size - 1)):
                outlier_sql += str(self.outlier_idx[i]) + ","
            else:
                outlier_sql += str(self.outlier_idx[i]) + ");"

        curs.execute(outlier_sql)
        outlier_rows = curs.fetchall()
        for row in outlier_rows:
            if (row[2] is None):
                outlier_text += "".join(row[1])
            else:
                outlier_text += "".join(row[2])

        start_time = time.time()

        lexrank.summarize(outlier_text)

        summaries = self.getDistinctArticleSummaries(
            lexrank, outlier_rows, self.total_event - self.main_event)

        events += self.makeEvents(summaries, outlier_rows,
                                  self.total_event - self.main_event)

        total_data["events"] = events

        print("     <TOTAL TIME> ")
        print("     %.02f sec" % (time.time() - start_time_createJSON) + "\n")
        ##############################################################################
        # MAKE EVENTS # END
        ##############################################################################

        numTag = 3
        fileTag = ""
        for i in range(0, numTag):
            fileTag += "".join(main_outlier_tag.split(' ')[i])
            if (i != numTag - 1):
                fileTag += "-"

        file_path = "JSON/" + fileTag + "_" + str(self.total_event) + ".json"
        with codecs.open(file_path, 'w', encoding="utf-8") as make_file:
            json.dump(total_data,
                      make_file,
                      ensure_ascii=False,
                      indent=4,
                      sort_keys=False)
예제 #28
0
from __future__ import print_function
from lexrankr import LexRank

# 이거 아님

lexrank = LexRank()  # can init with various settings
lexrank.summarize('''
경찰이 잠실야구장에서 벌어진 '현대판 노예사건'에 대해 본격 수사에 착수했다. 앞서 서울시장애인인권센터는 이곳 분리수거장에서 A씨(60)를 구조하고, 그가 임금을 받지 못한 채 노예처럼 일해온 것으로 추정된다며 수사를 의뢰했다.

서울 송파경찰서는 A씨를 고용한 고물업체 사장 B씨를 최근 불구속 입건하고 인권센터가 제기한 사기·폭행·가혹행위 등의 의혹에 대해 수사 중이라고 20일 밝혔다.

인권센터와 경찰 등에 따르면 B씨는 지난 17년 동안 A씨에게 제대로 된 임금을 주지 않고 분리수거 업무를 시킨 의혹을 받는다. 

특히 인권센터는 A씨가 떨어진 빵으로 끼니를 채우면서 하루 16시간 동안 일하는 등 노동착취를 당했다고 주장했다. 지적장애를 가진 A씨는 분리수거장 내부 컨테이너에서 지금껏 생활해온 것으로 알려졌다.

현재 경찰은 인권센터와 언론에서 제기한 의혹에 대해 사실관계를 확인하는 중이다. 피해자와 고물업체 사장, 잠실야구장 시설관리자 등에 대해 한차례씩 조사도 진행했다. 

경찰관계자는 "피해자의 계좌 입출금 내역을 분석하고 있다"며 "학대 등의 혐의가 있는지 확인하기 위해 추가로 관계자들을 조사할 계획"이라고 밝혔다. 
''')
summaries = lexrank.probe(
    1)  # `num_summaries` can be `None` (using auto-detected topics)
for summary in summaries:  # 그냥 출력
    print(summary)

from firebase import firebase
firebase = firebase.FirebaseApplication('https://chatbot-c6606.firebaseio.com')

result = firebase.post('/', {'news': summary})
print(result)
예제 #29
0
    def insertSumma(self):

        lexrank = LexRank()
        curs = self.conn.cursor()

        #1. get a value of 90 percent
        #you can change the percent value like 80, 70 ..
        percent = 90
        sql = "select count(*)*" + str(1 - percent *
                                       0.01) + " from " + self.table + ";"
        curs.execute(sql)
        rows = curs.fetchone()
        percentile = int(rows[0])

        #2. get a value located at a percetile
        sql = "SELECT id,raw,sentence_cnt FROM " + self.table + " order by sentence_cnt desc;"
        curs.execute(sql)
        rows = curs.fetchall()

        i = 0
        for row in rows:
            i = i + 1
            if i == percentile:
                percentile_cnt = row[2]
                break

        #3. get a average value in a percentile
        sql = "SELECT avg(sentence_cnt) FROM " + self.table + " where sentence_cnt <=" + str(
            percentile_cnt) + ";"
        curs.execute(sql)
        rows = curs.fetchone()
        percentile_avg = int(rows[0])

        #the minimum average value is 6
        if percentile_avg < 6:
            percentile_avg = 6

        #4. get the total table row except for less than half of the average
        summa_total = ""
        sql = "SELECT id,raw,sentence_cnt FROM KETI." + self.table + " WHERE sentence_cnt > " + str(
            int(percentile_avg / 2)) + " ORDER BY id ASC;"
        curs.execute(sql)
        rows = curs.fetchall()

        #5. we can get raw and sentence count in each row
        # and update summa column using the parameter rule

        for row in rows:
            #using the curs as iterator
            raw = row[1]
            sentence_cnt = row[2]
            text = "".join(raw)

            if (lexrank.summarize(text) == 0):
                continue

            if (sentence_cnt <= percentile_cnt):
                summaries = lexrank.probe(int(percentile_avg / 2))
            else:
                summaries = lexrank.probe(percentile_avg)

            for summa in summaries:
                summa_total += "".join(summa)
                summa_total += ". "

                curs.execute(
                    "UPDATE " + self.table + " SET summa=%s WHERE id=%s;",
                    (summa_total, row[0]))
            self.conn.commit()

            summa_total = ""
예제 #30
0
#!/usr/bin/python
# -*- coding: utf-8 -*-

from __future__ import print_function
from lexrankr import LexRank

lexrank = LexRank()
text = "\n \n \n아 드디어 여름방학이 끝났습니다 ㅠㅠ 너무나도 짧게 끝나버린 여름방학이라 아쉬움이 큽니다만 지난 주말을 이용해 여자 셋이서 서울 여행이 이번 여름방학의 가장 큰 추억이지 않나 생각됩니다 8월 10일 여자 셋만 기차를 타고 서울여행을 갔습니다 작은 녀석이 그때 꼭 가야 할 행사가 있어서 참석하기 위해서 동행하기로 한 것이 여자들만의 여행이 되었다지요 마침 기간도 맞고해서 서울 코엑스 옆에 있는 인터컨티넨탈 호텔 파르나스에서 열리는 아시아 호텔 아트페어에 가보기로 하였답니다  미대생이 되기 위해 막바지 그림만 죽어라 그리는 고3 쇼콜라 공주와 요리를 하겠다더니 최근 들어서는 자기도 예고를 가서 미술을 하겠다고 선언한 바닐라 공주인지라 아트페어 행사가 아이들에게 큰 도움이 될 거 같아서 참석하게 되었습니다 ​​\n \n \n \n서울 인터컨티넨탈 호텔 파르나스는 예전에 네이버 15주년 행사 때 왔던 기억이 있어서 그리 낯설지 않았습니다 지난 8월 8일부터 아트페어가 열렸었는데요 주말이라 선지 엘리베이터 입구부터 사람들이 꽤 많았습니다 1층 현장에서 바로 매표나 초대장 확인을 하고 올라가면 되더군요 전시는 호텔 객실 7층에서 10층까지 총 97개의 객실에서 전시가 열리게 됩니다 ​​\n \n \n \n지방에서 열리는 아트페어는 가끔 챙겨서 가봤지만 호텔에서 열리는 아트페어는 처음인지라 과연 어떻게 열릴지 궁금하기도 하고 기대가 좀 되었습니다 하루도 빠짐없이 그림 그리기를 좋아하는 두 녀석들도 이 전시가 어떤 식으로 진행되는지는 모른 채 그저 엄마를 따라 쫄레쫄레 7층으로 향했습니다 ​​\n \n \n \n말 그대로 객실에서 열리는 전시라 각 객실마다 다양한 작품을 만날 수 있었습니다 일반적인 아트페어와는 전혀 다른 성격이라 너무나 이색적이고 색달라서 너무 좋더라고요 ​​\n \n \n \n객실의 침대와 가구 비품들도 그대로 둔 채 작품들만 곳곳에 전시된 형태라 아주 독특하면서도 마치 처음부터 그곳에 있었던 것처럼 자연스러움을 느끼게 하는 작품들도 많았습니다 각 갤러리마다 배정된 객실에서 작품들을 적절하게 비치해두다 보니 일률적이지 않고 개성 있으면서도 작품이 돋보이게 하는 센스 있는 구성도 보였습니다 ​​\n \n \n \n \n \n \n \n무엇보다도 판매를 목적으로 하는 것이기 때문에 작품들마다 가격이 붙어져 있기도 했고 일반적인 아트페어의 흰 벽에 걸린 것보다는 실제 호텔 객실 벽에 걸려 있으니 작품을 내 집에 걸었을 때 어떤 느낌일지 상상이 더 쉽기 되기도 하며 잘 어울릴지에 대한 고민도 덜어주겠다 싶더군요 ​​\n \n \n \n객실의 화장실에도 작품들이 설치되어 있답니다 공간을 적절하게 활용한 것도 보이고 객실이 거의 비슷하지만 객실 타입에 따라서 또 다른 느낌의 작품 전시를 만날 수 있어서 좋았습니다 ​​\n \n \n \n창밖으로 보랏빛 맥문동 꽃이 활짝 핀 모습과 객실 내부의 꽃이 가득한 작품이 묘하게 잘 어울렸어요 객실마다 찾아다니면서 작품들을 감상하는데 아이들도 무척 흥미로워하더군요 사람은 또 어찌나 많은지 생각보다 너무 많아서 좀 놀라기도 했답니다 ​​\n \n \n \n \n레진을 이용한 이 작품은 마치 살아있는 물고기가 헤엄치는 듯한 모습입니다 ​​\n \n \n \n​\n \n \n \n \n한국화 서양화 조소 공예 등 정말 다양한 작품들을 만날 수 있습니다 알고 있는 작가의 작품들도 참 많았지만 처음 알게 된 작가들도 많았답니다 이렇게 한곳에서 다양한 작품을 만날 수 있다는 자체가 미술품을 예술을 사랑하는 이들에게는 특별한 시간이지 않을까 싶더군요 ​​\n \n \n \n \n \n미술작품만 있을 것이라 생각했는데 공예작품들도 있었습니다 세상에 하나밖에 없는 작품을 장신구로 착용할 수 있다는 것도 특별함을 부여하는 일이겠지요 모두 판매를 하는 것들이라 디자인을 보고 구매로 이어지는 경우가 많았습니다 ​​\n \n \n \n여기는 도자기 작품들이 전시되어 있는 방이에요 호텔 방이라는 공간과 무척이나 잘 어울리는 느낌입니다 ​​\n \n \n \n세밀하게 그려진 그림은 이미경 작가의 동전 하나로도 행복했던 구멍가게의 날들이 절로 떠올려졌습니다 봄밤의 아름다움이 오롯이 느껴지는 작품 앞에서 괜히 마음이 따스해졌어요 ​​\n \n \n \n \n \n \n이렇듯 함께 작품들을 감상하더라도 느끼는 바는 다르고 자신의 취향이 각기 다르다 보니 좋아하는 작품도 다르더라고요 작품들을 보면서 각자 소감을 말하기도 하고 마음에 드는 작품들은 사진으로 찍기도 하는 등 열심히 감상을 했습니다 아이들 데리고 전시 관람을 하는 경우 처음엔 좀 관심을 가지다가 금세 흥미가 식어버리곤 하는데 이날은 신기하게도 아이들이 더 적극적으로 방방마다 찾아다니면서 열심히 작품을 감상하더군요 ​​\n \n \n \n그림은 물론 사진 작품도 있었습니다 마침 책으로도 나왔다면서 책도 판매하고 있었어요 비엔나를 여행하면서 담은 순간들이 전시되어 있었지요 비엔나에서 담은 풍경과 함께 풀어놓을 이야기들이 살짝 궁금하기도 했습니다만 둘러볼 전시가 너무 많아서 일단 패스​​\n \n \n \n이 방에는 들어서는 순간 향기에 반했습니다 입구부터 허브들이 놓인 데다가 객실 곳곳에 싱그러운 허브들과 천연 디퓨저들의 향이 은은하게 퍼지고 있었습니다 전시를 보러 가서 이런 광경을 만날 것이라고는 예상치 못했답니다 ​​\n \n \n \n향이 어찌나 매혹적인지 결국 제가 쓸 것과 선물용 2개를 구입했답니다 양에 비하면 다소 비싼 가격이지만 여기 아니면 이 향을 구입할 수 없기에 후회할 바에는 지르자 싶어 과감히 질렀습니다 디퓨저 용기들은 모두 도예 작가의 작품들로 아로마용품과 콜라보를 한 작품들이랍니다 ​​\n \n \n \n이곳에 오기 전에는 1시간  1시간 반 정도면 다 둘러보겠지라고 생각했는데 97개의 객실에 전시된 작품들이 너무 많고 인상적이라 생각보다 관람하는데 꽤 시간이 걸렸습니다 그렇다 보니 아이들은 나중에 체력이 고갈되어 너무 힘들다고 하더군요 ㅎㅎ VIP라운지가 층마다 있던데 거기서 쉬어가면서 관람을 하면 그리 힘들지 않을 텐데 VIP가 아닌지라 입구에서 구경만 하는 신세였다지요 그리고 도록이 너무 갖고 싶었는데 입구에서 도록을 나눠주길래 물어봤더니 VIP만 준다고 ㅡㅡ 그러니까 저는 돈 주고 사야 한다는 거예요 돌아다니다 보니 어째 우리 말고는 다 VIP 같다는 생각이 ㅠㅠ​​\n \n \n \n전시를 보다 보면 기발한 작품들 신기한 작품들 멋짐이 느껴지는 작품들 다양한 느낌의 작품을 만나게 됩니다 침대 위가 마치 바다가 된 듯 수영을 즐기는 도자기 인형들의 모습이 너무 재밌었어요 ​​\n \n \n \n욕실로 갔더니 욕조 안에도 작품이 있는데 더 실감 나게 느껴지는 거 있죠 ㅎㅎ ​​\n \n \n \n또 다른 곳에는 이렇게 물고기가 그려진 접시를 물속에 담아두어 느낌을 살렸더라고요 ​​\n \n \n \n \n \n \n \n제가 미술 전시를 좋아하는 이유는 잘 몰라도 다양한 작가들의 상상력 넘치는 작품들을 보면서 영감을 얻는다는 거지요 뭔가 새롭고 신선한 충격이 흥미롭게 만들고 상상력을 자극하게 됩니다 아이들에게도 이런 전시를 보게 한 이유도 많은 것을 보고 느끼고 배울 수 있는 기회를 마련해주고 싶어서였답니다 ​​\n \n \n \n입구에 있는 동상을 보면서 김정은 닮았네  했더니 객실 내부에는 문재인 대통령이 있고 또 다른 곳에는 트럼프 대통령도 있더라고요 얼핏 보았던 입구의 그 동상은 김정은이 맞았습니다 ​​\n \n \n \n이렇듯 작품들 속에서 세계의 유명 인사들도 만나게 되는군요 ​​\n \n \n \n조금씩 지쳐가는 속에서 여행 온 기념으로 기념촬영 하자며 잠시 멈추어 서서 사진으로 남겨 보았습니다 아이들도 무척 좋아했던 전시라 대만족이었네요 ​​\n \n \n \n \n \n아이들 좋아하는 피규어와 귀여운 캐릭터들 제가 좋아하는 그로밋이 빨간 점박이가 되어 서 있는 것도 만났습니다 작품들을 감상하면서 든 생각은 너무 그림이 그리고 싶은 거예요 다양한 재료를 이용해 각기 자신만의 색깔로 담아낸 작품들을 감상하다 보니 제 안의 꿈틀거리는 무언가가 미친 듯 그림을 그리고 싶게 만들더라고요 잘 그리고 못 그리고를 떠나서 뭔가를 표현한다는 것 그것만으로도 흥분되고 재미난 일이지 않나 싶어요 작가들의 에너지를 한껏 받아서 그런 거 같기도 하고요 아시아 호텔 아트페어는 제게도 아이들에게도 신선한 자극이 된 멋진 경험이자 전시였답니다 다음 기회가 되면 또 이런 전시를 만나고 싶네요 ​​\n \n그랜드 인터컨티넨탈 서울 파르나스\n서울특별시 강남구 테헤란로 521\n \n \n​\n  "
contents = text.split('(\n\W+)')
for content in contents:
    lexrank.summarize(content)
    summaries = lexrank.probe(None)
    print("원문:\n" + text)

    print("\n\n\n: 요약문들 :")
    for summary in summaries:
        print("\n" + summary)