見出し画像

【Python】にわかエンジニアもどきによるWikipediaライブラリの浅い解説【Wikipedia】


☆読み飛ばしても何ら問題ない前置き

唯坂 優(たださか ゆう)です。

平素よりちょくちょくPython系の記事を書いております。

趣味でコード書いてるだけの
にわかエンジニア(と名乗るのもおこがましい)ですが、
大変楽しくやらせていただいております。

さて。

今後書いていきたいコードの中で、
『Wikipediaの記事から文章を取得したいな〜』
なんて箇所があり、ググってみると
そのものズバリなwikipediaライブラリなるものがある模様。

せっかくなので、勉強がてらコイツを使ってどんなことができるのかまとめて記事にしてみようと思い、徒然なるままにキーボードを叩いておる始末。


☆wikipedia.search(ホニャホニャ)

テストコード1

import wikipedia
wikipedia.set_lang("ja"#言語を日本語に指定
print(wikipedia.search("犬"))

そういえば申し遅れましたがこちらのWikipediaライブラリ、
標準ライブラリではないためあらかじめインストールしておく必要があります。(せずにいきなり上記のコード書くとエラー吐きます。)

わからない方はpip installでググってね。
大体のライブラリはそれでインストールできます。

wikipedia.set_lang("ja")

言語を日本語に指定できます。
この指定をしないとデフォルトでは英語で表示されちゃう
ようなので要注意。

wikipedia.search(ホニャホニャ)

ホニャホニャを含む記事があるか検索できます。

テストコードではをキーワードに設定しています。

特に意味はないです。

さて実行結果はこちら。

['イヌ', '犬 (将棋)', '犬部', 'パトロン (犬)', 'ライカ (犬)', '動物タレント', '警察犬', 'R言語', 'ネコ', 'アウトブリード']
テストコード1

で検索をかけた結果がこのようにlist型で返ってきます。

R言語とか犬と何の関係があるのか分かりませんが、出てきちゃったもんはしょうがない。

何個かキーワードを変えて試してみましたが、
よりlistの先頭に近いものが関連度高いように感じました。

ところでコレ、今回は犬という超メジャーワードだったからこんなに出たけれども存在しないワードを入力したらどうなるんだろう?

テストコード2

print(wikipedia.search("キュルルルうぉぉ"))
[]
テストコード2

悲しげな空のlistがそこにはありました。


☆wikipedia.page(ホニャホニャ)

テストコード3


print(wikipedia.page("犬"))
<WikipediaPage 'イヌ'>
テストコード3

ぱっと見ただの文字列にも見えちゃいますが、
このWikipediaPageオブジェクトメソッド使ってあれやこれやするのが本領なので大成功です。

ちなみに先ほどのキュルルルうぉぉのような存在しないキーワードを入力すると、

テストコード4

print(wikipedia.page("キュルルルうぉぉ"))
wikipedia.exceptions.PageError: Page id "キュルルルうぉぉ" does not match any pages. Try another id!
テストコード4

こんな感じでエラー吐かれちゃいます。

エラー対策として、
先ほどのsearchと組み合わせて↓こんな書き方↓もできます。

テストコード5

_search=wikipedia.search("犬")
if len(_search)>=1:
	print(wikipedia.page(_search[0]))
<WikipediaPage 'イヌ'>
テストコード5

検索結果が一つ以上出てきた場合のみ記事を所得するやり方です。

このようにsearchの結果をスライスして引数として渡すこともできます。

さて、ここからは取得できた
WikipediaPageオブジェクトに使えるメソッドを手当たり次第試していきます!

※注記
記事内ではメソッドって言ってますが、
これメソッドって言っていいやつなのかさっぱりわかりません。
引数とかいらないし…
なのでニュアンスで感じ取ってください。


☆.categories

テストコード6

print(wikipedia.page("犬").categories)
['BNE識別子が指定されている記事', 'BNF識別子が指定されている記事', 'GND識別子が指定されている記事', 'HDS識別子が指定されている記事', 'ISBNマジックリンクを使用しているページ', 'LCCN識別子が指定されている記事', 'NDL識別子が指定されている記事', 'NKC識別子が指定されている記事', 'モデル生物', '出典のページ番号が要望されている記事', '出典を必要とする記事/2019年5月', '出典を必要とする記述のある記事/2013年2月', '外部リンクがリンク切れになっている記事/2021年4月', '家畜', '犬', '言葉を濁した記述のある記事 (いつ)/2013年1月-5月', '雑多な内容を箇条書きした節のある記事 - 2013年1月-5月']
テストコード6

みたところ記事についてるタグ的なものを一覧にしてくれる
ようですね。

識別子が何とかっていうのはよくわかりませんが「家畜」とか「モデル生物」とかのタグは使えそうだな?ということで、用例コードを書いてみました。

テストコード7

import wikipedia

wikipedia.set_lang("ja")

katiku=[]

for i in ["犬","牛","ワニ","ヒト","プラスチック"]:
	page=wikipedia.page(i).categories
	if "家畜" in page:
		katiku.append(i)

print(katiku)
['犬', '牛']
テストコード7

「犬」「牛」「ワニ」「ヒト」「プラスチック」のうち、家畜タグを持つ「犬」「牛」だけ抜き出すことができました。これは案外使えそうだ。


☆.content

テストコード8

print(wikipedia.page("犬").content)
イヌ(犬、狗、学名:Canis lupus familiaris、ラテン語名:canis、英名:dog、domestic dog)は、食肉目・イヌ科・イヌ属に分類される哺乳類の一種である。…

※以下長すぎるため略
テストコード8

記事全文がテキストとして出力される感じですね。
長すぎるため省略しましたが、要所要所で
『== 定義 ==』とか『== 起源 ==』とかいったラベルが挟まるので
とっても見やすくて便利
このラベル利用して欲しい部分だけの文章抜き出しなんかも可能かも。


☆.html

テストコード9

print(wikipedia.page("犬").html)
<bound method WikipediaPage.html of <WikipediaPage 'イヌ'>>
テストコード9

よくわからんが多分htmlを扱うモジュールと組み合わせたらうまくいきそうなオブジェクトが返ってきた。

BeautifulSoupを使ったテストコードを見本のつもりで書こうかとも思いましたがそうするとBeautifulSoupの説明も必要になってくるので割愛。各自ググってね


☆.images

テストコード10

print(wikipedia.page("犬").images)
['https://upload.wikimedia.org/wikipedia/commons/1/10/Annual_Bench_Show_of_the_Westminster_Kennel_Club_opens_this_week_LOC_3608405718.jpg',…※以下略
テストコード10

記事内に添付されている画像のURL一覧を取得できるメソッドのようです。
画像識別AIのデータ収集とかに使えるのかな…と思いましたけど
著作権的に大丈夫なのか…?

個人的には使いそうにないですね。


☆.links

テストコード11

print(wikipedia.page("犬").links)
['101 (映画)', '1685年', '1696年', '1709年', '1758年', '1873年', '1884年', '1885年', '1909年', '1961年', '2009年', '2012年', '2018年', '2021年', '2月1日', '3月12日', '4月17日 (旧暦)', '4月1日 (旧暦)', '4月7日', '4月9日', '675年', '7月21日', '9月11日', '9月30日 (旧暦)', 'AFPBB', 'DVD探知犬',…※以下略
テストコード11

記事内にリンクが貼られている記事のタイトルが一覧になって返ってきます。

連鎖的に関連する記事の情報を取得するとかには利用できそうですが量が多すぎてめちゃくちゃ重くなりそう。


☆.original_title

テストコード12

print(wikipedia.page("犬").original_title)
イヌ
テストコード12

記事のタイトルが返ってくる。意味ないかと思ったけどこれ応用すればひらがな・カタカナ→漢字変換に使えたりしないかな。

テストコード13

import wikipedia

wikipedia.set_lang("ja")
print(wikipedia.page("カバン").original_title)
テストコード13

漢字からカタカナへの変換は僕がよく使ってる自然言語処理ライブラリjanome
できるんですが、逆パターンがこれでできるようになりました。

ただこれ、ものによってちゃんと漢字になるやつとそうでないものがあるので実用性はイマイチ。例えば上記コードを『ミカン』で試したら出力が『ウンシュウミカン』になっちゃいました。
出力をjanomeにかけて読みが一致してるかどうかの判定噛ませたら使えるか。(脱線)


☆.pageid

テストコード14

print(wikipedia.page("犬").pageid)
1337121
テストコード14

おそらくWikipedia内での当該ページに振られた通し番号的なものですね。
こればっかりはほんとに使い方が思いつかなかった…
pageidから逆に引く
こともできるのかな?
だとしたらrandomモジュールを利用して適当な記事を取得するコードも書けるけど
やり方がわかりませんでした。


☆.summary

テストコード15

print(wikipedia.page("犬").summary)
イヌ(犬、狗、学名:Canis lupus familiaris、ラテン語名:canis、英名:dog、domestic dog)は、食肉目・イヌ科・イヌ属に分類される哺乳類の一種である。 属名 Canis、種小名 lupus はラテン語でそれぞれ「犬」「狼」の意。亜種名 familiaris はやはりラテン語で、「家庭に属する」といった意味である。広義には、イヌ科動物全般を指すこともある(後述)。現代の日本では屋外、あるいは屋内で飼われ、ペットとして猫と並ぶ代表的な動物である。
テストコード15

summary(要約・概要)の名の通り、当該記事の要約が出てきます。
普通にWikipedia開いた時に導入部分として表示されるやつですね。

.cotentと被り気味ですが、
こっちの方が出力の量が全然少ないので使い分けたら便利そう。


☆.url

テストコード16

print(wikipedia.page("犬").url)
https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%8C
テストコード16

当該ページのURLを表示してくれます。
引用元を掲載したい時に使えますね。


☆.references

テストコード17

print(wikipedia.page("犬").references)
['http://j.people.com.cn/94638/94659/8611368.html', 'http://www.asahi.com/articles/DA3S13110312.html', …※以下略
テストコード17

記事内で引用されている参考文献(ネット上にあるもの)URL一覧が取得できます。
関連するサイトをスクレイピングする際には使えるかな?



…以上!!

本当は使えるメソッド全部載せたかったんですけど使い所があまりに謎とか
よく分からなさすぎるという理由でいくつか割愛いたしました。

この記事が誰かの役に立ってくれたら幸いです。



↓一番の自信作です。ついでに読んでね↓

この記事が気に入ったらサポートをしてみませんか?