この記事は何
pythonで日本語テキストや英語テキストを分析するとき、多くの場合は知らない固有名詞が出現する。このような固有名詞に対応するwikipediaのページを取得し、さらにブログなどに表示する埋め込み型のリンクを表示するためのHTMLを取得したい。
使用する技術
Wikipedia API for Python
上記パッケージを使用して検索を行う。 ドキュメントは「Wikipedia Documentation — wikipedia 0.9 documentation」を参照。
janome
日本語辞書内包の形態素解析器。使用例は上記ドキュメントのトップページ参照。
from janome.tokenizer import Tokenizer t = Tokenizer() for token in t.tokenize("ついに福留孝介が代打で登場。"): print(token)
の出力結果は
ついに 副詞,一般,*,*,*,*,ついに,ツイニ,ツイニ 福留 名詞,固有名詞,人名,姓,*,*,福留,フクトメ,フクトメ 孝介 名詞,固有名詞,人名,名,*,*,孝介,コウスケ,コースケ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 代打 名詞,一般,*,*,*,*,代打,ダイダ,ダイダ で 助詞,格助詞,一般,*,*,*,で,デ,デ 登場 名詞,サ変接続,*,*,*,*,登場,トウジョウ,トージョー 。 記号,句点,*,*,*,*,。,。,。
となる。
oEmbed
oEmbedは、Webサイトのコンテンツを別のページに埋め込むためのオープンフォーマットです。
oEmbedフォーマットに対応しているウェブサイトはoEmbedのエンドポイントからHTMLを含むデータを取得できる。当初はこれを使用する予定だったものの、wikipediaのエンドポイントが不明だったので今回は未使用。
実装
wikipediaを検索
import wikipedia wikipedia.set_lang("ja") wikipedia.search("ニシン")
実行した結果は以下のようになる。
['ニシン', '機動戦士ガンダム バニシングマシン', 'イワシ', '身欠きニシン', 'ニシン目', 'ニシン科', '燻製ニシンの虚偽', 'ニシンの戦い', '鰊場作業唄', 'タイセイヨウニシン']
テキストから固有名詞のリストを取得する
token.part_of_speech
に品詞(固有名詞や人名といった情報)が含まれているので、そこで判定する。途中にflag
を使った判定を置いているのは例えば人名の場合に
福留 名詞,固有名詞,人名,姓,*,*,福留,フクトメ,フクトメ 孝介 名詞,固有名詞,人名,名,*,*,孝介,コウスケ,コースケ
といった形でトークンが別れることがあるため、それらを連結して一つの固有名詞として扱いたいため。
from janome.tokenizer import Tokenizer t = Tokenizer() text = "ついに田中将大と福留孝介が東京ドームで代打として登場。" temp_text = "" is_proper_nouns = False proper_nouns = [] for token in t.tokenize(text): if "固有名詞" in token.part_of_speech: is_proper_nouns = True temp_text += token.base_form elif is_proper_nouns: proper_nouns.append(temp_text) is_proper_nouns = False temp_text = "" print(proper_nouns)
実行した結果は以下のようになる。
['田中将', '福留孝介', '東京ドーム']
wikipediaの冒頭の説明を取得する
検索で取得できたものの先頭のwikipediaのページ(wp = wikipedia.page(search_results[0])
の箇所)から文字列を取得する。
HTMLの表示は IPython.display.HTML
で確認。
import wikipedia wikipedia.set_lang("ja") def get_wikipedia_html(word): search_results = wikipedia.search(word) # 検索結果がない if len(search_results)==0: return "" try: wp = wikipedia.page(search_results[0]) except BaseException: pass if wp is None: return "" wp_text = wp.content html = """ <div class="wiki-search-area"> <p><i>#DESCRIPTION#。</i></p> <p>引用元 <a href="#URL#">Wikipedia - #TITLE#</a></p> </div> """ html = html.replace("#DESCRIPTION#", wp_text[0:wp_text.index("。")]) html = html.replace("#TITLE#", search_results[0]) html = html.replace("#URL#", wp.url) return html from IPython.display import HTML html = get_wikipedia_html("東京ドーム")
出力は以下のようになる。