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


89

単語が存在するかどうかを判断するためにウィクショナリーのAPIをどのように使用できますか?


ドキュメントを読んだ人なら誰でも、APIに「ウィクショナリー単語のコンテンツを取得する」のに十分な機能が含まれていないことがわかります。私はそれがあなたの道のおよそ1%を得ると推定します。未加工のWiki構文または解析されたHTMLを取得でき、そこからすべてを自分で行う必要があります。とはいえ、英語のウィクショナリーでのみ機能する非常に新しい実験的なAPIがあるかもしれません。
ヒッピートレイル2016

3
すべてのウィクショナリー記事を個別のJSONファイルでここから入手してください:github.com/dan1wang/jsonbook-builder
daniel

回答:


69

ウィクショナリーAPI単語が存在するかどうかを照会するために使用することができます。

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

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

最初のリンクは、解析しやすい他のタイプのフォーマットの例を示しています。

単語のデータを小さなXHTML形式で取得するには(存在するだけでは不十分です)、ページの印刷可能なバージョンを要求します。

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

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


4
ありがとう。API自体は私が望んでいたものではありませんが、あなたが提供したリンクは私が探していたものです。
アーメンテージ

:今ではそうのようなXML出力以外のための追加的なフォーマットパラメータ受け入れen.wiktionary.org/w/...
eenagy

4
仕事あなたはかかわらず、期待どおりいない可能性がありますen.wiktionary.org/wiki/Category:English_misspellingsの en.wiktionary.org/wiki/amatuer
endolith

を使用https://en.wiktionary.org/w/?curid=[page_id]&printable=yesしてXHTMLページにリダイレクトするには、を使用しpageidます。
mie.ppa

2
このAPIで英語の単語のみをフィルタリングする方法は?
Nadav B

28

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

注意事項#1:英語のウィクショナリーを含むすべてのウィクショナリーには、実際にはすべての言語のすべての単語を含めるという目標があるため、単に上記のAPI呼び出しを使用すると、質問している単語は少なくとも1つの言語の単語であることがわかりますが、英語である必要はありません:http : //en.wiktionary.org/w/api.php?action=query&titles=dicare

警告#2:おそらく、ある単語から別の単語へのリダイレクトが存在します。これは別のスペルによるものかもしれませんが、何らかのエラーによるものかもしれません。上記の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%83(スタブがいっぱいになったときのパーマリンク。スタブはどのように見えるか:https : //en.wiktionary.org/w/index.php?title= %E6%99%B6%E7%90%83 &oldid=39757161

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


2
私が本当にやりたかったことは、英語以外のウィクショナリーサイトの1つにあるデータの完全なダンプを取って、コンテンツをローカルで使用できるものに変えることでした。今はばかげているように見えますが、すべての単語のリストを要求して、必要に応じて一度に1つずつ定義/翻訳をプルダウンできることを期待していました。
Armentage

1
注意2の修正は簡単です。&prop=infoクエリに追加して、redirect属性の応答を確認します。
12

@svick:はい、確かに#2はAPIを使用する際に回避する方が簡単ですが、この質問はそのアプローチについて質問していませんが、これらの基本的な注意事項はウィクショナリーデータダンプファイルを解析しようとすることもカバーしています。
ヒッピートレイル2012

17

Wikitionaryデータのダンプをダウンロードできます。FAQに詳細があります。あなたの目的のために、定義ダンプはおそらくXMLダンプよりも良い選択です。


2
これらのダンプファイルは巨大であり、どのファイルをダウンロードするかは不明です(それらすべてですか?)。おそらく、ほとんどの人が探しているものではなく、プログラムでほんの一握りの単語を検索したいだけです。
Cerin

1
ダウンロードするファイルについて説明します。つまり、定義のダンプ(リンクからのディレクトリは同じファイルの異なるバージョンです)です。プログラムで単語を検索したい場合は、これが理想的です。プログラムがオンラインでのみ実行されることを保証できる場合、他のオプションがありますが、それでも私は元の質問のこの部分に答えています。
kybernetikos 2012年

18
定義ダンプリンクは使用できなくなりました。
live-love

8

本当にシンプルに保つために、そのようなダンプから単語を抽出します:

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

pages-articles.xml.bz2のコピーを取得するにはどうすればよいですか?
アーメンテージ2012

これは、フォームのダンプを説明するために使用した一般的な名前LANGwiktionary-DATE-pages-articles.xml.bz2です。リンクに移動し、LANGwiktionary(LANG例: 'en'、 'de' ...)をクリックします。
ベンロス2012

4

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


1

前述のように、このアプローチの問題は、ウィクショナリーがすべての言語のすべての単語に関する情報を提供することです。したがって、Wikipedia APIを使用してページが存在するかどうかを確認するアプローチは、英語以外の単語のページが多数あるため機能しません。これを克服するには、各ページを解析して、英単語を説明するセクションがあるかどうかを調べる必要があります。ウィキテキストの解析は簡単な作業ではありませんが、あなたの場合はそれほど悪くはありません。ほとんどすべてのケースをカバーするには、ウィキテキストにEnglish見出しが含まれているかどうかを確認する必要があります。使用するプログラミング言語に応じて、ASTを構築するためのいくつかのツールを見つけることができます wikitextから。ウィクショナリーにはいくつかの一般的なスペルミスが含まれているため、これでほとんどのケースがカバーされますが、すべてではありません。

別の方法として、Lingua Robotなどを使用してみることもできます。Lingua Robotはウィクショナリーコンテンツを解析し、REST APIとして提供します。空でない応答は、単語が存在することを意味します。ウィクショナリーとは異なり、API自体にはスペルミスは含まれていません(少なくともこの回答を書いている時点では)。ウィクショナリーには単語だけでなく複数の単語の表現も含まれていることに注意してください。


0

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

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

アップデートここでは、それはより多くの肉付けと要旨があります。


おかげで、ブラウザのdevtoolsコンソール内で実行してみました。なにlangs
knb

1
要点で更新されたlangs、数千行であり、SOには大きすぎます。
Lance Pollard

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.