💬
【Python】Livedoorニュースのデータセットを取得し、CSVファイルにする方法
自然言語処理の分野で、分析を行ったり、モデルを試すのに、どうしても必要になるのが、テキストのデータセットです。
しかし、手頃なデータセットを用意するのって難しいんですよね。
そんなお悩みにこたえてくれるのがlivedoorニュースコーパスです。
9つのカテゴリー別に複数の記事があることから、分類タスクや感情分析など、自然言語処理のさまざまなタスクに活用できます。
ここでは、Livedoorニュースのデータセットをダウンロードして、CSVファイルにする方法を解説していきます。
Livedoorニュースのデータセットの概要
株式会社ロンウイットが、収集しているデータです。
登録不要で、すぐにダウンロードできるので非常に便利です。
以下の9つのカテゴリ別に、複数のニュース記事が用意されています。(ただし、時期は結構古いです。)
- トピックニュース
- Sports Watch
- ITライフハック
- 家電チャンネル
- MOVIE ENTER
- 独女通信
- エスマックス
- livedoor HOMME
- Peachy
データセットをダウンロードしCSVファイルにする方法
カテゴリーごとにCSVファイルを作っていきます。
最終的には、こんな感じのCSVファイルができます。
ニュースコーパスをダウンロードする
以下を実行すると、Googleコラボの/contentディレクトリにldcc-20140209.tar.gzフォルダが生成されます。
!wget https://www.rondhuit.com/download/ldcc-20140209.tar.gz
ライブラリーをインポートし、ダウンロードしたtar.gzを解凍する
tar.gzを解凍し、idcc_dataフォルダに格納します。
import os
import pandas as pd
import tarfile
# ファイルパスを指定する
tar_file_path = "/content/ldcc-20140209.tar.gz"
extract_folder = "/content/ldcc_data/"
# tar.gzファイルを解凍し、extract_folderに格納する
with tarfile.open(tar_file_path, "r:gz") as tar:
tar.extractall(path=extract_folder)
関数を作成
各ディレクトリーのテキストファイルを辞書(articles)にまとめる関数を作成します
def read_articles_from_directory(directory_path):
#ディレクトリーの中から記事のテキストファイルのパスをリストとして読み込む
files = [f for f in os.listdir(directory_path) if f not in ["LICENSE.txt"]]
articles = []
for file in files:
#記事を一つずつ読み込み、url,date,bodyに分け、辞書を作る
with open(os.path.join(directory_path, file),
"r", encoding="utf-8") as f:
lines = f.readlines()
articles.append({
"url": lines[0].strip(),
"date": lines[1].strip(),
"body": ''.join(lines[2:]).strip()
})
return articles
CSVファイルの作成
# 各記事のディレクトリーを取得する
directories = [d for d in os.listdir(extract_folder + "text/")
if d not in ["CHANGES.txt", "README.txt"]]
# カテゴリーごとのCSVファイルを作る
csv_file_paths = {}
for directory in directories:
# Read articles from the category directory
articles = read_articles_from_directory(extract_folder + "text/" + directory)
df = pd.DataFrame(articles)
# Save to CSV
csv_path = f"/content/{directory}.csv"
df.to_csv(csv_path, index=False)
csv_file_paths[directory] = csv_path
print(csv_file_paths)
Discussion