ウィクショナリーのAPIを使用して、Wordが存在するかどうかを判断するにはどうすればよいですか?
Wiktionary API を使用して、Wordが存在するかどうかを照会できます。
既存のページと存在しないページの例:
http://en.wiktionary.org/w/api.php?action=query&titles=test
http://en.wiktionary.org/w/api.php?action=query&titles=testx
最初のリンクは、解析しやすい他のタイプの形式の例を示しています。
Wordのデータを小さなXHTML形式(存在する以上のものが必要)で取得するには、ページの印刷可能バージョンを要求します。
http://en.wiktionary.org/w/index.php?title=test&printable=yes
http://en.wiktionary.org/w/index.php?title=testx&printable=yes
これらは、標準のXMLパーサーで解析できます。
ウィクショナリーに探している名前のページがあることを確認するだけで、いくつかの警告があります。
警告#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自体をロードして解析する必要がありますが、これは簡単な作業ではありません。
Wikitionary data のダンプをダウンロードできます。 [〜#〜] faq [〜#〜] に詳細情報があります。あなたの目的のために、 definitions dump はおそらくxmlダンプよりも良い選択です。
本当にシンプルに保つには、次のようにダンプから単語を抽出します。
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
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')
語源と発音のデータの解析を開始します。
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です。