본문 바로가기
카테고리 없음

[파이썬] 메모장 한글 텍스트 전처리 후 태그 키워드 추출 자동화

by 퍼포먼스마케팅코더 2022. 12. 20.
반응형

파이썬 메모장 한글 텍스트 전처리 후 태그키워드 추출 자동화

참 오랜만에 뵙네요. 그동안 여러 가지로 바쁜 날을 보내고 있었습니다. 그래도 12월 이 끝나가네요. 여러분들 2023년도에도 바라는 일이 다 같이 이루어졌으면 좋겠습니다. 시작하죠. 오늘은 메모장 테스트를 뭔가 전 처리를 해서 태키워드까지 뭔가 뽑는 이거에 대해서 파이썬 코딩 공유드리고자 블로그 포스팅을 하게 됐습니다. 처리가 어떻게 되냐면요. 지금  디지털 마케팅 이런 거를 할 때 주로 이미지라든가 이런 것들이 제작하는 툴이 쉬워지지 않았습니까? 동영상도 마찬가지죠. 툴들이 쉬워지다 보니까 그동안 네이버 블로그, 티스토리 이런 거 하셨던 분들도 자기만의 뭔가 독특한 콘텐츠 부분들이 있다면 기반으로 다른 sns에 포맷에 맞는 형식으로 만들어서 보낼 수가 있는 거죠. 그래서 텍스트를 뭔가 전 처리를 한 번 해보고  그다음에 다른 sns 채널 같은 데 보면 태그키워드들이 있지 않습니까? 태그키워드까지 자동화로 뽑아내는 뭔가 파이썬 코딩을 만들어보고자 했습니다.

파이썬 메모장 한글 텍스트 전처리

이 거 다들 아시겠지만 이 코딩을 돌리면 어떻게 되느냐 10초 만에 다 나오겠죠. 거의 1시간 정도 걸리는 메모장 텍스트 내에 키워드를 다 바꾼다든가 한다든가 것들도 다 처리가 가능하죠. 그게 파이썬의 장점인  것 같습니다. 첫 번째로 메모장 테스트의 전철입니다. 이 코딩의 기반으로 뭔가 돌아가는 게 설명을 드리자면 메모장을 불러와야겠죠. 파일 내에서 메모장 텍스트의 디렉터의 주소를 자동으로 가져옵니다. 자동으로 가져와서 메모 작 텍스트의 dato의 주소를 알게 되는 거죠. 그걸 알게 됐으면 전 처리를 시작을 해야겠죠. 전 처리란 간 단합니다. 특수문자를 제거를 합 니다. 어떤 특정 특수문자 이런 것이 있다. 들어 있으면 전부 다 제거를 해놓고 그다음에는 이모지 이모티콘 같은 이런 것들을 다 제거를 해주는 거죠.

 

이 두 가지가 끝났으면 다음으로는 띄어쓰기 있지 않습니까? 띄어쓰기가 제대로 돼 있는지 안 돼 있는지 한번 확인을 하는 거죠. 이 확인이 끝났다 하면 맨 마지막으로 맞춤법 검사를 시행을 합니다.해서 마침표 검사 가 최종적으로 끝났다 하면 어떤 특정 텍스트 파일을 형성을 하는데 그쪽 안에 다가 다 집어넣는 거죠. 최종 자동으로 전 처리됐을 때 문자 열을 전부 다 확인을 한 다음에 그다음에 어떻게 하느냐 어떤 특정 부분의 텍스트를 가지고 오게 되는 거죠. 그게 끝나고 난 후에는 텍스트를 최종적으로 입력을 해놔서 밑에 어떤 특정 문구 이런 것이 있다. 한다면 그거를 입력 을 해 놓고 마지막으로 마무리를 짓게 되는 겁니다. 근데 여기서 요약하는 것들도 있어요. 요약하는 것들도 있기는 하는데 그것은 크게 신경 쓰지는 않으셔도 될 것 같습니다. 블로그를 요약할 수 이것이 다 정형화로 정해 놓은 상태에서 뽑아놓은 거기 때문에 요약본은 참고는 하지는 마시고요 전 처리를 하는 것 참고만 해주시면 될 것 같습니다.

 

from konlpy.tag import Kkma, Okt, Komoran, Hannanum
from konlpy.utils import pprint
from collections import  Counter
import re
import os

from pykospacing import Spacing
from hanspell import spell_checker



###################### 파일 내 메모장 텍스트 디렉토리 주소 가져오기
num=10

path = 'C:/Users/user/naverblog_ableclass_setup/' #디렉토리 경로
file_list = os.listdir(path)  #파일명

#h2_class_name = re.search('<div class="relatedTags_relation_(.+?)">', str(shop_rel_soup)).group()

f_title = []

