33

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

/wiki bla bla bla

のウィキペディア ページにbla bla bla移動し、以下を取得して、チャットルームに返します。

「Bla Bla Bla」は、ジジ・ダゴスティーノが作った曲の名前です。彼はこの曲を「何も言わずに話したり話したりするすべての人々を考えて書いた作品」と表現しました。目立つが無意味なボーカル サンプルは、UK バンド Stretch の曲「Why Did You Do It」から取られています。

これどうやってするの?

4

13 に答える 13

36

考えられるいくつかのアプローチを次に示します。あなたに合ったものを使用してください。以下のコード例はすべて、requestsAPI への HTTP リクエストに使用されます。requestsPipがpip install requestsあればインストールできます。また、それらはすべてMediawiki APIを使用し、そのうちの 2 つはクエリエンドポイントを使用します。ドキュメントが必要な場合は、これらのリンクに従ってください。

extracts1. 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=json、およびtitle=Bla_Bla_Blaは、すべて標準の MediaWiki API パラメーターです。
  • prop=extractsTextExtracts 拡張機能を使用させます
  • 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 には、https://en.wikipedia.org/w/api.php?action=parse&page=Bla_Bla_Blaのような URL でヒットして、ページの HTML を取得できるparseエンドポイントがあります。次に、 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. 自分でウィキテキストを解析する

queryAPI を使用してページのウィキテキストを取得し、 を使用して解析し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
于 2016-07-01T20:47:07.263 に答える
23

ウィキペディアで実行される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) します。

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

于 2010-12-15T16:12:19.833 に答える
12

テキスト形式のウィキ データを取得できます。多くのタイトルの情報にアクセスする必要がある場合は、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= リダイレクトの問題を解決します。

于 2015-06-10T18:36:42.717 に答える
7

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番目のURLtext=の代わりに最初のURLから受け取ったウィキテキストを返すことで2回の呼び出しでそれを行うことができpage=ます。

アップデート

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

于 2010-12-15T16:34:18.110 に答える
4

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 にあるリソース名) に変更します。

于 2014-10-28T14:06:56.763 に答える
1

extractsより良いオプションは、 MediaWiki API を提供する 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)

これにより、次のことが得られます(段落のみ、太字と斜体):

Bla Bla Bla」は、イタリア人DJ Gigi D'Agostinoが作詞・作曲した曲のタイトルです。1999 年 5 月にアルバムからの 3 枚目のシングル、L'Amour Toujoursとしてリリースされました。オーストリアでは 3 位、フランスでは 15 位に達しました。この曲は、米国のラジオ バージョンで、L'Amour Toujours (I'll Fly With You)との追加のリミックス マッシュアップでも聞くことができます。

于 2015-04-22T13:58:56.080 に答える
0

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

アプリケーションの場合、ダンプを確認する必要があります。例:http ://dumps.wikimedia.org/enwiki/20120702/

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

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

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

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

于 2012-07-09T12:37:00.333 に答える
0

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

Python 2.7 および 3.3+ 用です。

于 2012-12-20T20:56:17.240 に答える
-1

JSONpediaのようなラッパー API を介してウィキペディアのページを使用する機会もあります。これは、ライブ (ウィキ ページの現在の JSON 表現を要求する) とストレージ ベース (以前に Elasticsearch と MongoDB に取り込まれた複数のページをクエリする) の両方で機能します。出力 JSON には、レンダリングされたプレーンなページ テキストも含まれます。

于 2015-03-23T17:19:55.287 に答える
-1

Python 用の BeautifulSoup HTML 解析ライブラリを試すことができますが、単純なパーサーを作成する必要があります。

于 2010-12-15T16:17:09.833 に答える