Comment l'API de Wiktionary peut-elle être utilisée pour déterminer si un mot existe ou non?
Comment l'API de Wiktionary peut-elle être utilisée pour déterminer si un mot existe ou non?
Réponses:
L' API Wiktionary peut être utilisée pour demander si un mot existe ou non.
Exemples de pages existantes et non existantes:
http://en.wiktionary.org/w/api.php?action=query&titles=test
http://en.wiktionary.org/w/api.php?action=query&titles=testx
Le premier lien fournit des exemples sur d'autres types de formats qui pourraient être plus faciles à analyser.
Pour récupérer les données du mot dans un petit format XHTML (si plus que l'existence est requise), demandez la version imprimable de la page:
http://en.wiktionary.org/w/index.php?title=test&printable=yes
http://en.wiktionary.org/w/index.php?title=testx&printable=yes
Ceux-ci peuvent ensuite être analysés avec n'importe quel analyseur XML standard.
https://en.wiktionary.org/w/?curid=[page_id]&printable=yes
:, pour rediriger vers la page XHTML en utilisant pageid
.
Il y a quelques mises en garde en vérifiant simplement que Wiktionary a une page avec le nom que vous recherchez:
Mise en garde # 1 : Tous les Wiktionnaires, y compris le Wiktionnaire anglais, ont en fait pour objectif d'inclure chaque mot dans chaque langue, donc si vous utilisez simplement l'appel API ci-dessus, vous saurez que le mot que vous demandez est un mot dans au moins une langue, mais pas forcément anglais: http://fr.wiktionary.org/w/api.php?action=query&titles=dicare
Mise en garde n ° 2 : il existe peut-être une redirection d'un mot à un autre. Cela peut provenir d'une orthographe alternative, mais peut-être d'une erreur quelconque. L'appel API ci-dessus ne fera pas la différence entre une redirection et un article: http://en.wiktionary.org/w/api.php?action=query&titles=profilemetry
Avertissement n ° 3 : Certains Wiktionnaires, y compris le Wiktionnaire anglais, incluent des "fautes d'orthographe courantes": http://fr.wiktionary.org/w/api.php?action=query&titles=fourty
Mise en garde # 4 : Certains Wiktionnaires autorisent les entrées de stub qui ont peu ou pas d'informations sur le terme. Ceci était courant sur plusieurs Wiktionnaires mais pas sur le Wiktionnaire anglais. Mais il semble s'être maintenant étendu au Wiktionnaire anglais: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%83 (lien permanent pour le moment où le stub est rempli afin que vous puissiez toujours voir à quoi ressemble un talon: https://fr.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=239757161 )
Si ceux-ci ne sont pas inclus dans ce que vous voulez, vous devrez charger et analyser le wikitext lui-même, ce qui n'est pas une tâche triviale.
&prop=info
à la requête et vérifiez la réponse pour l' redirect
attribut.
Vous pouvez télécharger un vidage des données Wikitionary . Il y a plus d'informations dans la FAQ . Pour vos besoins, le vidage des définitions est probablement un meilleur choix que le vidage xml.
Pour faire simple, extrayez les mots du vidage comme ça:
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
Si vous utilisez Python, vous pouvez utiliser WiktionaryParser de Suyash Behera.
Vous pouvez l'installer en
sudo pip install wiktionaryparser
Exemple d'utilisation:
>>> from wiktionaryparser import WiktionaryParser
>>> parser = WiktionaryParser()
>>> word = parser.fetch('test')
>>> another_word = parser.fetch('test', 'french')
>>> parser.set_default_language('french')
Vous voudrez peut-être essayer JWKTL. Je viens de le découvrir;)
http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API
Comme mentionné précédemment, le problème avec cette approche est que Wiktionnaire fournit des informations sur tous les mots de toutes les langues . Donc, l'approche pour vérifier si une page existe à l'aide de l'API Wikipedia ne fonctionnera pas car il y a beaucoup de pages pour des mots non anglais. Pour surmonter cela, vous devez analyser chaque page pour déterminer s'il existe une section décrivant le mot anglais . L'analyse du wikitext n'est pas une tâche triviale, même si dans votre cas ce n'est pas si grave. Pour couvrir presque tous les cas, vous devez simplement vérifier si le wikitext contient un English
titre. Selon le langage de programmation que vous utilisez, vous pouvez trouver des outils pour construire AST à partir de wikitext. Cela couvrira la plupart des cas, mais pas tous, car Wiktionary inclut des fautes d'orthographe courantes.
Comme alternative, vous pouvez essayer d'utiliser Lingua Robot ou quelque chose de similaire. Lingua Robot analyse le contenu du Wiktionnaire et le fournit en tant qu'API REST. Une réponse non vide signifie que le mot existe. Veuillez noter que, contrairement à Wiktionary, l'API elle-même n'inclut aucune faute d'orthographe (du moins au moment de la rédaction de cette réponse). Veuillez également noter que le Wiktionnaire contient non seulement les mots, mais aussi des expressions à plusieurs mots.
Voici un début d'analyse des données d'étymologie et de prononciation:
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}}
}
Mise à jour : Voici un résumé plus détaillé.
langs
?
langs
c'est quelques milliers de lignes, trop gros pour SO.
Vous pouvez utiliser l'API Revisions:
ou l'API Parse:
https://en.wiktionary.org/w/api.php?action=parse&page=test&prop=wikitext&formatversion=2
D'autres exemples sont fournis dans la documentation .