Basic Python/Workbook

How to preprocess the article to be neat with Regular Expression

Naranjito 2022. 11. 24. 10:14

1. Remove email and url

2. Remove byline

3. Remove others

4. Remove whitespace

 

content='''(서울=뉴스1) 이승배 기자 = 박정호 SKT 대표이사가 25일 서울 중구 을지로 SKT타워에서 열린 SK텔레콤 제37기 정기 주주총회에 참석하고 있다. 2021.3.25/뉴스1
           
          
          SK텔레콤이 주주가치 제고를 위해 한국거래소에 자사주 869만주 소각을 반영한 변경상장을 완료했다고 14일 밝혔다. 발행주식 총수의 10.8% (약 2조6000억원)규모다. 이로써 전날 기준 SK텔레콤의 발행주식 총수는 기존 8075만주에서 7206만주로 줄어들었다.
          앞서 SK텔레콤은 지난 4일 올해 인적분할에 앞서 기업가치 및 주주가치 제고를 위해 기존 자사주를 사실상 전량 소각한다고 발표한 바 있다. 이번 자사주 소각으로 발행주식 총수가 감소하면서 기존 주주들의 지분율이 모두 상승했다.
          SK텔레콤은 "분할 후 기업가치가 올라갈 것으로 전망하는 증권업계 전반의 시각을 감안하면, 기업 펀더멘털 변동없이 주식 수만 줄어든 상황"이라며 "자사주 소각 전보다 주식가치 상승 여력이 더 커졌다"고 분석했다.
          SK텔레콤은 "발행주식 총수가 줄었음에도 전날 시가총액이 약 22조5000억원을 기록해 주주총회에서 기업구조(인적분할) 개편을 공식화했던 지난 3월25일 시가총액(약 20조5000억원)보다 10%가량 늘었다"고 설명했다. 주가도 연초 대비 30% 이상 상승했다고 덧붙였다.
          한편 SK텔레콤은 상반기 내 이사회 의결을 거쳐 오는 10월 주주총회, 11월 인적분할 법인의 재상장을 통해 인적분할 절차를 끝낼 계획이다.
          
           김수현 기자 theksh01@mt.co.kr'''

 

My first inefficient code

def processing(content):

    pattern_email = re.compile(r'[-_0-9a-z]+@[-_0-9a-z]+(?:\.[0-9a-z]+)+', flags=re.IGNORECASE)
    pattern_url = re.compile(r'(?:https?:\/\/)?[-_0-9a-z]+(?:\.[-_0-9a-z]+)+', flags=re.IGNORECASE)
    pattern_others = re.compile(r'\.([^\.]*(?:기자|특파원|교수|작가|대표|논설|고문|주필|부문장|팀장|장관|원장|연구원|이사장|위원|실장|차장|부장|에세이|화백|사설|소장|단장|과장|기획자|큐레이터|저작권|평론가|©|©|ⓒ|\@|\/|=|▶|무단|전재|재배포|금지|\[|\]|\(\))[^\.]*)$')
    
    ptn1=re.compile('[a-zA-Z가-힣]+ ?뉴스|뉴스+[a-zA-Z가-힣0-9]+ ?|[a-zA-Z가-힣]+newskr|[a-zA-Z가-힣]+ ?Copyrights')

    ptn2=re.compile('\s+Copyrights|\s+배포 ?금지')
    ptn3=re.compile('[a-zA-Z가-힣]+com|[a-zA-Z가-힣]+.kr')
    ptn4=re.compile('[가-힣]+ ?기자|[가-힣]+ ?신문|[가-힣]+투데이|[가-힣]+미디어|[가-힣]+ ?데일리|[가-힣]+ 콘텐츠 무단|[가-힣]+ ?전재|[가-힣]+배포 ?금지')

    ptn5=re.compile('데일리+[가-힣]')

    ptn6=re.compile(r'전재\s+변형')

    ptn7=re.compile('\s+배포 ?금지')
    ptn8=re.compile('[a-zA-Z가-힣]+.kr')
    ptn9=re.compile('/^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/')
    ptn10=re.compile('[\r|\n]')
    ptn11=re.compile('\[[^)]*\]')
    ptn12=re.compile('[^ ㄱ-ㅣ가-힣A-Za-z0-9]')
    ptn13=re.compile('뉴스코리아|및|Copyright|저작권자|ZDNET A RED VENTURES COMPANY')
    ptn14=re.compile('\([^)]*\)')
    ptn15=re.compile('[-=+,#\?:^$@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》·▲\n]')
    ptn16=re.compile(r"[\s]{2,}")
    ptn17=re.compile(r'/+[a-zA-Z가-힣]')

    lst=[ptn1,ptn2,ptn3,ptn4,ptn5,ptn6,ptn7,ptn8,ptn9,ptn10,ptn11,ptn12,ptn13,ptn14,ptn15,ptn16,ptn17]

    result = pattern_email.sub('', content)
    result = pattern_url.sub('', result)
    result = pattern_others.sub('.', result)

    
    for i in lst:
        result=i.sub('',result)
        pattern_bracket = re.compile(r'^((?:\[.+\])|(?:【.+】)|(?:<.+>)|(?:◆.+◆)\t)')
        result = pattern_bracket.sub('', result).strip()
    return result

 

