web-dev-qa-db-ja.com

ウィキペディアからプレーンテキストを取得する方法

ウィキペディアの説明セクションのみを取得するスクリプトを書きたいのですが。つまり、私が言うとき

/wiki bla bla bla

bla bla bla の(== --- ==)Wikipediaページに移動し、以下を取得して、チャットルームに返します。

「ブラ・ブラ・ブラ」はジジ・ダゴスティーノが作った曲の名前です。彼はこの歌を「私が話し、何も言わずに話すすべての人々のことを考えて書いた作品」と表現しました。目立つが無意味なボーカルのサンプルは、英国のバンドストレッチの曲「Why Did You Do It」から引用

これどうやってするの?

22
Wifi

Wikipediaで実行される MediaWiki API を使用します。自分でデータの解析を行う必要があります。

例えば:

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&&titles=Bla%20Bla%20Bla

手段

メインページ(title = Main%20Page)の最新リビジョンのコンテンツ(rvprop = content)をJSON形式(format = json)でフェッチ(action = query)します。

クエリを検索し、最初の結果を使用して、スペルミスなどを処理することができます。

19
Katriel

ここではいくつかの異なる可能なアプローチがあります。自分に合った方を使用してください。以下のすべてのコード例では、APIへのHTTPリクエストに requests を使用しています。ピップがあれば、requestspip install requestsでインストールできます。それらはすべて Mediawiki API を使用し、2つは query エンドポイントを使用します。ドキュメントが必要な場合は、これらのリンクをたどってください。

1. extracts propを使用して、APIから直接、ページ全体またはページの「抽出」のプレーンテキスト表現を取得します

このアプローチは TextExtracts拡張子 のMediaWikiサイトでのみ機能することに注意してください。これには特にウィキペディアが含まれますが、たとえば http://www.wikia.com/ のような小規模なMediawikiサイトは含まれません

次のようなURLにヒットしたい

https://en.wikipedia.org/w/api.php?action=query&format=json&titles=Bla_Bla_Bla&prop=extracts&exintro&explaintext

それを分解すると、そこには次のパラメーターがあります( https://www.mediawiki.org/wiki/Extension:TextExtracts#query+extracts に文書化されています):

  • action=queryformat=jsontitle=Bla_Bla_Blaはすべて標準のMediaWiki APIパラメータです
  • prop=extractsを使用すると、TextExtracts拡張機能が使用されます
  • exintroは、最初のセクション見出しの前のコンテンツへの応答を制限します
  • explaintextは、応答の抽出をHTMLではなくプレーンテキストにします

次に、JSON応答を解析し、抽出を抽出します。

>>> import requests
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'query',
...         'format': 'json',
...         'titles': 'Bla Bla Bla',
...         'prop': 'extracts',
...         'exintro': True,
...         'explaintext': True,
...     }
... ).json()
>>> page = next(iter(response['query']['pages'].values()))
>>> print(page['extract'])
"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

2. parseエンドポイントを使用してページの完全なHTMLを取得し、解析して、最初の段落を抽出します

MediaWikiには parseエンドポイント があり、 https://en.wikipedia.org/w/api.php?action=parse&page=Bla_Bla_BlaのようなURLでヒットできます ページのHTMLを取得します。次に、それを lxml のようなHTMLパーサーで解析し(pip install lxmlを使用して最初にインストールします)、最初の段落を抽出します。

例えば:

>>> import requests
>>> from lxml import html
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'parse',
...         'page': 'Bla Bla Bla',
...         'format': 'json',
...     }
... ).json()
>>> raw_html = response['parse']['text']['*']
>>> document = html.document_fromstring(raw_html)
>>> first_p = document.xpath('//p')[0]
>>> intro_text = first_p.text_content()
>>> print(intro_text)
"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

3.ウィキテキストを自分で解析する

query AP​​Iを使用してページのウィキテキストを取得し、mwparserfromhellを使用して解析し(pip install mwparserfromhellを使用して最初にインストールします)、次に-を使用して人間が読めるテキストに縮小できます。 strip_codestrip_codeは、執筆時点では完全には機能しませんが(以下の例に明確に示されているように)、うまくいけば改善されるでしょう。

