web-dev-qa-db-ja.com

ウィクショナリーワードコンテンツを取得する方法?

ウィクショナリーのAPIを使用して、Wordが存在するかどうかを判断するにはどうすればよいですか?

83
Armentage

Wiktionary API を使用して、Wordが存在するかどうかを照会できます。

既存のページと存在しないページの例:

http://en.wiktionary.org/w/api.php?action=query&titles=testhttp://en.wiktionary.org/w/api.php?action=query&titles=testx

最初のリンクは、解析しやすい他のタイプの形式の例を示しています。

Wordのデータを小さなXHTML形式(存在する以上のものが必要)で取得するには、ページの印刷可能バージョンを要求します。

http://en.wiktionary.org/w/index.php?title=test&printable=yeshttp://en.wiktionary.org/w/index.php?title=testx&printable=yes

これらは、標準のXMLパーサーで解析できます。

61
Michael Mrozek

ウィクショナリーに探している名前のページがあることを確認するだけで、いくつかの警告があります。

警告#1:英語のウィクショナリーを含むすべてのウィクショナリーは、実際にはすべての言語のすべての単語を含めることを目標としているため、上記のAPIコールを単に使用すると、質問しているWordは少なくとも1つの言語のWordですが、必ずしも英語ではないことを知ってください。 http://en.wiktionary.org/w/api.php?action=query&titles=dicare

警告#2:あるWordから別のWordへのリダイレクトが存在する可能性があります。代替のスペルに起因する可能性がありますが、何らかのエラーに起因する可能性があります。上記のAPI呼び出しは、リダイレクトと記事を区別しません: http://en.wiktionary.org/w/api.php?action=query&titles=profilemetry

警告#3:英語のウィクショナリーを含む一部のウィクショナリーには、「よくあるスペルミス」が含まれます: http://en.wiktionary.org/w/ api.php?action = query&titles = fourty

警告#4:一部のウィクショナリーでは、用語に関する情報がほとんどまたはまったくないスタブエントリが許可されています。これは、いくつかのウィクショナリーでは一般的でしたが、英語のウィクショナリーではそうではありませんでした。しかし、今では英語のウィクショナリーにも広がっているようです: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%8 (スタブが記入されているため、スタブがどのように見えるかを引き続き確認できます。 https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161

これらが必要なものに含まれていない場合、wikitext自体をロードして解析する必要がありますが、これは簡単な作業ではありません。

24
hippietrail

Wikitionary data のダンプをダウンロードできます。 [〜#〜] faq [〜#〜] に詳細情報があります。あなたの目的のために、 definitions dump はおそらくxmlダンプよりも良い選択です。

18
kybernetikos

本当にシンプルに保つには、次のようにダンプから単語を抽出します。

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

Pythonを使用している場合は、Suyash Beheraの WiktionaryParser を使用できます。

あなたはそれをインストールすることができます

Sudo pip install wiktionaryparser

使用例:

>>> 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

語源と発音のデータの解析を開始します。

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ここ は、より具体的なGistです。

0
Lance Pollard