Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 웹 사전 텍스트를 스크래핑해 알파벳 순서대로 정렬된 단어 찾기

이 문제를 해결하려면 웹에서 데이터를 가져올 수 있는 requests 모듈이 필요합니다. requests는 Python의 대표적인 HTTP 라이브러리로, URL에 요청을 보내고 응답을 손쉽게 다룰 수 있게 해줍니다.

requests 모듈 설치

모듈이 설치되어 있지 않다면 명령줄(터미널 또는 CMD)에서 아래 명령어를 실행하여 설치합니다.

pip install requests

1단계: 웹 스크래핑(Scraping)

웹에서 단어 목록을 가져오는 절차는 다음과 같습니다.

  • requests 모듈을 임포트합니다.
  • 대상 URL에서 데이터를 요청(fetch)합니다.
  • 응답받은 바이트 데이터를 UTF-8로 디코딩합니다.
  • 디코딩된 문자열을 공백 기준으로 분리해 단어 리스트로 변환합니다.

2단계: 정렬된 단어 찾기(Ordered Finding)

가져온 단어들 중에서 알파벳 순서(ASCII 값 기준)대로 배열된 단어를 찾는 방법입니다.

  • 반복문을 사용해 단어 리스트를 순회(traverse)합니다.
  • 각 단어에서 인접한 두 문자의 ASCII 값을 비교합니다.
  • 앞 문자의 ASCII 값이 항상 뒤 문자보다 작거나 같으면 '정렬됨(ordered)'으로 판정하고 출력하고, 그렇지 않으면 '정렬되지 않음(not ordered)'으로 처리합니다.

전체 예제 코드

import requests

def Words_find():
    my_url = ""  # 웹사이트에 있는 .txt 파일의 URL을 입력하세요
    my_fetchData = requests.get(my_url)
    my_wordList = my_fetchData.content
    my_wordList = my_wordList.decode("utf-8").split()
    return my_wordList

def wordordered():
    collection = Words_find()
    collection = collection[16:]  # 파일 머리글(header) 부분 제외
    for my_word in collection:
        result = 'ordered'
        i = 0
        l = len(my_word) - 1
        if len(my_word) < 3:
            continue
        while i < l:
            if ord(my_word[i]) > ord(my_word[i + 1]):
                result = 'not ordered'
                break
            else:
                i += 1
        if result == 'ordered':
            print(my_word, ':', result)

if __name__ == '__main__':
    wordordered()

코드 설명

Words_find() 함수

URL에서 .txt 파일을 내려받아 UTF-8로 디코딩한 뒤, split()으로 공백 단위로 나누어 단어 리스트를 반환합니다. 이때 collection[16:]처럼 슬라이싱을 사용하면 파일 상단의 불필요한 머리글 행을 건너뛸 수 있습니다.

wordordered() 함수

각 단어에 대해 인접 문자의 ASCII 값을 ord() 함수로 비교합니다. 길이가 3 미만인 단어는 의미가 적으므로 continue로 건너뛰고, 중간에 한 번이라도 앞 문자가 뒤 문자보다 크면 즉시 'not ordered'로 판정하고 반복을 종료(break)합니다. 최종적으로 'ordered'로 판정된 단어만 화면에 출력합니다.

참고 사항

  • 실제 동작을 확인하려면 유효한 .txt 사전 파일 URL(예: 온라인 영어 단어 목록)을 my_url에 지정해야 합니다.
  • 네트워크 오류에 대비하려면 try-except 블록으로 예외 처리를 추가하는 것이 좋습니다.
  • 대용량 파일의 경우 제너레이터나 스트림 방식으로 처리하면 메모리 사용량을 줄일 수 있습니다.