11 Haziran 2016 Cumartesi

Açık kaynak olan inanılmaz servislerden Wikidata API

Wikipedia çok yaygın olarak kullanılan bir online ansiklopedi haline geldi. Bunda içerisindeki uçsuz bucaksız sayıda başlığa sahip olmasının yeri büyük. Bu platformun önemi kavranmış olmalı ki Wikidata ismiyle tüm wiki sitelerinin verilerini (wikipedia, wikinews ..) yapılandırılmış olarak depolayan ve bizlere sunan bir proje geliştirilmiş.

Wikidata API wikipedia'da bulunan herşeyi sınıflandırılmış olarak sunan istemeyeceğimiz kadar anlamlı veri elde edebileceğimiz inanılmaz bir platform. Bu API'yi oyluyo.com'da insanların oylamak istedikleri şeyleri kolayca bulabilmeleri için bir arama motoru olarak, eklenen maddelere otomatik olarak açıklama eklemek ve insanların oyladıkları şeyler ile ilgili daha fazla bilgi edinmelerini sağlayacak bilgileri çekmek için kullanıyoruz.




Örneğin, üstteki resimde açıklama ve Steffi Graf'ın fotoğrafı ve vatandaşlığına kadar tüm detayları otomatik olarak Wikidata API sayesinde çekiliyor.

Bu API'den pek faydalanılmadığını görmek beni üzdü. O yüzden API'den şöyle bir bahsetmek ve Wikidata'ya karşı ilgi uyandırmak istiyorum :) .

Wikidata'nın kendi sitesine girip herhangi birşey aratabilirsiniz ve sınıflandırılmış verileri tablolar halinde görebilirsiniz. Örneğin ben, favorim olan Inception filmini arattım:

https://www.wikidata.org/wiki/Q25188

Film ile ilgili mevcut bilgiler sitenin kullanııcı arayüzünde aşağıdaki gibi bize sunuluyor.


Tabiki maddelere programlarda kullanabileceğimiz JSON ve XML gibi formatlarda da erişebiliyoruz. Herhangi bir maddeyi sorgulatmak için wbgetentities action'ı ile sorgu yapıyoruz. Aynı yönetmen bilgisini JSON formatında almaya çalışınca da şöyle bir sonuç çıkıyor :))  https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q25188&languages=tr|en
Baya karmaşık ve anlamsız gibi görülen bu çıktı esneklik için tasarlanmış gibi. Bence bu kısım tüm wikidata yapısının bir özeti o yüzden bunu açıklayacağım gerisini İngilizce'yi iyi bilmiyor olsanız bile kavrarsınız gibime geliyor.
  
JSON çıktısını sırayla açıklamak gerekirse;

"P57" yönetmen(director) isimli özelliğin(property) ID'si. Bir maddenin özelliklerini almaya çalıştığımız zaman bize hep ID döner. Bu özelliğin Türkçe ya da İngilizce karşılığının ne olduğunu öğrenmek için ek bir sorgu göndermek gerekiyor.

"mainsnak" adlı objeler özelliğin değerini içerir. Tek yönetmen olduğu için P57 özelliğinin içerisinde sadece 1 mainsnak var ama örneğin başrolleri içeren özelliğe(cast member) bakarsanız çok fazla mainsnak içerdiğini göreceksiniz.

"datavalue" içerisindeki "numeric-id" ise örneğimizde yönetmenin id'sini verir örnekte Christopher Nolan'ın id'sini bize veriyor. API'yi kullanırken ID ile yine wbgetentities sorgusu yapıp "labels" kısmından sanatçının ismini almamız gerekecek: https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q25191&languages=tr|en

Şunu da söylemem lazım: Özellik değeri her zaman başka bir maddeye yönlendiren id olmayabiliyor. Tarih veya link gibi değerler de olabiliyor. Yazacağınız algoritmada buna önem vermeniz gerek :)  

wbgetentities action'ı id'sini bildiğimiz maddelerin özelliklerini öğrenmek için var. Tabi bunun yanı sıra wikipedia pageid'sini de bize sunuyor ve bu sayede -eğer varsa- maddenin Wikipedia'daki Türkçe açıklamasına da erişmiş oluyoruz. 

Wikidata veritabanında madde aratmak istiyorsak wbsearchentities action'ını kullanmamız gerekiyor.

Wikidata'nın en büyük problemlerinden biri Türkçe desteğinin sınırlı olması. Neyse ki genelde şehir, sanatçı gibi özel isimleri aldığım ve maddelerin Wikipedia linklerinin de sunulduğu için çok önem arz etmedi. Yine de Özellikle Türkçe Wikipedia sayfası olmayan maddeler için ihtiyaç oluyor ve onun için de Yandex Translate API'yi kullanıyorum. 

Bu yazıda sadece wbsearchentities ve wbgetentities'den bahsettim ama bu servisin onlarca farklı fonksiyonu da var. Resmi dokümantasyonundan bunlara erişebilirsiniz : https://www.wikidata.org/w/api.php

Wikidata'daki maddelerin wikipedia ansiklopedisinde bulunan açıklamalarını ve resimlerini almaya ihtiyaç duyarsanız kardeş proje olan Mediawiki'nin servisleri işinize yarayacak. https://www.mediawiki.org/wiki/API:Main_page





Hiç yorum yok:

Yorum Gönder