본문 바로가기

💻 개발IT/기타

[Python] 위키피디아(한국어) 데이터 가져오기

위키피디아 데이터 다운로드 

 

위키피디아는 주기적으로 데이터(덤프)를 제공하고 있다.

아래 사이트에 접속하면 직접 다운로드할 수 있다.

https://ko.wikipedia.org/wiki/위키백과:데이터베이스_다운로드

 

위키백과:데이터베이스 다운로드 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 이 문서는 한국어 위키백과의 정보문입니다.이 문서는 정책과 지침은 아니지만, 위키백과의 규범과 관습 측면에서 공동체의 확립된 관행을 설명하고 있습니다

ko.wikipedia.org

 

하지만 현재 jupyter notebook을 사용하고 있기 때문에

아래 command를 이용해서 다운로드하였다.

!wget https://dumps.wikimedia.org/kowiki/latest/kowiki-latest-pages-articles.xml.bz2

 ※ 해당 url은 사이트에서 확인할 수 있듯이 일반 문서의 최신판 덤프이다. 

 

 

데이터 파싱

위 과정을 진행하면 kowiki-latest-pages-articles.xml.bz2 파일을 얻을 수 있다.

이를 파싱 하기 위해 wikiextractor 패키지를 설치한다.

!pip install wikiextractor

 

설치받은 wikiextractor를 이용해서 데이터를 파싱 한다.

!python -m wikiextractor.WikiExtractor kowiki-latest-pages-articles.xml.bz2

 

아래 명령어를 입력하면 text/ 폴더가 새로 생긴 것을 확인할 수 있다.

%ls

text 폴더 내부에는 AA ~ AJ까지의 폴더가 존재하고,

각 폴더 내부에는 약 100개의 파일이 들어가 있다. 

파일을 열어보면 아래와 같이 <doc> 태그 내에 본문이 있는 형태이다.

 

 

파일 하나로 통합

AA~AJ 안에 있는 모든 위키 파일을 하나로 통합해 보자.

이를 위해 우선 내부에 있는 모든 파일 경로를 리스트화한다.

import os

def get_filename_list(dirname):
    filepaths = []
    filenames = os.listdir(dirname)
    for filename in filenames:
        filepath = os.path.join(dirname, filename)

        if os.path.isdir(filepath):
            filepaths.extend(list_wiki(filepath))
        else:
            find = re.findall(r"wiki_[0-9][0-9]", filepath)
            if 0 < len(find):
                filepaths.append(filepath)
    return sorted(filepaths)

filepaths = get_filename_list('text')

 

위에서 리스팅 한 파일을 wiki.txt파일에 모두 합친다.

with open("wiki.txt", "w") as resfile:
    for filename in filepaths:
        with open(filename) as reqfile:
            contents = reqfile.read()
            resfile.write(contents)

 

 

반응형