Transformers(13) - 要約①データセットの準備

要約を全4回に分けて説明していきます。

要約は、本文(長い文章)要約(短い文章)に変換する処理です。

「livedoorニュースの3行要約データセット」を使って、要約の処理を確認していきます。

ニュース記事の一覧を取得

まずはニュース記事の公開年月、カテゴリ、記事IDがまとまっているCSVファイルをダウンロードします。

ダウンロード後にファイル名を変更します。

[Google Colaboratory]

1
2
!wget https://raw.githubusercontent.com/KodairaTomonori/ThreeLineSummaryDataset/master/data/train.csv
!mv train.csv downloaded_train.csv

[実行結果]

1
2
3
4
5
6
7
8
9
10
--2021-10-06 08:20:12--  https://raw.githubusercontent.com/KodairaTomonori/ThreeLineSummaryDataset/master/data/train.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3836862 (3.7M) [text/plain]
Saving to: ‘train.csv’

train.csv 100%[===================>] 3.66M --.-KB/s in 0.07s

2021-10-06 08:20:12 (52.4 MB/s) - ‘train.csv’ saved [3836862/3836862]

ニュース記事を取得

ニュース記事の一覧(CSVファイル)を元に、ニュース記事をダウンロードします。

beautiful soupというスクレイピング用のライブラリを使って、ニュース記事の取得を行います。

(サーバに負荷がかからないように10秒間に1記事を取得するようにしています)

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from urllib.request import urlopen
from bs4 import BeautifulSoup
from bs4.element import NavigableString
from pprint import pprint
import time

# 収集するニュース記事のインデックス
start_index = 0 # 開始インデックス
end_index = 1000 # 終了インデックス

# コンテンツの取得
def get_content(id):
# サーバに負荷をかけないように10秒スリープ
time.sleep(10)

# URL
URL = 'https://news.livedoor.com/article/detail/'+id+'/'
print(URL)
try:
with urlopen(URL) as res:
# 本文の抽出
output1 = ''
html = res.read().decode('euc_jp', 'ignore')
soup = BeautifulSoup(html, 'html.parser')
lineList = soup.select('.articleBody p')
for line in lineList:
if len(line.contents) > 0 and type(line.contents[0]) == NavigableString:
output1 += line.contents[0].strip()
if output1 == '': # 記事がない
return
output1 += '\n'

# 要約の抽出
output0 = ''
summaryList = soup.select('.summaryList li')
for summary in summaryList:
output0 += summary.contents[0].strip()+'\t'
if output0 == '': # 記事がない
return

# 出力
print(output0+output1)
with open('output.tsv', mode='a') as f:
f.writelines(output0+output1)
except Exception:
print('Exception')

# IDリストの生成の取得
idList = []
# with open('ThreeLineSummaryDataset/data/train.csv', mode='r') as f:
with open('downloaded_train.csv', mode='r') as f:
lines = f.readlines()
for line in lines:
id = line.strip().split(',')[3].split('.')[0]
idList.append(id)

# コンテンツの取得
for i in range(start_index, end_index):
print('index:', i)
get_content(idList[i])

[実行結果]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
index: 0
https://news.livedoor.com/article/detail/11097202/
岡むら屋から、期間限定の新メニュー「じゃが肉めし」が登場する 男爵いもなどは味噌ベースで煮こまれ、しっかり味が染み込んでいるとのこと 「岡むら屋特製肉じゃが」と言うべき一品に、仕上がっているという 新橋と秋葉原に店を構える「岡むら屋」。味噌ベースの独自の味つけで牛バラ肉を煮込んだ具材がたっぷり乗ったオリジナル丼『肉めし』で知られる店です。自分も新橋店で『肉めし』を食べたことがありますが、濃いめの味付けでトロットロに煮こまれた牛肉とホカホカご飯は最高の相性! 味の染み込んだ豆腐も絶品で、腹ぺこボーイズ&ガールズたちの胃袋を満たし続けている丼なのです。昨年開催された『第2回全国丼グランプリ』では、肉丼部門で金賞受賞を獲得しています。そんな「岡むら屋」に期間限定新メニューが登場。その名も『じゃが肉めし』!肉と芋――このまま名作文学のタイトルにもなりそうな、重厚かつ甘美な響き。これって食いしんぼうたちにとっては定番かつ夢の組み合わせではないでしょうか。この組み合わせではすでに「肉じゃが」という殿堂入りメニューがありますが、今回の『じゃが肉めし』は、“岡むら屋特製肉じゃが”と言うべき一品に仕上がっているそうです。北海道産の男爵いもとしらたきを合わせ、味噌ベースの大鍋で他の具材と一気に煮込むことで、しっかり味が染み込んでいるとのこと。商品写真が公開されていますが、ビジュアルを見ただけで、その染みこみ具合いは一目瞭然!丼というステージで繰り広げられる、肉×芋×白米というスーパースターの競演。肉好き必食の1杯と言えそうです。あ、定食も同時販売されるので、気分で選べるのもうれしいですね。詳しい販売期間などは、店舗にお問い合わせください。肉めし「岡むら屋」

