Vikisözlük API'si bir kelimenin var olup olmadığını belirlemek için nasıl kullanılabilir?
Vikisözlük API'si bir kelimenin var olup olmadığını belirlemek için nasıl kullanılabilir?
Yanıtlar:
Vikisözlük API bir kelime var olsun veya olmasın sorguya kullanılabilir.
Var olan ve olmayan sayfalara örnekler:
http://en.wiktionary.org/w/api.php?action=query&titles=test
http://en.wiktionary.org/w/api.php?action=query&titles=testx
İlk bağlantı, ayrıştırılması daha kolay olabilecek diğer biçim türleri hakkında örnekler sağlar.
Kelimenin verilerini küçük bir XHTML formatında almak için (var olandan daha fazlası gerekli olmalıdır) sayfanın yazdırılabilir versiyonunu isteyin:
http://en.wiktionary.org/w/index.php?title=test&printable=yes
http://en.wiktionary.org/w/index.php?title=testx&printable=yes
Bunlar daha sonra herhangi bir standart XML ayrıştırıcıyla ayrıştırılabilir.
Sadece Vikisözlük'ün aradığınız ada sahip bir sayfaya sahip olup olmadığını kontrol ederken birkaç uyarı var:
Uyarı 1 : İngilizce Vikisözlük de dahil olmak üzere tüm Vikisözlükler aslında her kelimeyi her dilde dahil etme amacına sahiptir, bu nedenle sadece yukarıdaki API çağrısını kullanırsanız, sorduğunuz kelimenin en az bir dilde bir kelime olduğunu bileceksiniz, ancak mutlaka İngilizce değil: http://en.wiktionary.org/w/api.php?action=query&titles=dicare
Uyarı # 2 : Belki bir kelimeden diğerine bir yönlendirme vardır. Alternatif bir yazımdan olabilir, ancak bir tür hatadan kaynaklanıyor olabilir. Yukarıdaki API çağrısı, yeniden yönlendirme ile makale arasında ayrım yapmayacaktır: http://en.wiktionary.org/w/api.php?action=query&titles=profilemetry
Uyarı 3 : İngilizce Vikisözlük de dahil olmak üzere bazı Vikisözlükler "yaygın yazım hataları" içerir: http://en.wiktionary.org/w/api.php?action=query&titles=fourty
Uyarı 4 : Bazı Vikisözlükler, terim hakkında çok az bilgi içeren veya hiç bilgi içermeyen saplama girişlerine izin verir. Bu, birkaç Vikisözlük'te yaygındı, ancak İngilizce Vikisözlük'te değil. Ama şimdi İngilizce Vikisözlük'e de yayılmış gibi görünüyor: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%83 (hala görebilmeniz için koçan doldurulduğunda kalıcı bağlantı bir saplama nasıl görünür: https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161 )
Bunlar istediğiniz şeye dahil değilse, wikitext'in kendisini yüklemeniz ve ayrıştırmanız gerekir ki bu önemsiz bir görev değildir.
&prop=info
sorguya ekleyin ve redirect
öznitelik için yanıtı kontrol edin .
Wikitionary verilerinin bir dökümünü indirebilirsiniz . SSS bölümünde daha fazla bilgi var . Sizin amaçlarınız için, tanım dökümü xml dökümünden muhtemelen daha iyi bir seçimdir.
Gerçekten basit tutmak için, kelimeleri çöplükten şu şekilde çıkarın:
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
LANGwiktionary-DATE-pages-articles.xml.bz2
. Bağlantıya gidin , ardından LANGwiktionary
(DİL örn. 'En', 'de' ...) öğesine tıklayın .
Python kullanıyorsanız, WiktionaryParser by Suyash Behera'yı kullanabilirsiniz .
Yükleyebilirsiniz
sudo pip install wiktionaryparser
Örnek kullanım:
>>> from wiktionaryparser import WiktionaryParser
>>> parser = WiktionaryParser()
>>> word = parser.fetch('test')
>>> another_word = parser.fetch('test', 'french')
>>> parser.set_default_language('french')
JWKTL'yi denemek isteyebilirsiniz. Bunu yeni öğrendim;)
http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API
Daha önce de belirtildiği gibi, bu yaklaşımla ilgili sorun, Vikisözlük'ün tüm dillerin tüm kelimeleri hakkında bilgi sağlamasıdır . Bu yüzden Wikipedia API kullanarak bir sayfanın var olup olmadığını kontrol etme yaklaşımı işe yaramayacak çünkü İngilizce olmayan kelimeler için çok sayıda sayfa var. Bunun üstesinden gelmek için, İngilizce kelimeyi açıklayan bir bölüm olup olmadığını anlamak için her sayfayı ayrıştırmanız gerekir . Wikitext'i ayrıştırmak önemsiz bir iş değildir, ancak sizin durumunuzda o kadar da kötü değil. Neredeyse tüm durumları kapsamak için, sadece wikitext'in English
başlık içerip içermediğini kontrol etmeniz yeterlidir . Kullandığınız programlama diline bağlı olarak, wikitext'den AST oluşturmak için bazı araçlar bulabilirsiniz . Bu, vakaların çoğunu kapsayacak, ancak hepsini değil çünkü Vikisözlük bazı yaygın yazım hatalarını içeriyor.
Alternatif olarak, Lingua Robot veya benzeri bir şey kullanmayı deneyebilirsiniz . Lingua Robot, Vikisözlük içeriğini ayrıştırır ve bir REST API olarak sağlar. Boş olmayan yanıt, kelimenin var olduğu anlamına gelir. Lütfen, Vikisözlük'ün aksine, API'nin kendisinin herhangi bir yazım hatası içermediğini unutmayın (en azından bu cevabı yazarken). Lütfen Vikisözlük'ün yalnızca kelimeleri değil, aynı zamanda çok kelimeli ifadeleri de içerdiğini unutmayın.
Revizyonlar API'sini kullanabilirsiniz:
veya Ayrıştırma API'sı:
https://en.wiktionary.org/w/api.php?action=parse&page=test&prop=wikitext&formatversion=2
Dokümanlarda daha fazla örnek verilmiştir .
İşte etimoloji ve telaffuz verilerini çözümlemeye bir başlangıç:
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}}
}
Güncelleme : İşte daha ayrıntılı bir şekilde özetlenen bir özet.
langs
?
langs
birkaç bin satır, SO için çok büyük.