単語が存在するかどうかを判断するためにウィクショナリーのAPIをどのように使用できますか?
単語が存在するかどうかを判断するためにウィクショナリーのAPIをどのように使用できますか?
回答:
の ウィクショナリー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パーサーで解析できます。
https://en.wiktionary.org/w/?curid=[page_id]&printable=yes
してXHTMLページにリダイレクトするには、を使用しpageid
ます。
ウィクショナリーにあなたが探している名前のページがあることを確認するだけで、いくつかの注意点があります。
注意事項#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)
これらが必要なものに含まれていない場合は、ウィキテキスト自体をロードして解析する必要がありますが、これは簡単な作業ではありません。
&prop=info
クエリに追加して、redirect
属性の応答を確認します。
Wikitionaryデータのダンプをダウンロードできます。FAQに詳細があります。あなたの目的のために、定義ダンプはおそらく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')
JWKTLを試してみてください。私はそれについて知りました;)
http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API
前述のように、このアプローチの問題は、ウィクショナリーがすべての言語のすべての単語に関する情報を提供することです。したがって、Wikipedia APIを使用してページが存在するかどうかを確認するアプローチは、英語以外の単語のページが多数あるため機能しません。これを克服するには、各ページを解析して、英単語を説明するセクションがあるかどうかを調べる必要があります。ウィキテキストの解析は簡単な作業ではありませんが、あなたの場合はそれほど悪くはありません。ほとんどすべてのケースをカバーするには、ウィキテキストにEnglish
見出しが含まれているかどうかを確認する必要があります。使用するプログラミング言語に応じて、ASTを構築するためのいくつかのツールを見つけることができます wikitextから。ウィクショナリーにはいくつかの一般的なスペルミスが含まれているため、これでほとんどのケースがカバーされますが、すべてではありません。
別の方法として、Lingua Robotなどを使用してみることもできます。Lingua Robotはウィクショナリーコンテンツを解析し、REST APIとして提供します。空でない応答は、単語が存在することを意味します。ウィクショナリーとは異なり、API自体にはスペルミスは含まれていません(少なくともこの回答を書いている時点では)。ウィクショナリーには単語だけでなく複数の単語の表現も含まれていることに注意してください。
ここで、語源と発音データの解析を開始します。
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}}
}
アップデート:ここでは、それはより多くの肉付けと要旨があります。
langs
?
langs
、数千行であり、SOには大きすぎます。