2010-11-14 9 views
6

Ich möchte Bedeutung des ausgewählten Wortes mit Wikionary API erhalten. Inhalt Abrufen von Daten sollten die gleichen sein wie in „Wort des Tages“ präsentiert wird, nur die grundlegende Bedeutung ohne etympology, Synonyme etc .. zum BeispielWikionary API - Bedeutung der Wörter

„postiche n Jeden Gegenstand falscher Haare auf dem Kopf getragen oder Gesicht, wie ein falscher Bart oder eine Perücke. "

Ich habe versucht, Dokumentation zu verwenden, aber ich kann ähnliches Beispiel finden, kann jemand mit diesem Problem helfen?

+0

Ich glaube, dass der Inhalt des Felds "Wort des Tages" auf der Homepage manuell bearbeitet wird, um es kurz zu halten. Wenn Sie den Wortartikel öffnen, sehen Sie mehr Bedeutungen für dieses Wort. –

+1

siehe auch http://stackoverflow.com/questions/3364279/has-anyone-parsed-wiktionary – pfctdayelise

Antwort

13

Obwohl MediaWiki eine API (api.php) hat, könnte es am einfachsten für Ihre Zwecke nur den action=raw Parameter index.php zu verwenden, wenn Sie nur den Quellcode einer Revision abrufen möchten (nicht in XML-Datei, JSON, usw. , im Gegensatz zur API).

Zum Beispiel ist dies das rohe Wort des Tages Seite 14. November:

http://en.wiktionary.org/w/index.php?title=Wiktionary:Word_of_the_day/November_14&action=raw

Was schade ist, dass das Format der Wiki-Seiten auf Präsentation konzentriert sich (für den menschlichen Leser) und nicht auf Semantik (für die Maschine), so dass Sie nicht überrascht sein sollten, dass es keinen "get word definition" API-Befehl gibt. Stattdessen muss Ihr Skript die zahlreichen Textformatierungsvorlagen, die von Wiktionary-Editoren erstellt und verwendet wurden, sowie komplexe Formatierungssyntax für Präsentationen, einschließlich Überschriften, ungeordneter Listen und anderer, sinnvoll finden. Zum Beispiel, hier ist der Quellcode für die Seite „Überlauf“:

http://en.wiktionary.org/w/index.php?title=overflow&action=raw

Es ist eine Option in den API „XML-Parsing-Baum erzeugen“, aber es ist nicht viel von den Präsentations brechen Formatierung in XML. Sehen Sie selbst:

http://en.wiktionary.org/w/api.php?action=query&titles=overflow&prop=revisions&rvprop=content&rvgeneratexml=&format=jsonfm

Falls Sie sich fragen, ob es einen Parser für MediaWiki-Format anderen Seiten als MediaWiki existiert, nein, gibt es nicht. Zumindest nichts in JavaScript geschrieben, das derzeit gepflegt wird (siehe list of alternative parsers, und überprüfen Sie die Websites der beiden aufgeführten). Und selbst dann wird die Unterstützung der meisten/aller gängigen Vorlagen eine große Herausforderung sein. Viel Glück.

1

OK, ich gebe mich geschlagen.

Es gibt some files in Pywikipediabot auf Wiktionary Zusammenhang und ich Blick auf den Code, es sieht wie Sie sollte der Lage sein, es Sinn/Definitionsfelder für Sie zu analysieren, zu erhalten.

Allerdings hat mich die letzte halbe Stunde anders überzeugt. Der Code ist nicht gut geschrieben und ich frage mich, ob es jemals funktioniert hat.

So verzögere ich idealmachine's answer, aber ich dachte, ich würde dies zu posten, um jemand anderen aus dem gleichen Fehler zu machen. :)

0

MediaWiki hat eine API, aber es ist Low-Level und hat keine Unterstützung für etwas spezifisch für jedes Wiki. Zum Beispiel hat es keine Enzyklopädie-Unterstützung für Wikipedia und keine Wörterbuch-Unterstützung für Wiktionary. Sie können das rohe Wikitext-Markup einer Seite oder eines Abschnitts mithilfe der API abrufen, müssen es jedoch selbst analysieren.

Der erste Vorbehalt ist, dass jedes Wiktionary sein eigenes Format entwickelt hat, aber ich nehme an, dass Sie nur an dem englischen Wiktionary interessiert sind. Ein billiger Trick, den viele Tools verwenden, ist die erste Zeile, die mit dem Zeichen # beginnt. Dies wird normalerweise der Text der Definition des ersten Sinns des ersten Homonyms sein.

Ein weiterer Nachteil ist, dass jedes Wiktionary viele Wiki-Vorlagen verwendet. Wenn Sie also den rohen Text betrachten, werden Sie viele davon sehen. Die einzige Möglichkeit, diese Vorlagen zuverlässig zu erweitern, besteht darin, die API mit action=parse aufzurufen.