Wie kann die API von Wiktionary verwendet werden, um festzustellen, ob ein Wort vorhanden ist oder nicht?
Wie kann die API von Wiktionary verwendet werden, um festzustellen, ob ein Wort vorhanden ist oder nicht?
Antworten:
Mit der Wiktionary-API kann abgefragt werden, ob ein Wort vorhanden ist oder nicht.
Beispiele für vorhandene und nicht vorhandene Seiten:
http://en.wiktionary.org/w/api.php?action=query&titles=test
http://en.wiktionary.org/w/api.php?action=query&titles=testx
Der erste Link enthält Beispiele für andere Arten von Formaten, die möglicherweise einfacher zu analysieren sind.
Fordern Sie die druckbare Version der Seite an, um die Daten des Wortes in einem kleinen XHTML-Format abzurufen (sollte mehr als vorhanden sein):
http://en.wiktionary.org/w/index.php?title=test&printable=yes
http://en.wiktionary.org/w/index.php?title=testx&printable=yes
Diese können dann mit jedem Standard-XML-Parser analysiert werden.
https://en.wiktionary.org/w/?curid=[page_id]&printable=yes
, um mit auf die XHTML-Seite umzuleiten pageid
.
Es gibt ein paar Einschränkungen, wenn Sie nur überprüfen, ob Wiktionary eine Seite mit dem Namen hat, nach dem Sie suchen:
Vorsichtsmaßnahme Nr. 1 : Alle Wiktionaries, einschließlich des englischen Wiktionary, haben tatsächlich das Ziel, jedes Wort in jede Sprache aufzunehmen. Wenn Sie also einfach den obigen API-Aufruf verwenden, wissen Sie, dass das Wort, nach dem Sie fragen, ein Wort in mindestens einer Sprache ist, aber nicht unbedingt Englisch: http://en.wiktionary.org/w/api.php?action=query&titles=dicare
Vorsichtsmaßnahme Nr. 2 : Möglicherweise besteht eine Umleitung von einem Wort zu einem anderen Wort. Es könnte aus einer alternativen Schreibweise stammen, aber es könnte aus einem Fehler stammen. Der obige API-Aufruf unterscheidet nicht zwischen einer Weiterleitung und einem Artikel: http://en.wiktionary.org/w/api.php?action=query&titles=profilemetry
Vorsichtsmaßnahme Nr. 3 : Einige Wiktionaries, einschließlich des englischen Wiktionary, enthalten "häufige Rechtschreibfehler": http://en.wiktionary.org/w/api.php?action=query&titles=fourty
Vorsichtsmaßnahme Nr. 4 : Einige Wiktionaries erlauben Stub-Einträge, die nur wenige oder gar keine Informationen über den Begriff enthalten. Dies war früher bei mehreren Wiktionaries üblich, nicht jedoch beim englischen Wiktionary. Aber es scheint sich jetzt auch auf das englische Wiktionary ausgeweitet zu haben: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%83 (Permalink, wenn der Stub gefüllt ist, damit Sie immer noch sehen können Wie ein Stub aussieht: https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161 )
Wenn diese nicht in dem enthalten sind, was Sie möchten, müssen Sie den Wikitext selbst laden und analysieren, was keine triviale Aufgabe ist.
&prop=info
der Abfrage hinzu und überprüfen Sie die Antwort auf redirect
Attribute.
Sie können einen Speicherauszug mit Wikitionary-Daten herunterladen . Weitere Informationen finden Sie in den FAQ . Für Ihre Zwecke ist der Definitionsspeicherauszug wahrscheinlich die bessere Wahl als der XML-Speicherauszug.
Um es wirklich einfach zu halten, extrahieren Sie die Wörter wie folgt aus dem Dump:
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
Wenn Sie Python verwenden, können Sie WiktionaryParser von Suyash Behera verwenden.
Sie können es installieren durch
sudo pip install wiktionaryparser
Anwendungsbeispiel:
>>> from wiktionaryparser import WiktionaryParser
>>> parser = WiktionaryParser()
>>> word = parser.fetch('test')
>>> another_word = parser.fetch('test', 'french')
>>> parser.set_default_language('french')
Vielleicht möchten Sie JWKTL ausprobieren. Ich habe es gerade herausgefunden;)
http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API
Wie bereits erwähnt, besteht das Problem bei diesem Ansatz darin, dass Wiktionary die Informationen zu allen Wörtern aller Sprachen bereitstellt . Der Ansatz, mithilfe der Wikipedia-API zu überprüfen, ob eine Seite vorhanden ist, funktioniert daher nicht, da viele Seiten für nicht englische Wörter vorhanden sind. Um dies zu überwinden, müssen Sie jede Seite analysieren, um herauszufinden, ob es einen Abschnitt gibt, der das englische Wort beschreibt . Das Parsen von Wikitext ist keine triviale Aufgabe, obwohl es in Ihrem Fall nicht so schlimm ist. Um fast alle Fälle abzudecken, müssen Sie nur überprüfen, ob der Wikitext eine English
Überschrift enthält . Abhängig von der verwendeten Programmiersprache finden Sie einige Tools zum Erstellen von AST aus Wikitext. Dies wird die meisten Fälle abdecken, aber nicht alle, da Wiktionary einige häufige Rechtschreibfehler enthält.
Alternativ können Sie auch Lingua Robot oder ähnliches verwenden. Lingua Robot analysiert den Wiktionary-Inhalt und stellt ihn als REST-API bereit. Nicht leere Antwort bedeutet, dass das Wort existiert. Bitte beachten Sie, dass die API selbst im Gegensatz zu Wiktionary keine Rechtschreibfehler enthält (zumindest zum Zeitpunkt des Schreibens dieser Antwort). Bitte beachten Sie auch, dass das Wiktionary nicht nur die Wörter, sondern auch Mehrwortausdrücke enthält.
Hier ist ein Anfang zum Parsen von Etymologie- und Aussprachedaten:
function parsePronunciationLine(line) {
let val
let type
line.replace(/\{\{\s*a\s*\|UK\s*\}\}\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en\}\}/, (_, $1) => {
val = $1
type = 'uk'
})
line.replace(/\{\{\s*a\s*\|US\s*\}\}\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en\}\}/, (_, $1) => {
val = $1
type = 'us'
})
line.replace(/\{\{enPR|[^\}]+\}\},?\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en}}/, (_, $1) => {
val = $1
type = 'us'
})
line.replace(/\{\{a|GA\}\},?\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en}}/, (_, $1) => {
val = $1
type = 'ga'
})
line.replace(/\{\{a|GA\}\},?.+\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en}}/, (_, $1) => {
val = $1
type = 'ga'
})
// {{a|GA}} {{IPA|/ˈhæpi/|lang=en}}
// * {{a|RP}} {{IPA|/pliːz/|lang=en}}
// * {{a|GA}} {{enPR|plēz}}, {{IPA|/pliz/|[pʰliz]|lang=en}}
if (!val) return
return { val, type }
}
function parseEtymologyPiece(piece) {
let parts = piece.split('|')
parts.shift() // first one is ignored.
let ls = []
if (langs[parts[0]]) {
ls.push(parts.shift())
}
if (langs[parts[0]]) {
ls.push(parts.shift())
}
let l = ls.pop()
let t = parts.shift()
return [ l, t ]
// {{inh|en|enm|poisoun}}
// {{m|enm|poyson}}
// {{der|en|la|pōtio|pōtio, pōtiōnis|t=drink, a draught, a poisonous draught, a potion}}
// {{m|la|pōtō|t=I drink}}
// {{der|en|enm|happy||fortunate, happy}}
// {{cog|is|heppinn||lucky}}
}
Update : Hier ist ein Kernstück, das ausführlicher ist.
langs
?
langs
ist ein paar tausend Zeilen, zu groß für SO.
Sie können die Revisions-API verwenden:
oder die Parse-API:
https://en.wiktionary.org/w/api.php?action=parse&page=test&prop=wikitext&formatversion=2
Weitere Beispiele finden Sie in den Dokumenten .