Efficient code, what is different from before is

- Declare variable outside of fuction

- Make the list of all the compile

- Loop the list with enumerate in order to handle if there is exception for handling

ptn_list = [
    re.compile(r'[-_0-9a-z]+@[-_0-9a-z]+(?:\.[0-9a-z]+)+', flags=re.IGNORECASE),
    re.compile(r'(?:https?:\/\/)?[-_0-9a-z]+(?:\.[-_0-9a-z]+)+', flags=re.IGNORECASE),
    re.compile(r'\.([^\.]*(?:기자|특파원|교수|작가|대표|논설|고문|주필|부문장|팀장|장관|원장|연구원|이사장|위원|실장|차장|부장|에세이|화백|사설|소장|단장|과장|기획자|큐레이터|저작권|평론가|©|©|ⓒ|\@|\/|=|▶|무단|전재|재배포|금지|\[|\]|\(\))[^\.]*)$'),
    re.compile('[a-zA-Z가-힣]+ ?뉴스|뉴스+[a-zA-Z가-힣0-9]+ ?|[a-zA-Z가-힣]+newskr|[a-zA-Z가-힣]+ ?Copyrights'),
    re.compile('\s+Copyrights|\s+배포 ?금지'),
    re.compile('[a-zA-Z가-힣]+com|[a-zA-Z가-힣]+.kr'),
    re.compile('[가-힣]+ ?기자|[가-힣]+ ?신문|[가-힣]+투데이|[가-힣]+미디어|[가-힣]+ ?데일리|[가-힣]+ 콘텐츠 무단|[가-힣]+ ?전재|[가-힣]+배포 ?금지'),
    re.compile('데일리+[가-힣]'),
    re.compile(r'전재\s+변형'),
    re.compile('\s+배포 ?금지'),
    re.compile('[a-zA-Z가-힣]+.kr'),
    re.compile('/^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/'),
    re.compile('[\r|\n]'),
    re.compile('\[[^)]*\]'),
    re.compile('[^ ㄱ-ㅣ가-힣A-Za-z0-9]'),
    re.compile('뉴스코리아|및|Copyright|저작권자|ZDNET A RED VENTURES COMPANY'),
    re.compile('\([^)]*\)'),
    re.compile('[-=+,#\?:^$@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》·▲\n]'),
    re.compile(r"[\s]{2,}"),
    re.compile(r'/+[a-zA-Z가-힣]'),
]

def processing(content): 
    pattern_bracket = re.compile(r'^((?:\[.+\])|(?:【.+】)|(?:<.+>)|(?:◆.+◆)\t)')
    result = str(content)
    for i, ptn in enumerate(ptn_list):
        result = ptn.sub('.' if i == 2 else "", result)
        result = pattern_bracket.sub('', result).strip()
    return result

 

'Basic Python > Workbook' 카테고리의 다른 글

Latitude VS Longitude  (0) 2023.06.05
How to get Hydra config without using @hydra.main()  (0) 2022.11.24
simple way to merge list  (0) 2022.11.22
Seperate 2D array to nested list  (0) 2022.05.16