Come può essere utilizzata l'API di Wikizionario per determinare se una parola esiste o meno?
Come può essere utilizzata l'API di Wikizionario per determinare se una parola esiste o meno?
Risposte:
L' API Wiktionary può essere utilizzata per interrogare se una parola esiste o meno.
Esempi di pagine esistenti e non esistenti:
http://en.wiktionary.org/w/api.php?action=query&titles=test
http://en.wiktionary.org/w/api.php?action=query&titles=testx
Il primo collegamento fornisce esempi su altri tipi di formati che potrebbero essere più facili da analizzare.
Per recuperare i dati della parola in un piccolo formato XHTML (dovrebbe essere necessario più dell'esistenza), richiedere la versione stampabile della pagina:
http://en.wiktionary.org/w/index.php?title=test&printable=yes
http://en.wiktionary.org/w/index.php?title=testx&printable=yes
Questi possono quindi essere analizzati con qualsiasi parser XML standard.
https://en.wiktionary.org/w/?curid=[page_id]&printable=yes
:, per reindirizzare alla pagina XHTML usando pageid
.
Ci sono alcuni avvertimenti nel controllare che Wiktionary abbia una pagina con il nome che stai cercando:
Avvertenza n. 1 : tutti i Wikizionario, compreso il Wikizionario inglese, hanno effettivamente l'obiettivo di includere ogni parola in ogni lingua, quindi se usi semplicemente la chiamata API sopra saprai che la parola di cui stai chiedendo è una parola in almeno una lingua, ma non necessariamente inglese: http://en.wiktionary.org/w/api.php?action=query&titles=dicare
Avvertenza n. 2 : forse esiste un reindirizzamento da una parola all'altra. Potrebbe provenire da un'ortografia alternativa, ma potrebbe essere un errore di qualche tipo. La chiamata API sopra non farà distinzione tra un reindirizzamento e un articolo: http://en.wiktionary.org/w/api.php?action=query&titles=profilemetry
Avvertenza n. 3 : alcuni Wikizionario, incluso il Wikizionario inglese, includono "errori di ortografia comuni": http://en.wiktionary.org/w/api.php?action=query&titles=fourty
Avvertenza n. 4 : alcuni Wikizionario consentono voci stub che hanno poche o nessuna informazione sul termine. Questo era comune in diversi Wikizionario ma non nel Wikizionario inglese. Ma ora sembra essersi diffuso anche al Wikizionario inglese: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%83 (permalink per quando lo stub è pieno in modo da poter ancora vedere che aspetto ha uno stub: https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161 )
Se questi non sono inclusi in ciò che desideri, dovrai caricare e analizzare il wikitext stesso, il che non è un compito banale.
&prop=info
alla query e controlla la risposta per l' redirect
attributo.
Puoi scaricare un dump di dati Wikitionary . Ci sono ulteriori informazioni nelle FAQ . Per i tuoi scopi, il dump delle definizioni è probabilmente una scelta migliore rispetto al dump xml.
Per mantenerlo davvero semplice, estrai le parole dalla discarica in questo modo:
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
LANGwiktionary-DATE-pages-articles.xml.bz2
. Vai al collegamento , quindi fai clic su LANGwiktionary
(LANG es. "En", "de" ...).
Se stai usando Python, puoi usare WiktionaryParser di Suyash Behera.
Puoi installarlo da
sudo pip install wiktionaryparser
Utilizzo di esempio:
>>> from wiktionaryparser import WiktionaryParser
>>> parser = WiktionaryParser()
>>> word = parser.fetch('test')
>>> another_word = parser.fetch('test', 'french')
>>> parser.set_default_language('french')
Potresti provare JWKTL. L'ho appena scoperto;)
http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API
Come accennato in precedenza, il problema con questo approccio è che Wikizionario fornisce le informazioni su tutte le parole di tutte le lingue . Quindi l'approccio per verificare se esiste una pagina utilizzando l'API di Wikipedia non funzionerà perché ci sono molte pagine per parole non inglesi. Per ovviare a questo problema, è necessario analizzare ogni pagina per capire se c'è una sezione che descrive la parola inglese . L'analisi del wikitext non è un compito banale, anche se nel tuo caso non è poi così male. Per coprire quasi tutti i casi devi solo controllare se il wikitext contiene English
un'intestazione. A seconda del linguaggio di programmazione che utilizzi, puoi trovare alcuni strumenti per creare AST da wikitext. Questo coprirà la maggior parte dei casi, ma non tutti perché Wiktionary include alcuni errori ortografici comuni.
In alternativa, potresti provare a utilizzare Lingua Robot o qualcosa di simile. Lingua Robot analizza il contenuto di Wikizionario e lo fornisce come API REST. La risposta non vuota significa che la parola esiste. Si noti che, a differenza di Wikizionario, l'API stessa non include errori di ortografia (almeno al momento della stesura di questa risposta). Si noti inoltre che il Wikizionario contiene non solo le parole, ma anche espressioni composte da più parole.
Ecco un inizio per analizzare i dati di etimologia e pronuncia:
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}}
}
Aggiornamento : ecco un succo con più dettagli.
langs
?
langs
è di poche migliaia di righe, troppo grande per SO.
Puoi utilizzare l'API delle revisioni:
o l'API Parse:
https://en.wiktionary.org/w/api.php?action=parse&page=test&prop=wikitext&formatversion=2
Altri esempi sono forniti nei documenti .