web-dev-qa-db-fra.com

Comment récupérer le contenu d'un Wiktionnaire Word?

Comment l'API de Wiktionnaire peut-elle être utilisée pour déterminer si un mot existe ou non?

83
Armentage

Wiktionary API peut être utilisé pour rechercher s'il existe ou non un mot.

Exemples de pages existantes et non existantes:

http://en.wiktionary.org/w/api.php?action=query&titles=testhttp://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 de Word 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=yeshttp://en.wiktionary.org/w/index.php?title=testx&printable=yes

Ceux-ci peuvent ensuite être analysés avec n'importe quel analyseur XML standard.

61
Michael Mrozek

Il y a quelques mises en garde en vérifiant simplement que le Wiktionnaire a une page avec le nom que vous recherchez:

Avertissement # 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 sachez que le mot que vous demandez est un mot dans au moins une langue, mais pas nécessairement en anglais: http://en.wiktionary.org/w/api.php?action=query&titles=dicare

Mise en garde n ° 2 : Il existe peut-être une redirection d'un mot vers un autre mot. Cela peut provenir d'une orthographe alternative, mais cela peut provenir d'une erreur quelconque. L'appel d'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

Mise en garde # 3 : Certains Wiktionnaires, y compris le Wiktionnaire anglais, incluent des "fautes d'orthographe courantes": http://en.wiktionary.org/w/ api.php? action = requête et titres = quarante

Mise en garde # 4 : Certains Wiktionnaires autorisent les entrées de talon qui ont peu ou pas d'informations sur le terme. Cela était courant sur plusieurs Wiktionnaires mais pas sur le Wiktionnaire anglais. Mais il semble maintenant s'être également propagé au Wiktionnaire anglais: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%8 (permalien pour quand le stub est rempli pour que vous puissiez toujours voir à quoi ressemble un talon: https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161 )

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.

24
hippietrail

Vous pouvez télécharger un vidage de données Wikitionary . Il y a plus d'informations dans la FAQ . Pour vos besoins, le définitions de vidage est probablement un meilleur choix que le vidage xml.

18
kybernetikos

Pour que ce soit vraiment simple, extrayez les mots du vidage comme ça:

bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
8
benroth

Si vous utilisez Python, vous pouvez utiliser WiktionaryParser par 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')
3
osolmaz
1
arek

Voici un début pour analyser les 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 : Ici est un Gist avec plus de détails.

0
Lance Pollard