😎 목표
- 파일 입출력 사용
- 리스트 컴프리헨션을 사용해 단어의 빈도수 구하기
- 정규식을 사용해 단어의 빈도수 구하기
- 사전으로 알파벳의 빈도수 정렬하기
참고.
구텐베르크 프로젝트 에서 다양한 eBook을 다운받아서 사용할 수 있습니다.
🤔 1. txt 파일을 읽어와 문자열로 출력해보자.
🐧 먼저 with ~ as 구문으로 txt파일을 열람합니다.
🐧 파일을 읽는 코드는 아래와 같이 구현할 수도 있는데요.
🐧 위 코드처럼 파일을 코드에서 열람하고 마지막에는 닫아주는 작업(book.close())이 필요한데 with ~ as 구문은 이 작업을 자동으로 처리해주니 작은 실수를 방지할 수 있습니다!
🐧 book.read()를 통해 내용을 읽고 타입을 출력해보니 "str"인 걸 확인할 수 있네요. 그럼 이제 read_book에 "years가 몇 번 나오는지 확인해봐요.
🤔 2. "years" 단어가 총 몇 번 등장할까?
🐧 첫 번째 방법
한 눈에 보기에도 심플하네요. read_book의 모든 문자를 소문자로 바꾸고( read_book.lower() )
그 안에서 "years"의 개수를 반환해 주는 count("years") 를 사용했습니다.
🐧 두 번째 방법
리스트 자료형도 연습삼아 사용해봅니다.
먼저, read_book의 단어를 리스트로 만들었어요.( splitted = read_book.split() )
그리고 splitted 리스트를 순회하면서 "years"에 해당하는 아이템만 들고있는 리스트를 생성합니다. [word for word in splitted if "years" in word.lower()] 는 정해진 조건을 가지고 리스트를 만들 때 간결하게 표현할 수 있는 방법인 리스트 컴프리헨션이라고 합니다.
식을 해석하면 "리스트에는 word 가 들어가는데
그 word의 출처는 splitted 리스트이고( for word in splitted )
word를 소문자로 바꿨을 때 "years"가 포함된 아이템이면( if "years" in word.lower() ) 추가할거야~"입니다!
🐧 또 다른 세 번째 방법(re 모듈)
🤔 3. 알파벳 별로 빈도수를 체크해보자.
1. 알파벳(key) : 횟수(value) 쌍을 가진 사전을 만듭니다.
🐧 여기서도 컴프리헨션 표현으로 사전을 만들어주네요!
🐧 사전에는 chr(alphabet) : 0 key : value 쌍으로 이 들어가는데!
🐧 chr는 정수를 아스키 코드에서 문자로 변환해서 출력해줍니다!
🐧 출처는 for alphabet in range(ord("a"), ord("z") + 1) 입니다!
🐧 ord("a")는 "a"의 아스키 코드에서 정수를 출력해줍니다!
🐧 그러니까 range(ord("a"), ord("z") + 1) 는 a ~ z까지 알파벳을 범위로 삼겠다!
2. read_book에서 알파벳 별로 빈도수를 체크해 사전에 저장합니다.
🐧 위에서 사용했던 방법들을 활용해 사전에도 적용해봤습니다.
❗❗ 1번, 2번 과정을 다른 방법으로 처리할 수도 있어요!
🐧 get(key, deault)는 사전에서 key를 검색하고 "만약 없다면" default를 반환해줍니다!
🐧 get(key)로도 사용할 수 있어요! 이 경우엔 "만약 없다면" None을 반환합니다.
❗❗ 또 다른 방법(Counter 모듈)
🤔 4. 알파벳 빈도수 기준으로 사전에서 내림차순 정렬!
🐧 sorted 함수는 sorted(순환가능객체, 정렬조건) 인자가 들어갑니다!
🐧 counter.items() 은 사전에서 (key, value) 쌍의 순환객체를 만들어 주고(dict_items 타입)
🐧 key = lambda x : -x[1] 는 x[1]이 value를 의미하는데 이 경우에는 "빈도수"를 가리키겠죠! 그리고 앞에 -(마이너스)가 붙어서 오름차순으로 정렬을 해줍니다!(기본 설정은 오름차순)
❗❗또 다른 방법(Counter 모듈)
🐧 이거면 한 줄에 알파벳 빈도수대로 정렬된 사전을 툭 던져줍니다!!
🐧 하지만... 가독성은 괜찮아 보이나요..?
'파이썬' 카테고리의 다른 글
[파이썬] 난수로 원주율 구하기(pyplot, numpy) (0) | 2024.03.22 |
---|---|
[파이썬] 리스트를 간결하게 만드는 방법이?!(list comprehension) (0) | 2024.03.13 |
[파이썬] 변수에 값을 대입과 동시에 표현식으로!(바다코끼리 연산자) (0) | 2024.03.13 |
[파이썬] 객체가 특정 타입이 맞는지 확인하고 싶다.(isinstance) (0) | 2024.03.13 |
[파이썬] 사전(Dictionary) (0) | 2024.03.12 |