for f_txt in file_list :
    try :
        txt = re.search('^'+str(num) +'(.+)', str(f_txt)).group()
        f_title.append(txt)
    except :
        pass

    
txt_dir = str(path) + str(f_title[0])
txt_dir_f = os.listdir(txt_dir)
    

for f_folder in txt_dir_f :
    txt_dir = str(path) + str(f_title[0])
    txt_dir_file = str(txt_dir) + '/' + str(f_folder)
    txt_dir_f = os.listdir(txt_dir)
    file_list_jpg = [file for file in txt_dir_f if file.endswith(".txt")]
    for f in file_list_jpg :
        txt_directory = str(txt_dir) + '/' + str(f)


    
###################### 파일 내 메모장 텍스트 디렉토리 주소 가져오기


content_txt = open(txt_directory, 'r', encoding='utf-8-sig')

text = content_txt.read()
text = text.replace("\u200b", "")

######################전처리

#content_text = f.read() #read로 해야됨
content_text = text

#특수문자 제거

def clean_text(inputString): #함수화
    text_rmv = re.sub('[-=+,#/\:^@*\"※~ㆍ』‘|\(\)\[\]`\'…》\”\“\’·]', ' ', inputString)
    text_rmv = ' '.join(text_rmv.split())
    return text_rmv

content_text = clean_text(content_text)

print(str(txt_directory) + "의 특수문자 제거완료")



#이모지 제거

emoji_pattern = re.compile("["
        u"\U0001F600-\U0001F64F"  # emoticons
        u"\U0001F300-\U0001F5FF"  # symbols & pictographs
        u"\U0001F680-\U0001F6FF"  # transport & map symbols
        u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                           "]+", flags=re.UNICODE)

content_text = emoji_pattern.sub(r'', content_text)
content_text = content_text.replace("\u200b", "")
content_text = content_text.replace("?", ".")
content_text = content_text.replace("!", ".")
content_text_list = content_text.split('.') #마침표로 리스트화

print(str(txt_directory) + "의 이모지 제거 완료")

#띄어쓰기

f_txt = open(r"C:\Users\user\Desktop\text_1_Spacing.txt", 'w', encoding='utf-8-sig')
spacing = Spacing()

for sent in content_text_list :
    new_sent = sent.replace(" ", '') #띄어쓰기 없는 문장 만들기
    kospacing_sent = spacing(new_sent)
    kospacing_sent = str(kospacing_sent) + '.'  #마침표 찍기
    f_txt.write(kospacing_sent + '\n')
f_txt.close()
print(str(txt_directory) + "의 띄어쓰기 처리 완료")


#맞춤법

f_txt = open(r"C:\Users\user\Desktop\text_1_Spacing.txt", 'r', encoding='utf-8-sig')
hanspell_txt = open(r"C:\Users\user\Desktop\hanspell_1_txt.txt", 'w', encoding='utf-8-sig')

text_1_Spacing = f_txt.read()  #읽기

text_1_Spacing_list = text_1_Spacing.split('.') #마침표 리스트화

for sent in text_1_Spacing_list :
    try :
        sent = sent + '.'
        spelled_sent = spell_checker.check(sent)
        hanspell_sent = spelled_sent.checked
        hanspell_txt.write(hanspell_sent + '\n')
    except :
        print("에러발생")
f_txt.close()
hanspell_txt.close()

print(str(txt_directory) + "의 맞춤법 처리 완료")


final_content_f = open(r"C:\Users\user\Desktop\hanspell_1_txt.txt", 'r', encoding='utf-8-sig')
final_content_f_txt = final_content_f.read()

#print(final_content_f_txt)  #최종 전처리된 문자열 확인



#########################설치 사례 텍스트만 가져오기

smartboard_setup = []

if final_content_f_txt.find("번째") > 0 : #주제
    smartboard_setup.append(final_content_f_txt[final_content_f_txt.find("번째 ") : len(final_content_f_txt)]) #해당 주제 단어 이후 끝단어까지 정렬 <- 주제

    
for i  in smartboard_setup :
    smartboard_setup_txt = i.split('.')

#smartboard_setup_txt[1:]


#########################설치 사례 텍스트만 최종 입력 완료

posting = open(str(txt_dir) + '/' + '포스팅.txt' , 'w', encoding='utf-8-sig')

for i in range(1, len(smartboard_setup_txt)) :
    txt = smartboard_setup_txt[i] + "."
    posting.write(txt)
    
additional_txt =  '\n' + "전국 무료 시연 문의 1855-4029" +'\n'  
additional_txt += "더 자세한 사항은 에이블클래스 네이버 검색하세요!" +'\n'  
additional_txt += '네이버블로그	https://blog.naver.com/ablewithus' + '\n'
additional_txt += '스마트스토어    https://smartstore.naver.com/ableclass' + '\n'
additional_txt += '\n'
additional_txt += '경상남도 창원시 의창구 차룡로48번길 44 1301호, 1302호 (팔용동, 창원스마트업타워)'