>>> import requests
>>> import mwparserfromhell
>>> response = requests.get(
...     'https://en.wikipedia.org/w/api.php',
...     params={
...         'action': 'query',
...         'format': 'json',
...         'titles': 'Bla Bla Bla',
...         'prop': 'revisions',
...         'rvprop': 'content',
...     }
... ).json()
>>> page = next(iter(response['query']['pages'].values()))
>>> wikicode = page['revisions'][0]['*']
>>> parsed_wikicode = mwparserfromhell.parse(wikicode)
>>> print(parsed_wikicode.strip_code())
{{dablink|For Ke$ha's song, see Blah Blah Blah (song). For other uses, see Blah (disambiguation)}}

"Bla Bla Bla" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, L'Amour Toujours. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with L'Amour Toujours (I'll Fly With You) in its US radio version.

Background and writing
He described this song as "a piece I wrote thinking of all the people who talk and talk without saying anything". The prominent but nonsensical vocal samples are taken from UK band Stretch's song "Why Did You Do It"''.

Music video
The song also featured a popular music video in the style of La Linea. The music video shows a man with a floating head and no arms walking toward what appears to be a shark that multiplies itself and can change direction. This style was also used in "The Riddle", another song by Gigi D'Agostino, originally from British singer Nik Kershaw.

Chart performance
Chart (1999-00)PeakpositionIreland (IRMA)Search for Irish peaks23

References

External links


Category:1999 singles
Category:Gigi D'Agostino songs
Category:1999 songs
Category:ZYX Music singles
Category:Songs written by Gigi D'Agostino
16
Mark Amery

テキスト形式のwikiデータを取得できます。多くのタイトルの情報にアクセスする必要がある場合は、1回の呼び出しですべてのタイトルのwikiデータを取得できます。パイプ文字(|)を使用して、各タイトルを区切ります。

http://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=Yahoo|Google&redirects=

ここで、このAPI呼び出しはGoogleとYahooの両方のデータを返します。

explaintext =>限定されたHTMLではなくプレーンテキストとして抽出を返します。

exlimit = max(現在はその20);それ以外の場合は、1つの結果のみが返されます。

exintro =>最初のセクションの前のコンテンツのみを返します。完全なデータが必要な場合は、これを削除してください。

redirects=リダイレクトの問題を解決します。

9
Anuraj

APIを使用して最初のセクションのみを取得できます。

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvsection=0&titles=Bla%20Bla%20Bla&rvprop=content

これはあなたに生のウィキテキストを与えるでしょう、あなたはテンプレートとマークアップを扱わなければならないでしょう。

または、解析に関する限り、独自の長所と短所を持つHTMLにレンダリングされたページ全体をフェッチできます。

http://en.wikipedia.org/w/api.php?action=parse&prop=text&page=Bla_Bla_Bla

1回の呼び出しで最初のセクションの解析されたHTMLを取得する簡単な方法はわかりませんが、2番目のURLのtext=の代わりにpage=を使用して最初のURLから受け取ったウィキテキストを返すことにより、2つの呼び出しでそれを行うことができます。

[〜#〜]更新[〜#〜]

申し訳ありませんが、質問の「プレーンテキスト」の部分は無視しました。記事の一部をHTMLとして取得します。ウィキテキストを削除するよりもHTMLを削除する方がずっと簡単です!

7
hippietrail

DBPediaはこの問題の完璧な解決策です。ここ: http://dbpedia.org/page/Metallica 、RDFを使用して完全に整理されたデータを見てください。 RDFのクエリ言語であるSPARQLを使用して、ここ http://dbpedia.org/sparql で何でもクエリできます。説明テキストを取得するために常にpageIDを見つける方法はありますが、ほとんどの場合これで十分です。

有用なコードを書くためのRDFおよびSPARQLの学習曲線がありますが、これは完璧なソリューションです。

たとえば、 Metallica に対して実行されたクエリは、いくつかの異なる言語の要約を含むHTMLテーブルを返します。

<table class="sparql" border="1">
  <tr>
    <th>abstract</th>
  </tr>
  <tr>
    <td><pre>"Metallica is an American heavy metal band formed..."@en</pre></td>
  </tr>
  <tr>
    <td><pre>"Metallica es una banda de thrash metal estadounidense..."@es</pre></td>
... 

SPARQLクエリ:

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbres: <http://dbpedia.org/resource/>

SELECT ?abstract WHERE {
 dbres:Metallica dbpedia-owl:abstract ?abstract.
}

要約に関連するクエリの場合、「Metallica」を任意のリソース名(wikipedia.org/resourcenameのようなリソース名)に変更します。

4

私は、MediaWiki APIを提供するextracts propを使用することをお勧めします。いくつかのタグ(b、i、h#、span、ul、li)のみを返し、テーブル、情報ボックス、参照などを削除します。

http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Bla%20Bla%20Bla&format=xml は、非常にシンプルなものを提供します。

<api><query><pages><page pageid="4456737" ns="0" title="Bla Bla Bla"><extract xml:space="preserve">
<p>"<b>Bla Bla Bla</b>" is the title of a song written and recorded by Italian DJ Gigi D'Agostino. It was released in May 1999 as the third single from the album, <i>L'Amour Toujours</i>. It reached number 3 in Austria and number 15 in France. This song can also be heard in an added remixed mashup with <i>L'Amour Toujours (I'll Fly With You)</i> in its US radio version.</p> <p></p> <h2><span id="Background_and_writing">Background and writing</span></h2> <p>He described this song as "a piece I wrote thinking of all the people who talk and talk without saying anything". The prominent but nonsensical vocal samples are taken from UK band Stretch's song <i>"Why Did You Do It"</i>.</p> <h2><span id="Music_video">Music video</span></h2> <p>The song also featured a popular music video in the style of La Linea. The music video shows a man with a floating head and no arms walking toward what appears to be a shark that multiplies itself and can change direction. This style was also used in "The Riddle", another song by Gigi D'Agostino, originally from British singer Nik Kershaw.</p> <h2><span id="Chart_performance">Chart performance</span></h2> <h2><span id="References">References</span></h2> <h2><span id="External_links">External links</span></h2> <ul><li>Full lyrics of this song at MetroLyrics</li> </ul>
</extract></page></pages></query></api>

次に、正規表現で実行できます。JavaScriptでは次のようになります(たぶん、いくつかの小さな変更を行う必要があります:

/^.*<\s*extract[^>]*\s*>\s*((?:[^<]*|<\s*\/?\s*[^>hH][^>]*\s*>)*).*<\s*(?:h|H).*$/.exec(data)

これはあなたに与えます(パラグラフ、太字、斜体のみ):

かくかくしかじか"は、イタリアのDJジジダゴスティーノによって作成および録音された曲のタイトルです。これは、アルバムの3番目のシングルとして1999年5月にリリースされました。 ラムールトゥジュール。オーストリアで3位、フランスで15位になりました。この曲は、追加のリミックスマッシュアップで聞くこともできます。 L'Amour Toujours(I'll Fly With You) その米国のラジオ版で。

1
ESL

最初にチェック ここ

MediaWikiのテキストマークアップには、多くの無効な構文があります。 (ユーザーによって作成された誤解...)この地獄のテキストを解析できるのはMediaWikiだけです。しかし、それでも上記のリンクで試すいくつかの選択肢があります。完璧ではないが、何もないよりはましだ!

0
GyuHyeon Choi

「...ウィキペディアの説明セクションのみを取得するスクリプト...」

あなたのアプリケーションでは、あなたはダンプで何を見るべきか、例えば: http://dumps.wikimedia.org/enwiki/20120702/

必要な特定のファイルは「抽象的な」XMLファイルです。たとえば、次の小さなファイル(22.7MB)です。

http://dumps.wikimedia.org/enwiki/20120702/enwiki-20120702-abstract19.xml

XMLには、各記事の最初の部分を含む「abstract」というタグがあります。

それ以外の場合、wikipedia2textは、たとえば、w3mを使用して、テキストに展開およびフォーマットされたテンプレートを含むページをダウンロードします。それから、正規表現を使用して要約を選択できる場合があります。

0

あなたはWikiExtractorを試すことができます: http://medialab.di.unipi.it/wiki/Wikipedia_Extractor

Python 2.7および3.3+用です。

0
Harriv