파이썬 문자열에서 이름 구별 해 내는 방법

조회수 1716회

먼저, 목적은 한글이름, 영어이름, 특수문자, 공백 등이 합쳐진 문자열에서 한/영 이름만 구별하여 중복되는 이름을 하나만 남기고 제거하려고 하는 것입니다.

지금까지 제가 진행한 작업은, 가지고있는 텍스트 파일을 불러와서 불필요한 특수문자들을 제거하고 문자열로 변환 한 것인데요, 코드는 아래와 같습니다 :

path = 'E:\Data Science\Personal_Project\Church\Data\original.txt'

def open_text(path):
    with open(path, "r", encoding='euc-kr') as f:
        text = f.readlines()
        string = ''.join(text)
        unicode_line = string.translate({ord(c): None for c in '.;*\n'})
        cleaned = re.split('-|,', unicode_line)


        print(type(unicode_line), type(cleaned))
        return(cleaned)

여기서 질문입니다 위에 Function에 추가하고싶은 것이

1) 만약에 대쉬라인 앞에 글자가 있다면, (예를들어 '출석----- ' 이런식으로요) 대쉬로 split하기전에, 그 앞에 있는 글씨들은 제거하고 싶습니다.

2) 혹은 제가 리스트를 만들고 --- [출석, 조퇴, 지각, 휴가] --- 이 안에 있는 단어들은 제거하는 식으로 하고싶습니다.

혹시 더 좋은 방법이 있거나, 위에 방법 중 더 pythonic한 방법으로 알려주시면 감사하겠습니다!!

편의를 위해 샘플 텍스트를 덧붙이겠습니다.

1월 20일 현황


** 출석
-----------

강대세, 강봉성, 강상무, 강석심 무명4, Daniel Lee, Dong H Kim, Jeannie Oh, Jessica Yi, McAleer Chong, Shiu K Lew, Song H Kwak,  Steve Jang, Tok Kim, 







** 결석
---------

휴가, 무단, 무급휴가, 비상
------------------------------------------------------------------------------------------- 
고행옥, 김계순
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 고행옥 김계순은 각각 무단결석인가요? 휴가인가요?? 데이터가 알쏭달송 한데요. 엽토군 2019.1.29 10:35

1 답변

  • 해결했습니다. ㅎㅎ 라인을 다 나누기전에 먼저 * 이나 - 로 시작하는 줄은 아예 건너 뛰도록 했고, 나머지 이름이 아닌 단어는 세트로 만들어서 그 안에 없는 것들만 name 세트에 추가하도록 했습니다.

    더 나은 방법이 있으시면 얼마든지 알려주시면 감사하겠습니다.

    non_names = set("출석, 결석, 휴가, 무단, 무급휴가, 비상".split(", "))
    with open("text.txt") as f:
        next(f) # skip first line
        names = set()
        for line in f:
            if not line.startswith(("*", "-")):
                for name in line.strip().split(", "):
                    if name and name not in non_names:
                        names.add(name)
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)