Bagaimana API Wiktionary digunakan untuk menentukan ada atau tidaknya sebuah kata?
Bagaimana API Wiktionary digunakan untuk menentukan ada atau tidaknya sebuah kata?
Jawaban:
The Wiktionary API dapat digunakan untuk permintaan apakah atau tidak kata ada.
Contoh untuk halaman yang ada dan yang tidak ada:
http://en.wiktionary.org/w/api.php?action=query&titles=test
http://en.wiktionary.org/w/api.php?action=query&titles=testx
Tautan pertama memberikan contoh tentang jenis format lain yang mungkin lebih mudah diurai.
Untuk mengambil data kata dalam format XHTML kecil (harus lebih dari yang dibutuhkan), minta versi halaman yang dapat dicetak:
http://en.wiktionary.org/w/index.php?title=test&printable=yes
http://en.wiktionary.org/w/index.php?title=testx&printable=yes
Ini kemudian dapat diurai dengan parser XML standar apa pun.
https://en.wiktionary.org/w/?curid=[page_id]&printable=yes
:, untuk mengalihkan ke halaman XHTML menggunakan pageid
.
Ada beberapa peringatan jika hanya memeriksa bahwa Wiktionary memiliki halaman dengan nama yang Anda cari:
Peringatan # 1 : Semua Wiktionary termasuk Wiktionary Inggris sebenarnya memiliki tujuan untuk memasukkan setiap kata dalam setiap bahasa, jadi jika Anda hanya menggunakan panggilan API di atas, Anda akan tahu bahwa kata yang Anda tanyakan adalah sebuah kata dalam setidaknya satu bahasa, tetapi belum tentu bahasa Inggris: http://en.wiktionary.org/w/api.php?action=query&titles=dicare
Peringatan # 2 : Mungkin ada pengalihan dari satu kata ke kata lain. Mungkin dari ejaan alternatif, tapi mungkin dari beberapa jenis kesalahan. Panggilan API di atas tidak akan membedakan antara pengalihan dan artikel: http://en.wiktionary.org/w/api.php?action=query&titles=profilemetry
Peringatan # 3 : Beberapa Wiktionary termasuk Wiktionary bahasa Inggris menyertakan "kesalahan eja yang umum": http://en.wiktionary.org/w/api.php?action=query&titles=fourty
Peringatan # 4 : Beberapa Wiktionary mengizinkan entri rintisan yang memiliki sedikit atau tidak ada informasi tentang istilah tersebut. Ini dulunya umum di beberapa Wiktionary tetapi tidak di Wiktionary bahasa Inggris. Tetapi tampaknya sekarang telah menyebar juga ke Wiktionary bahasa Inggris: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%83 (tautan permanen untuk saat rintisan diisi sehingga Anda masih dapat melihat seperti apa bentuk rintisan: https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161 )
Jika ini tidak termasuk dalam apa yang Anda inginkan, Anda harus memuat dan mengurai teks wiki itu sendiri, yang bukan merupakan tugas yang sepele.
&prop=info
ke kueri dan periksa respons untuk redirect
atribut.
Anda dapat mengunduh tumpukan data Wikitionary . Ada lebih banyak informasi di FAQ . Untuk tujuan Anda, definisi dump mungkin merupakan pilihan yang lebih baik daripada dump xml.
Untuk membuatnya sangat sederhana, ekstrak kata-kata dari dump seperti itu:
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
Jika Anda menggunakan Python, Anda dapat menggunakan WiktionaryParser oleh Suyash Behera.
Anda dapat menginstalnya dengan
sudo pip install wiktionaryparser
Contoh penggunaan:
>>> from wiktionaryparser import WiktionaryParser
>>> parser = WiktionaryParser()
>>> word = parser.fetch('test')
>>> another_word = parser.fetch('test', 'french')
>>> parser.set_default_language('french')
Anda mungkin ingin mencoba JWKTL. Saya baru tahu tentang itu;)
http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API
Seperti disebutkan sebelumnya, masalah dengan pendekatan ini adalah Wiktionary menyediakan informasi tentang semua kata dari semua bahasa . Jadi pendekatan untuk memeriksa apakah suatu halaman ada menggunakan API Wikipedia tidak akan berfungsi karena ada banyak halaman untuk kata-kata non-Inggris. Untuk mengatasinya, Anda perlu mengurai setiap halaman untuk mengetahui apakah ada bagian yang menjelaskan kata bahasa Inggris . Parsing wikitext bukanlah tugas yang sepele, meskipun dalam kasus Anda tidak seburuk itu. Untuk mencakup hampir semua kasus, Anda hanya perlu memeriksa apakah teks wiki berisi English
judul. Bergantung pada bahasa pemrograman yang Anda gunakan, Anda dapat menemukan beberapa alat untuk membuat AST dari teks wiki. Ini akan mencakup sebagian besar kasus, tetapi tidak semuanya karena Wiktionary menyertakan beberapa kesalahan eja yang umum.
Sebagai alternatif, Anda dapat mencoba menggunakan Robot Lingua atau yang serupa. Lingua Robot mengurai konten Wiktionary dan menyediakannya sebagai REST API. Respons yang tidak kosong berarti kata tersebut ada. Harap dicatat bahwa, berbeda dengan Wiktionary, API itu sendiri tidak menyertakan salah eja (setidaknya pada saat menulis jawaban ini). Perlu diketahui juga bahwa Wiktionary tidak hanya berisi kata-kata, tetapi ekspresi multi-kata.
Anda dapat menggunakan Revisi API:
atau Parse API:
https://en.wiktionary.org/w/api.php?action=parse&page=test&prop=wikitext&formatversion=2
Lebih banyak contoh disediakan di dokumen .
Berikut ini permulaan untuk mengurai data etimologi dan pengucapan:
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}}
}
Pembaruan : Berikut adalah intinya dengan lebih disempurnakan.
langs
?
langs
adalah beberapa ribu baris, terlalu besar untuk SO.