posting.write(additional_txt + '\n')
posting.close()


posting_summary = open(str(txt_dir) + '/' + '포스팅_summary.txt' , 'w', encoding='utf-8-sig')

for i in range(1, 5) :
    txt = smartboard_setup_txt[i] + "."
    posting_summary.write(txt)
    
additional_txt =  '\n' + "전국 무료 시연 문의 1855-4029" +'\n'  
additional_txt += "더 자세한 사항은 에이블클래스 네이버 검색하세요!" +'\n'  

posting_summary.write(additional_txt + '\n')
posting_summary.close()

print("최종완료")

 

 

메모장 내 태그키워드 추출 자동화

맨 마지막으로 두 번째 죠 텍스트를 기준으로 해서 전 처리를 끝냈습니다. 전 처리를 해서 끝내느냐 태키워드를 뽑아야겠죠. 태키워드를 어떤 걸로 해서 뽑아내느냐 로 해서 보자면 어떤 특정 키워드를 브랜드 키워드라든가 아니면 어떤 메인 키워드 이런 것들도 집어넣을 수도 있습니다. 뿐만 아니라 메모장 안에서 주로 자주 사용됐었던 텍스트 혹은 키워드를 기반으로 해서 그걸로 해시태그를 만 드는 거죠. 이 해시태그를 가지고 만들어 놓은 건데 이전에도 말씀드렸지만 5개냐 10개냐 인스타그램은 20개 이상 정도 사용을 하는데요. 사용하셔도 되고 아니면 추가적으로 집어넣으셔도 되고 아니면 뽑아놨던 키워드를 기반으로 해서 키워드 조합으로 하셨던 형식으로도 할 수도 있습니다. 경우에 따라서 다양하니까 그거는 참고만 해주시면 될 것 같네요. 오늘은 여기까지입니다. 받아 주셔서 고맙습니다.

############################# 해시태그 전용

from konlpy.tag import Kkma, Okt, Komoran, Hannanum
from konlpy.utils import pprint
from collections import  Counter


f = open(str(txt_dir) + '/' + '포스팅.txt' , 'r', encoding='utf-8-sig')

text = f.read()


okt = Okt()
noun = okt.nouns(text)

x = Counter(noun)

x.most_common()  #가장 많은 빈도수 정렬

x_most_common = sorted(x, key=x.get, reverse=True)  #가장 많은 단어만 리스트화


x_most_common_2 = []
#sorted(x.items(), key=lambda pair: pair[1], reverse=True)  #key, value 쌍으로만 값 정렬


for i in x_most_common[:12] : #가장 많이 쓰인 상위 7개 단어 기준
    if len(i) == 1 : #단어 1개인경우 제외
        pass
    else :
        #print(i) 
        x_most_common_2.append(i)
#print(x_most_common_2) #최종 5개 단어 보기
print('#' + x_most_common_2[0] 
      + ' #' +x_most_common_2[1] 
      + ' #' +x_most_common_2[2] 
      + ' #' +x_most_common_2[3] 
      + ' #' +x_most_common_2[4] 
      + ' #' +x_most_common_2[5] 
      + ' #' +x_most_common_2[6]
     ) #최종 5개 단어 보기

    
f.close()


print('' + x_most_common_2[0] 
      + ' ,' +x_most_common_2[1] 
      + ' ,' +x_most_common_2[2] 
      + ' ,' +x_most_common_2[3] 
      + ' ,' +x_most_common_2[4] 
      + ' ,' +x_most_common_2[5] 
      + ' ,' +x_most_common_2[6]
     ) #최종 5개 단어 보기



f = open(str(txt_dir) + '/' + '포스팅_해시태그.txt' , 'w', encoding='utf-8-sig')

f.write('#' + x_most_common_2[0] 
      + ' #' +x_most_common_2[1] 
      + ' #' +x_most_common_2[2] 
      + ' #' +x_most_common_2[3] 
      + ' #' +x_most_common_2[4] 
      + ' #' +x_most_common_2[5] 
      + ' #' +x_most_common_2[6]
      +'\n') #최종 5개 단어 보기

f.write('' + x_most_common_2[0] 
      + ' ,' +x_most_common_2[1] 
      + ' ,' +x_most_common_2[2] 
      + ' ,' +x_most_common_2[3] 
      + ' ,' +x_most_common_2[4] 
      + ' ,' +x_most_common_2[5] 
      + ' ,' +x_most_common_2[6]
     ) #최종 5개 단어 보기

f.close()

print("해시태그 작업 완료")

 

 

반응형

댓글