index: 1
https://news.livedoor.com/article/detail/11104959/
東京駅周辺の安くて美味しい「蕎麦ランチ」の名店を紹介している 「越後そば 東京店」では、ミニかき揚げ丼セットがおすすめと筆者 その他には、「手打ちそば 石月」「酢重正之 楽」「鎌倉 一茶庵 丸山」など 名店がひしめく「丸の内・日本橋」エリアで<うまい蕎麦ランチ>が食べられるお店を厳選してご紹介。ぴあMOOK『うまい蕎麦の店 首都圏版』が選んだ、とっておきの7店がこちら!ミニかき揚げ丼セット(温冷) 660円関東風の濃いめのつゆと、ふのりを練り込んだ喉ごしの良い自家製のそばが相性抜群。新鮮な油を使ったかき揚げは、サクサク。千代田区丸の内1-9-1 東京駅一番街B1F蕎麦も天ぷらも正統派の味お蕎麦と天丼(二八) 1600円喉ごしや歯応えを楽しむ二八蕎麦のほか、蕎麦の風味を存分に味わえる十割蕎麦と天丼のセットも。天ぷらは鮮度抜群で美味。千代田区丸の内1-6-4 丸の内オアゾ5F信州の郷土料理をアレンジ“信州フランス鴨”セリかも南蛮(温) 1680円和食とフレンチが融合したスタイルの人気店。このメニューは、本格信州そば、信州のフランス鴨、契約農家が育てた野菜など、素材にこだわっている。千代田区丸の内2-7-2 JPタワーKITTE5F納豆と卵白でふんわり食感なっとうそば 1100円取り寄せた蕎麦の実を、職人が毎日石臼で挽き、丹念に手打ちする。たっぷりの納豆と卵白がのって、なめらかな口当たり。千代田区丸の内1-5-1 新丸の内ビルディング5Fやわらかな厚切り鴨肉を堪能鴨せいろ 1945円、さつま揚げ 650円合鴨・ネギ・しめじなどを合わせた濃厚なつけ汁に、程良いコシの蕎麦がよく合う。自家製さつま揚げもぜひ味わいたい一品。千代田区丸の内2-4-1 丸の内ビルディング6Fコシの強い独特な田舎蕎麦が美味とり辛そば(温) 980円信州軽井沢の味噌・醤油屋「酢重正之商店」が手掛ける蕎麦屋の人気メニュー。辛口のつけ汁と太い田舎蕎麦がよく合うと評判。千代田区丸の内1-5-1 新丸の内ビルディングB1F風味豊かな生わさびが決め手ざるそば(生わさび) 710円信州の民家を思わせる店内で打つ自家製麺は歯応え抜群。生わさびを自分でおろして味わう。甘めのつゆがわさびにぴったり。千代田区丸の内1-6-1 丸の内センタービル B1Fうまい蕎麦の店 首都圏版日本人ならいつでも蕎麦が食べたい!

(・・・・・途中略・・・・・)

index: 998
https://news.livedoor.com/article/detail/11024867/
厚生労働省は1日、2015年の人口動態統計の年間推計を公表した 2015年の推計出生数は100万8000人で前年と比べ4000人増加した 死亡数は戦後最多の130万2000人となっている ○主な死因1位はガンなどの悪性新生物2015年の出生数は100万8,000人で、前年と比べて4,000人増加した。死産数は2万3,000胎(前年比1,000胎減)となった。死亡数は130万2,000人で戦後最多。主な死因の推計死亡数は、ガンなどの悪性新生物が37万人、心筋梗塞などの心疾患が19万9,000人、肺炎が12万3,000人、脳卒中などの脳血管疾患が11万3,000人だった。婚姻件数は63万5,000組(前年比9,000組減)、離婚件数は22万5,000組(前年比3,000組増)だった。人口動態総覧を日本・韓国・シンガポール・アメリカ・フランス・ドイツ・イタリア・スウェーデン・イギリスの9カ国で比較したところ、1人の女性が一生に産む子供の平均数(合計特殊出生率)が最も多いのはフランス(1.99人/2013年)、次いでスウェーデン(1.89人/2013年)、アメリカ(1.86人/2014年推定値)だった。一方シンガポール(1.19人/2013年)、韓国(1.21人/2014年)、イタリア(1.39人/2013年)の3カ国はいずれも1.4人を下回った。なお日本は1.42人(2014年)だった。

index: 999
https://news.livedoor.com/article/detail/11060391/
16年、年始から下落した中国株式市場を香港メディアが検証している 中国株式市場は個人投資家が主体の市場であり、価格変動が大きいと指摘 変動制限のため導入したサーキットブレーカー制度も一因だと論じている 2016年の株式市場は世界的に波乱の幕開けだった。中国株式市場では4日と7日にそれぞれ上海総合指数が7%も下落し、株価の急変を防ぐために導入されたサーキットブレーカーが発動。中国政府は導入されたばかりのサーキットブレーカー制度の一時停止に追い込まれた。中国株の急落は世界の株式市場に波及し、中国発の世界同時株安が起きたが、そもそも上海総合指数はなぜ年初から急落したのだろうか。香港メディアの鳳凰網は10日、中国の株式市場は閉鎖的であり、外国人投資家の関与が制限されていることを指摘したうえで、投資家に株式を投げ売りさせた要因について考察した。記事はまず、さらに、中国株式市場は個人投資家が主体の市場であることを指摘したうえで、だからこそ価格変動が大きいと指摘。さらに2015年夏にも上海総合指数が急落したことを指摘し、「現在、市場で取引をしているのは前回の急落を脳裏に焼き付けつつ、今なお怯える個人投資家たちだ」と伝え、だからこそ中国証券監督管理委員会は値幅変動を制限するためにサーキットブレーカーを導入したのだと論じた。一方で記事は、上海総合指数はサーキットブレーカーの導入によって7%下落すると取引が停止されることになっていたため、株価が下落すると個人投資家たちが取引停止を恐れて我先にと売り始めたと指摘。サーキットブレーカーの存在がむしろ価格変動を大きくしてしまったと論じた。

以上で、ニュース記事のダウンロードが完了しました。

output.tsvというファイルにニュース記事が出力されています。


次回は、ダウンロードしたニュース記事を学習データ検証データに分けます。