it-swarm.com.de

Wie man einfachen Text aus Wikipedia herausholt

Ich habe ungefähr 2 Monate lang nach einem Skript gesucht, das nur den Wikipedia-Beschreibungsabschnitt enthält. (Es ist für einen Bot, den ich baue, nicht für IRC.) Das ist, wenn ich sage

/wiki bla bla bla

es wird auf die Wikipedia-Seite für bla bla bla gehen, Folgendes abrufen und an den Chatroom zurückgeben:

"Bla Bla Bla" ist der Name eines Songs von Gigi D'Agostino. Er beschrieb dieses Lied als "ein Stück, das ich geschrieben habe und an all die Leute dachte, die reden und reden, ohne etwas zu sagen". Die prominenten, aber unsinnigen Vokal-Samples stammen aus dem Song "Why Did You Do It" der britischen Band Stretch.

Hier ist der nächste, den ich gefunden habe, aber er erhält nur die URL:

import json
import urllib.request, urllib.parse

def google(searchfor):
  query = urllib.parse.urlencode({'q': searchfor})
  url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query

  search_response = urllib.request.urlopen(url)
  search_results = search_response.read().decode("utf8")
  results = json.loads(search_results)
  data = results['responseData']
  hits = data['results']

  if len(hits) > 0:
    return hits[0]['url']
  else:
    return "No results found."

(Python 3.1)

17
Wifi

Verwenden Sie die MediaWiki-API , die auf Wikipedia ausgeführt wird. Sie müssen die Daten selbst analysieren.

Zum Beispiel:

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

meint

ruft den Inhalt (rvprop = content) der letzten Version der Hauptseite (title = Main% 20Page) im JSON-Format (format = json) ab (action = query).

Sie möchten wahrscheinlich nach der Abfrage suchen und das erste Ergebnis verwenden, um Rechtschreibfehler und dergleichen zu behandeln.

18
Katriel

Hier sind ein paar verschiedene mögliche Ansätze; benutze was auch immer für dich funktioniert. Alle folgenden Codebeispiele verwenden requests für HTTP-Anforderungen an die API. Sie können requests mit pip install requests installieren, wenn Sie Pip haben. Sie alle verwenden auch die Mediawiki-API , und zwei verwenden den query endpoint. Folgen Sie diesen Links, wenn Sie Dokumentation wünschen.

1. Rufen Sie mit der Requisite extracts eine Klartextdarstellung der gesamten Seite oder des Seitenextrakts direkt aus der API ab

Beachten Sie, dass dieser Ansatz nur auf MediaWiki-Sites mit der Erweiterung TextExtracts funktioniert. Dies schließt vor allem Wikipedia ein, aber nicht einige kleinere Mediawiki-Sites wie zum Beispiel http://www.wikia.com/

Sie möchten eine URL wie treffen

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

