파이썬 문자열에서 이름 구별 해 내는 방법
조회수 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,
** 결석
---------
휴가, 무단, 무급휴가, 비상
-------------------------------------------------------------------------------------------
고행옥, 김계순
-
(•́ ✖ •̀)
알 수 없는 사용자
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)
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력