Aufgeschlüsselt haben wir die folgenden Parameter (dokumentiert unter https://www.mediawiki.org/wiki/Extension:TextExtracts#query+extracts ):

  • action=query, format=json und title=Bla_Bla_Bla sind Standard-MediaWiki-API-Parameter
  • Mit prop=extracts verwenden wir die TextExtracts-Erweiterung
  • exintro begrenzt die Antwort auf den Inhalt vor der Überschrift des ersten Abschnitts
  • Durch explaintext wird der Extrakt in der Antwort als Nur-Text-Text statt als HTML-Text ausgegeben

Analysieren Sie dann die JSON-Antwort und extrahieren Sie den Extrakt:

>>> 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. Rufen Sie den vollständigen HTML-Code der Seite mit dem Endpunkt parse ab, analysieren Sie ihn und extrahieren Sie den ersten Absatz

MediaWiki hat einen parse Endpunkt , den Sie mit einer URL wie https://en.wikipedia.org/w/api.php?action=parse&page=Bla_Bla_Bla treffen können, um den HTML-Code einer Seite abzurufen. Sie können es dann mit einem HTML-Parser wie lxml analysieren (installieren Sie ihn zuerst mit pip install lxml), um den ersten Absatz zu extrahieren.

Zum Beispiel:

>>> 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. Analysieren Sie Wikitext selbst

Mit der API query können Sie den Wikitext der Seite abrufen, mit mwparserfromhell analysieren (zuerst mit pip install mwparserfromhell installieren) und dann mit strip_code auf lesbaren Text reduzieren. strip_code funktioniert zum Zeitpunkt des Schreibens nicht perfekt (wie im folgenden Beispiel deutlich gezeigt), wird sich aber hoffentlich verbessern.

>>> 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
11
Mark Amery

Sie können nur den ersten Abschnitt mit der API abrufen:

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

Dies gibt Ihnen rohen Wikitext, Sie müssen sich mit Vorlagen und Markups befassen.

Oder Sie können die gesamte in HTML gerenderte Seite abrufen, die ihre eigenen Vor- und Nachteile beim Parsen hat:

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

Ich sehe keinen einfachen Weg, um in einem einzigen Aufruf geparstes HTML des ersten Abschnitts zu erhalten, aber Sie können es mit zwei Aufrufen tun, indem Sie den Wikitext, den Sie von der ersten URL erhalten, mit text= anstelle von page= in der zweiten URL zurückgeben .

UPDATE

Entschuldigung, ich habe den "Nur-Text" -Teil Ihrer Frage vernachlässigt. Holen Sie sich den gewünschten Teil des Artikels als HTML. Es ist viel einfacher, HTML als Wikitext zu entfernen!

7
hippietrail

Sie können Wiki-Daten in Textformaten erhalten. Wenn Sie auf viele Titelinformationen zugreifen müssen, können Sie alle Wiki-Daten des Titels in einem einzigen Aufruf abrufen. Verwenden Sie das Pipe-Zeichen (|), um die einzelnen Titel zu trennen.

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

Hier gibt dieser API-Aufruf sowohl Googles- als auch Yahoos-Daten zurück.

explaintext => Liefert Extrakte als Klartext anstatt als eingeschränktes HTML.

exlimit = max (jetzt 20); Andernfalls wird nur ein Ergebnis zurückgegeben.

exintro => Nur Inhalte vor dem ersten Abschnitt zurückgeben. Wenn Sie vollständige Daten möchten, entfernen Sie diese einfach.

redirects= Lösen Sie Umleitungsprobleme.

7
Anuraj

DBPedia ist die perfekte Lösung für dieses Problem. Hier: http://dbpedia.org/page/Metallica , schauen Sie sich die perfekt organisierten Daten mit RDF an. Unter http://dbpedia.org/sparql kann man mit SPARQL, der Abfragesprache für das RDF, nach allem fragen. Es gibt immer eine Möglichkeit, die pageID zu finden, um beschreibenden Text zu erhalten, aber dies sollte größtenteils reichen.

Es wird eine Lernkurve für RDF und SPARQL geben, um nützlichen Code zu schreiben, aber dies ist die perfekte Lösung.

Beispielsweise gibt ein Abfragelauf für Metallica eine HTML-Tabelle mit der Zusammenfassung in mehreren verschiedenen Sprachen zurück:

<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-ABFRAGE:

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.
}

Ändern Sie "Metallica" in einen beliebigen Ressourcennamen (Ressourcenname wie in wikipedia.org/resourcename), wenn Sie Fragen zu Abstracts haben.

3

Ich denke, die bessere Option ist die Verwendung der Requisiteextracts, die Ihnen die MediaWiki-API zur Verfügung stellt. Es werden nur einige Tags (b, i, h #, span, ul, li) zurückgegeben und Tabellen, Infoboxen, Referenzen usw. entfernt.

http://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Bla%20Bla%20Bla&format=xml gibt Ihnen etwas sehr Einfaches:

<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>

Sie können es dann über einen regulären Ausdruck ausführen. In JavaScript würde dies in etwa so aussehen (möglicherweise müssen Sie einige geringfügige Änderungen vornehmen:

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

Was gibt Ihnen (nur Paragraphen, fett und kursiv):

"Bla bla bla"ist der Titel eines Songs, der vom italienischen DJ Gigi D'Agostino geschrieben und aufgenommen wurde. Er erschien im Mai 1999 als dritte Single des Albums. L'Amour Toujours. In Österreich erreichte es Platz 3 und in Frankreich Platz 15. Dieses Lied kann auch in einem hinzugefügten Remix mit Mashup angehört werden L'Amour Toujours (Ich fliege mit dir) in seiner US-Radio-Version.

1
ESL

Überprüfen Sie zuerst hier .

In MediaWikis Text-Markup gibt es viele ungültige Syntaxen. (Von Benutzern begangene Fehler ...) Nur MediaWiki kann diesen höllischen Text analysieren. Es gibt jedoch noch einige Alternativen, die Sie im obigen Link ausprobieren können. Nicht perfekt, aber besser als nichts!

0
GyuHyeon Choi

"... ein Skript, das nur den Wikipedia-Beschreibungsabschnitt abruft ..."

Für deine Bewerbung könntest du was auf den Dumps suchen, z. B .: http://dumps.wikimedia.org/enwiki/20120702/

Die speziellen Dateien, die Sie benötigen, sind "abstrakte" XML-Dateien, z. B. diese kleine (22,7 MB):

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

Das XML verfügt über ein Tag namens "abstract", das den ersten Teil jedes Artikels enthält.

Andernfalls verwendet wikipedia2text beispielsweise w3m, um die Seite mit Vorlagen herunterzuladen, die zu Text erweitert und formatiert sind. Daraus können Sie möglicherweise die Zusammenfassung über einen regulären Ausdruck auswählen.

0

Sie können WikiExtractor ausprobieren: http://medialab.di.unipi.it/wiki/Wikipedia_Extractor

Es ist für Python 2.7 und 3.3+.

0
Harriv