Wikibooks
euwikibooks
https://eu.wikibooks.org/wiki/Azala
MediaWiki 1.45.0-wmf.9
first-letter
Media
Berezi
Eztabaida
Lankide
Lankide eztabaida
Wikibooks
Wikibooks eztabaida
Fitxategi
Fitxategi eztabaida
MediaWiki
MediaWiki eztabaida
Txantiloi
Txantiloi eztabaida
Laguntza
Laguntza eztabaida
Kategoria
Kategoria eztabaida
TimedText
TimedText talk
Modulu
Modulu eztabaida
PYTHON liburua/Aplikazioa IV: Wikipedian, Wikidatan eta Wikimedia Commonsen
0
7070
42034
42033
2025-07-11T09:23:07Z
81.9.242.50
George Cukor zuzendariaren artikuluko taula zatitxo bat. eta bukaerako ariketa bi
42034
wikitext
text/x-wiki
{{lanean}}
== 13. Aplikazioa IV: Wikipedian, Wikidatan eta Wikimedia Commonsen ==
Kapitulu honetan Wikipedian, Wikidatan edota Wikimedia Commons-en aritzeko programa batzuk landuko ditugu. Datu libre eta ugari dituzten hiru zerbitzu horiek aukera handiak eskaintzen dituzte programazio-ariketak egiteko. Noski, hasi baino lehenago wikipediako kontu bat eduki beharko dugu ariketa horiek egin ahal izateko.
Programak idatzi egokitu eta korritzeko bi aukera izango ditugu:
* Norberaren konputagailuan: [[Anaconda (Python banaketa)|Anaconda]] edo [[Idle]] bezalako programazio-ingurune baten Pywikibot erabiltzea
* Internet bidez Wikimedia Cloud Services baliatzea. Wikimediaren hodeiko zerbitzuetako "notebook" batean '''[https://hub-paws.wmcloud.org/) PAWS: A Web Shell (PAWS)]''' erabiltzea
Kapitulu azken urteetan erabilitako zenbait programa erakutsiko ditugu.
=== 13.1. Pywikibot liburutegia. Bilaketak eta ordezpenak Wikipediako orrien testuan. ===
[[Wikipedia:Pywikibot|Pywikibot]] tresna bilduma da, [[MediaWiki]] guneetan lanak automatizatzeko [[Python (informatika)|Python]] liburutegia da. Hasieran Pywikibot Wikipedian lan egiteko sortu bazen ere, gaur egun [[Wikimedia Fundazioa|Wikimedia Foundationeko]] hainbat proiektutan erabiltzen da eta hainbat wikitan, besteak beste [[Wikipedia|Wikipedian]], [[Wikidata|Wikidatan]] eta [[Wikimedia Commons|Commonsen]]).
Pywikibot liburutegi horretan Python-programa ugari eskaintzen dira script moduan erabil daitezkeenak. Esaterako, horien artean oso praktikoak dira ''[[mediawikiwiki:Manual:Pywikibot/listpages.py|listpages]]'' eta ''[[mediawikiwiki:Manual:Pywikibot/replace.py|replace]]'' scriptak Wikipediako orrien testuan bilaketak eta ordezpenak egiteko erabil ditzakegunak.<ref>{{Erreferentzia|izenburua=Eskuliburua:Pywikibotmultilingual|hizkuntza=en|data=2025-06-14|url=https://www.mediawiki.org/wiki/Manual:Pywikibot/eu|aldizkaria=MediaWiki|sartze-data=2025-07-09}}</ref><ref>{{Erreferentzia|izenburua=Manual:Pywikibot/Scripts|hizkuntza=en|url=https://www.mediawiki.org/wiki/Manual:Pywikibot/Scripts|aldizkaria=MediaWiki|sartze-data=2025-07-09}}</ref>
==== 13.1.1 Bilatu karaktere-kate bat duten Wikipediako orriak ====
Adibidez, UEUko liburu bat deskargatzeko esteka ("www.ueu.eus/download/") duten Euskal Wikipediako artikuluak bilatu nahi baditugu honako komandoa erabil ditzakegu terminal batean:<syntaxhighlight lang="linux-config">pwb.py listpages -lang:eu -weblink:"www.ueu.eus/download/"</syntaxhighlight>
Eta emaitzan ikusiko dugu 72 artikulu hauetan agertzen dela horrelako esteka bat:
1 Urtar
2 Primitibo flandestar
3 An13sa
4 Jabier Agirre
5 Martinellok ez du kukurik entzuten
6 Errando
[...]
72 Goi Paleolitoa Euskal Herrian
72 read operations
Execution time:
Read operation time: 0.0 seconds
Script terminated successfully.
Beste adibide bat, [[Inguma (datu-basea)|Inguma]] datu-baseko esteka duten Euskal Wikipediako artikuluak:<syntaxhighlight lang="linux-config">
pwb.py listpages -lang:eu -weblink:"inguma.eus/"
</syntaxhighlight>Komando hori exekutatuz gero 297 artikulu hauek lortuko ditugu:<syntaxhighlight lang="linux-config">
1 Javier Torrealdea
2 Jose Maria Pitarke
3 Eugenio Arraiza
4 Javier Duoandikoetxea
5 Joseba Agirreazkuenaga
6 Karlos del Olmo
[...]
296 Patxi Angulo Martin
297 Aitzpea Leizaola
297 read operations
Execution time:
Read operation time: 0.0 seconds
Script terminated successfully.
</syntaxhighlight>
==== 13.1.2. Ordeztu karaktere-kate bat beste batekin Wikipediako hainbat orritan. ====
Ordezpen hau egin nahi dugu sistematikoki Wikipedian: "Fa maiorren]]" azaltzen den tokietan "fa maiorren]]" jarri nahi dugu letra xehe batekin hasita.
Lehenago bilatu dugu "Fa maiorren]]" karaktere-katea artikulutan azaltzen den eta ordeztekoak.txt fitxategian gorde ditugu.<syntaxhighlight lang="text">[[Fa maior]]
[[3. Sinfonia (Brahms)]]
[[5. Sinfonia (Dvořák)]]
[[8. Sinfonia (Beethoven)]]
[[Aash Al Maleek]]
[[Allah Peliharakan Sultan]]
[[Arise O Compatriots, Nigeria's Call Obey]]
[[Biladi, Biladi, Biladi]]
[[Gloria al Bravo Pueblo]]
[[Hino Nacional Brasileiro]]
[[Imnos is tin Eleftherian]]
[[Inno e Marcia Pontificale]]
[[L-Innu Malti]]
[[Le Temps des cerises]]
[[Maitia, nun zira]]
[[Mazurek Dąbrowskiego]]
[[Os Pinos]]
[[Pastorala (Beethovenen Sinfonia)]]
[[Pianoarentzako 22. sonata (Beethoven)</syntaxhighlight>
Honela egin ditugu ordezpen guzti horiek:<syntaxhighlight lang="text">@PAWS:$ pwb.py replace -lang:eu -file "Fa maiorren]]" "fa maiorren]]"
Please enter the local file name: ordeztekoak.txt
The summary message for the command line replacements will be something like: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
Press Enter to use this automatic message, or enter a description of the
changes your bot will make:
Retrieving 18 pages from wikipedia:eu.
No changes were necessary in [[eu:Fa maior]]
No changes were necessary in [[eu:3. Sinfonia (Brahms)]]
>>> 5. Sinfonia (Dvořák) <<<
@@ -23 +23 @@
- [[Kategoria:Konposizioak Fa maiorren]]
+ [[Kategoria:Konposizioak fa maiorren]]
Do you want to accept these changes? ([y]es, [N]o, [e]dit original, edit
[l]atest, open in [b]rowser, [m]ore context, [a]ll, [q]uit): y
Edit summary: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
No changes were necessary in [[eu:8. Sinfonia (Beethoven)]]
[...]
>>> Pastorala (Beethovenen Sinfonia) <<<
@@ -26 +26 @@
- [[Kategoria:Konposizioak Fa maiorren]]
+ [[Kategoria:Konposizioak fa maiorren]]
Edit summary: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
Sleeping for 8.5 seconds, 2023-04-05 11:11:21
Page [[Pastorala (Beethovenen Sinfonia)]] saved
18 read operations
13 write operations
Execution time: 136 seconds
Read operation time: 7.6 seconds
Write operation time: 10.5 seconds
Script terminated successfully.</syntaxhighlight>Wikipediako erreferentzia batean automatikoki hartu diren izen deiturak konpondu nahi ditugu Wikipedia artikulu batean. Zehazkiago esanda, adibide honetan "Joseba_Agirreazkuenaga" artikuluan "Erreferentzia|izena=Rafael Lopez|abizena=Atxurra|" karaktere-kateak beste honekin ordeztu nahi ditugu: "Erreferentzia|izena=Rafael|abizena=Lopez Atxurra|"<syntaxhighlight lang="text">#!/bin/bash
echo "Izen/deituren banaketa zuzentzen"
pwb.py replace -page:"Joseba_Agirreazkuenaga" "Erreferentzia|izena=Rafael Lopez|abizena=Atxurra|" "Erreferentzia|izena=Rafael|abizena=Lopez Atxurra|"</syntaxhighlight>
=== 13.2. Wikipediako hainbat artikulu sortzea Wikidatako hainbat itemen oinarrizko datuekin ===
2025eko udaberrian [[Wikiproiektu:Euskal Etxeak Munduan Zehar|Euskal Etxeak Munduan Zehar]] wikiproiektuaren barruan Euskal Wikipedian falta ziren 140 euskaletxeen artikuluak programa bidez automatikoki sortu genituen bakoitza oinarrizko datu batzuekin.
Aldez aurretik oinarrizko datu horiek ''euskaletxeak.eus'' webgunetik Wikidatara gehitu genituen (ikus hemen: [https://drive.google.com/drive/folders/1cqDvjqWTvxZ1GYVJ2TUp-5LwlBb4YLRB Zelan igo datu asko Wikidatara? Gidoia eta ariketak egiteko datuak])
Hainbat programa egin behar izan dira. Pixkanaka joan gara sortzen artikuluak, Gehienetan herrialde bakoitzeko programa sortu dugu eta exekuzio bat egin dugu. Argentina hiru urratsetan egon dugu: Buenos Aires hiriburuko euskaletxeak, gero Buenos Aires probintziakoak, eta bukaeran Argentinako beste probintzietakoak denak batera.
Eta hau da Buenos Aires probintziako euskal etxeen artikuluak sortu zituen programa:<syntaxhighlight lang="python3"># -*- coding: utf-8
# Buenos Aires probintziakoak
# Trenque Lauquen (Q264679)
import pywikibot
import re
from pywikibot import pagegenerators
"""
Iterate over a query given in a string using page generators.
"""
QUERY = """
# Euskal etxeak munduan zehar. Bakoitzarekin hainbat datu emanda.
# Ikus datuak hemen: https://www.euskaletxeak.eus/
SELECT DISTINCT ?item WHERE {
?item wdt:P31 wd:Q8341851; # ?itema euskal etxea da
wdt:P131 ?hiria. # ?itema ?hiria-n dago
?hiria wdt:P131* wd:Q44754; # ?hiria Buenos Aires probintzian dago
OPTIONAL {
?sitelink schema:about ?item;
schema:inLanguage "eu".
}
FILTER(!(BOUND(?sitelink)))
SERVICE wikibase:label { bd:serviceParam wikibase:language "eu,es,en". }
}
LIMIT 1000
"""
def helbidekoak (h):
print(h)
if re.search(r"\d", h) != None:
if re.match(r"(.*),? (\d*)$", h):
m = re.match(r"(.*),? (\d*)$", h)
print (m.groups())
kalea = m.group(1) # 'Con Con'
if kalea[-1] == ',':
kalea = kalea [:-1]
kale_zbkia = m.group(2) # '6955'
return kalea + " kalearen " + kale_zbkia +" zenbakian dago."
else:
return "Hau da elkartearen helbidea: " + h + '.'
else:
return "Hau da elkartearen helbidea: " + h + '.'
def sorrerakoak (item1):
claims = item1.get(u'claims') #Get all the existing claims
if u'P571' in claims[u'claims']:
sorrera_date = item1.claims['P571'][0].getTarget()
sorrera = str(sorrera_date.year) #'1981'
return sorrera + ". urtean inauguratu zen. "
else:
return ""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
i_buenos_aires = 4
for item in generator:
print (item)
h1 = item.get()
# print(h1)
#print (h1['claims'])
# Datuak hartu wikidatatik izen ofiziala, hiria, probintzia, sorrerako urtea...
hiria_qid= item.claims['P131'][0].getTarget()
hiria = hiria_qid.labels['eu']
hiria_ko = hiria+'ko' #'Barilocheko'
if hiria != 'Buenos Aires probintzia' and hiria != 'Mar del Plata':
izen_ofiziala = item.labels['eu'] #'"Centro Basko Mendi'ko Euzko Etxea"
etiketa_eu = hiria +" hiriko Euskal Etxea"
#etiketa_eu = izen_ofiziala + " (euskal etxea, Trenque Lauquen)"
probintzia_qid = item.claims['P131'][0].getTarget()
probintzia = probintzia_qid.labels['eu'] #'Río Negro'
helbidea = item.claims['P6375'][0].getTarget().text # 'Con Con 6955')
#print (helbidea)
#testu_sarrera = "'''" + izen_ofiziala + "''' [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[Buenos Aires probintzia|Buenos Aires]] probintzian. " + sorrera + ". urtean inauguratu zen. " + helbidekoak(helbidea) +"<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""
testu_sarrera = "'''" + hiria_ko +" Euskal Etxea''', ofizialki '''" + izen_ofiziala + "''', [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[Buenos Aires probintzia|Buenos Aires]] probintzian. " + sorrerakoak(item) + helbidekoak(helbidea) + "<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""#print (testu_sarrera)
#testu_sarrera = "'''" + hiria_ko +" Euskal Etxea''', ofizialki '''" + izen_ofiziala + "''', [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[" + probintzia + " probintzia|" + probintzia + "]] probintzian. " + sorrerakoak(item) + helbidekoak(helbidea) + "<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""#print (testu_sarrera)
testu_gorputza = """
== Historia ==
== Baliabideak ==
== Jarduerak ==
== Munduko Euskal Etxeen mapa ==
[[Fitxategi:Munduko_euskal_etxeak_-_Mapa_-_Wikidata_-_2025.png|erdian|thumb|380x380px|Ikus [https://w.wiki/Dkvm Munduko euskal etxeen mapa interaktiboa] (Wikidatako datuekin, 2025)]]
== Erreferentziak ==
{{erreferentzia_zerrenda|30em}}
== Ikus, gainera ==
* [[Euskal etxeak]]
* [[Euskal diaspora]]
== Kanpo estekak ==
* [https://www.euskaletxeak.eus/index.php?lang=eu_ES ''www.euskaletxeak.eus'']
{{zirriborroa}}
{{Autoritate kontrola}}
{{Euskal etxeak}}
"""
testu_kategoriak = """
[[Kategoria:Argentinako euskal etxeak]]
[[Kategoria:Buenos Aires probintzia]]""" ## + probintzia + "]]" ### + "ko probintzia]]"
# wikipediako artikuluaren kodea (testua) osatzea, bere zati nagusiak bata bestearen atzeetik jarrita
testua = "{{eraikin infotaula automatikoa}}"
testua += testu_sarrera
testua += testu_gorputza
testua += testu_kategoriak
print(etiketa_eu)
print(testu_sarrera)
print(testu_kategoriak)
#sortu "etiketa_eu" artikulua "testua" wikikodearekin
site1 = pywikibot.Site('wikipedia:eu')
page1 = pywikibot.Page(site1, etiketa_eu)
page1.text = testua
page1.save()
# wikidatako itema lotu sortu berri den wikipediako artikuluarekin
item.setSitelink(page1, summary=u'Setting (/updating?) sitelink.')
#egiteko: "izen_ofiziala" artikulua sortu? #birzuzendu[["etiketa_eu"]]
page3 = pywikibot.Page(site1, izen_ofiziala)
page3.text = "#BIRZUZENDU[[" + etiketa_eu + "]]"
page3.save()
#egiteko: "hiria_ko + Euskal Etxea" jarri wikidatako itemean goitizen moduan
new_alias = {"eu": [etiketa_eu]}
item.editAliases(new_alias, summary="Setting new aliases.")</syntaxhighlight>
=== 13.3. Wikipediako hainbat artikuluren artean etiketa-aldaketak eta birzuzenketak moldatzea ===
2025 martxoan [[Wikiproiektu:Hegaztien euskarazko izenak|Hegaztien_euskarazko_izenak]] wikiproiektuan '''hegaztien euskarazko izenak''' egoki erabiltzeko moldaketak egin genituen Wikipedian eta Wikidatan. Python programak erabili dira [[Euskal Batzorde Ornitologikoa|Euskal Batzorde Ornitologikoak]] izen horiekin egin duen eguneraketak Euskal Wikipedian integratzeko. Taula handi bat zegoen ordura arteko espezie izen onartua (ez du zertan bat etorri behar Euskal Wikipedia zeukanarekin) eta euskarazko izena agertuzen zen. Ziurtatu behar genuen euskarazko izena zela artikuluaren benetako izena, eta ez birzuzenketa bat. Lagungarri, beste hizkuntza batzuetako izenak ere eskaintzen ziren, bilaketa egin behar izatekotan. Egitekoak hauek ziren
* Espezie izenaren zutabean dauden guztiak horiz markatuta agertu behar dira, birzuzenketa bat eginez euskarazko izena duen artikulura.
* Euskarazko izenera mugitu behar diren artikulu guztiak mugitu. Artikulu horietan erreferentzia gisa txoriak.eus zein ornitho.eus gehitu daitezke. <code><nowiki>{{</nowiki>[[Txantiloi:Txoriak|txoriak]]<nowiki>}}</nowiki></code> erabil dezakezu, izen zientifikoa jarrita, lotura sortzeko. Adibidez, <code><nowiki>{{</nowiki>[[Txantiloi:Txoriak|txoriak]]<nowiki>|Pandion-haliaetus}}</nowiki></code>; [[Arrano arrantzale|Arrano arrantzalea]] artikulua horrela hasten da: "'''Arrano arrantzalea''' (''Pandion haliaetus'')...". Izenburu etzana ere kendu behar zaio artikuluari, baldin badu.
* Hegaztietako batzuk beste izen zientifiko bat duen artikulu batean ditugu, zaharkituta geratu dena. Horrelakoetan taulako izen zientifikoarekin ere sortu beharko da artikulu bat, euskarazko izena duen artikulura daraman birzuzenketa moduan.
=== 13.4. Wikipediarako taula bat automatikoki sortu Wikidatako datuekin ===
Sortu genuen Python programa bat zuzendari baten filmen izenburuak gure inguruko hainbat hizkuntzatan ere erakusteko (en, es, fr, eu, ca. gl). Python programak wikikodea sortzen du, taula bat da eta artikuluan sartu behar da gero, eskuz. Gero artikuluan filmen taula ordenatu daiteke ekoizlearen arabera edo izenburuaren arabera ere.<ref>{{Erreferentzia|izenburua=Eztabaida:George Cukor|hizkuntza=eu|data=2024-06-04|url=https://eu.wikipedia.org/w/index.php?title=Eztabaida:George_Cukor&oldid=9812871|sartze-data=2025-07-08|encyclopedia=Wikipedia, entziklopedia askea.}}</ref>
Pena da, pelikula klasiko oso gutxi ikus daitezke euskaraz. Horrelakoetan, behar den bezala, filmaren izenburua jatorrizko hizkuntzan (ingelesez gehienetan) jartzen dugu Euskal Wikipedian Baina horrela, batzuetan ez da erraza filma ezagutzea, filma frantsesez edo gaztelaniaz ikusi dugulako. Adibidez, [[George Cukor]] zuzendariaren artikuluan taula hau txertatu genuen zuzendutako filma bakoitzaren bi aktore, enpresa ekoizlea eta beste izenburuak (gaztelaniaz, frantsesez). Hau da taula horren zatitxo bat:
{| class="wikitable sortable"
!Urtea
!Filma
!Aktoreak
!Ekoizlea
!Izenburuak (es,fr)
|-
|...
|
|
|
|
|-
|1939
|[[Gone with the Wind]]
|[[Clark Gable]], [[Vivien Leigh]]
|[[Metro-Goldwyn-Mayer]]
|{{Lang-es|Lo que el viento se llevó}} {{Lang-fr|Autant en emporte le vent}}
|-
|1940
|[[Susan and God]]
|[[Joan Crawford]], [[Fredric March]]
|[[Metro-Goldwyn-Mayer]]
|{{Lang-es|Susana y Dios}} {{Lang-fr|Suzanne et ses idées}}
|-
|1940
|[[The Philadelphia Story]]
|[[Katharine Hepburn]], [[Cary Grant]]
|[[Metro-Goldwyn-Mayer]]
|{{Lang-fr|Indiscrétions}}
|-
|...
|
|
|
|
|-
|1954
|[[It Should Happen to You]]
|[[Judy Holliday]], [[Peter Lawford]]
|[[Columbia Pictures]]
|{{Lang-es|La rubia fenómeno}} {{Lang-fr|Une femme qui s'affiche}}
|-
|1956
|[[Bhowani Junction (filma)|Bhowani Junction]]
|[[Ava Gardner]], [[Stewart Granger]]
|[[Metro-Goldwyn-Mayer]]
|{{Lang-es|Cruce de destinos}} {{Lang-fr|La Croisée des destins}}
|-
|1956
|[[Lust for Life (filma)|Lust for Life]]
|[[Kirk Douglas]], [[Anthony Quinn]]
|[[Metro-Goldwyn-Mayer]]
|{{Lang-es|El loco del pelo rojo}} {{Lang-fr|La Vie passionnée de Vincent van Gogh}}
|-
|...
|
|
|
|
|}
Animatzen bazara, Python programaren kodea erabil dezakezue PAWS tresnarekin interneten bidez (https://hub-paws.wmcloud.org/), baita beste zuzendari batekin (ordeztu wikidata identifikadorea "Q56014' George Cuckorrena da, hori aldatu)
Beste bertsio bat egin dut [[Eztabaida:Jack Nicholson|zinema-aktoreentzat]] (ikus https://eu.wikipedia.org/wiki/Eztabaida:Jack_Nicholson).<ref>{{Erreferentzia|izenburua=Eztabaida:Jack Nicholson (Euskal Wikipedia)|hizkuntza=eu|data=2024-06-04|url=https://eu.wikipedia.org/w/index.php?title=Eztabaida:Jack_Nicholson&oldid=9812955|sartze-data=2025-07-11|encyclopedia=Wikipedia, entziklopedia askea.}}</ref><syntaxhighlight lang="python"># -*- coding: utf-8 -*-
import pandas as pd
import pywikibot
import datetime
from pywikibot import pagegenerators
"""
Ingelesezko zuzendari baten filmekin wititaula bat sortu.
Pelikula bakoitzean datua hauek: urtea, zuzendaria eta izenburu desberdinak zenbait hizkuntzatan.
Iterate over a query given in a string using page generators.
"""
#Sortu lista bat pelikula guztien wikidata-identifikadoreekin
QUERY = """
#
SELECT ?item WHERE {
?item (wdt:P31/(wdt:P279*)) wd:Q11424;
wdt:P57 wd:Q56014.
}
LIMIT 500
"""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
#Sortu Data-frame bat (Kaljulu-orri bat) pelikula bakoitzaren datuekin
header = ['Urtea', 'Filma', 'Antzezleak', 'Ekoizlea', 'Hizkuntzak']
data = {}
data = pd.DataFrame(data, columns=header)
for item in generator:
print (item)
h1 = item.get()
#print(h1)
#print (h1['claims'])
if 'P577' in item.claims: # urtea
date = item.claims['P577'][0].getTarget()
urte = date.year
else:
urte = 0
if 'en' in item.labels:
film = item.labels['en']
else:
film = '--'
if 'P161' in item.claims: # antzezle
if len(item.claims['P161']) > 1:
antzezle1 = item.claims['P161'][0].getTarget()
antzezle2 = item.claims['P161'][1].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]], [["+antzezle2.labels['en']+"]]"
else:
antzezle1 = item.claims['P161'][0].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]]"
else:
antzezleak = "--"
if 'P272' in item.claims: # ekoizlea
ekoizle1 = item.claims['P272'][0].getTarget()
ekoizle = "|[["+ekoizle1.labels['en']+"]]"
else:
ekoizle = "--"
hizkuntzak =""
if 'es' in item.labels:
if item.labels['es'] != item.labels['en']:
hizkuntzak += '{{Lang-es|'+item.labels['es']+'}} '
if 'fr' in item.labels:
if item.labels['fr'] != item.labels['en']:
hizkuntzak += '{{Lang-fr|'+item.labels['fr']+'}} '
if 'eu' in item.labels:
if item.labels['eu'] != item.labels['en']:
hizkuntzak += '{{Lang-eu|'+item.labels['eu']+'}} '
if 'ca' in item.labels:
if item.labels['ca'] != item.labels['en']:
hizkuntzak += '{{Lang-ca|'+item.labels['ca']+'}} '
if 'gl' in item.labels:
if item.labels['gl'] != item.labels['en']:
hizkuntzak += '{{Lang-gl|'+item.labels['gl']+'}} '
new_row = {'Urtea': urte, 'Filma': film, 'Antzezleak': antzezleak, 'Ekoizlea': ekoizle, 'Hizkuntzak': hizkuntzak}
data.loc[len(data)] = new_row
#Ordenatu filmak argitaratu ziren urtearen arabera
sorted_df = data.sort_values(by=["Urtea"], ascending=True)
#Taularen wikilodea idaztea
print ("""== Zuzendutako filmen aktoreak, ekoizlea eta izenburuak ==
Taula honetan ikus daitezke filmaren bi aktore, enpresa ekoizlea eta beste izenburuak beste hizkuntza batera itzuli bada (gaztelania, frantsesa, euskara, katalana edo galiziera):
{| class="wikitable sortable"
! Urtea
! Filma
! Antzezleak
! Ekoizlea
! Hizkuntzak """)
for index, lerroa in sorted_df.iterrows():
print("|-")
print("| ", lerroa['Urtea'])
print("| [["+lerroa['Filma']+"]]")
print("| "+lerroa['Antzezleak'])
print("| "+lerroa['Ekoizlea'])
print("| "+lerroa['Hizkuntzak'])
print("|}")</syntaxhighlight>
Hona hemen zinema-zuzendarien taula hobeto ateratzeko beste bertsio bat.
Ingelesezkoaren gain gaztelaniazko eta frantsesezko izenburuak bakarrik erakusten dira (wikidatako Labels etiketan dagoena) eta pelikulen euskarazko artikuluaren esteka hobeto adierazten da ("item.getSitelink('euwiki')" eta ez "item.labels['en']" erabilita).
Programa hau hainbat artikulutan erabili zen, horien artean daude oscar sari bat jaso duten zuzendari gehienetan.
Antzeko taula bat gehitu da Oscar saria irabazi duten aktoreekin.
<syntaxhighlight lang="python">
# -*- coding: utf-8 -*-
import pandas as pd
import pywikibot
import datetime
from pywikibot import pagegenerators
"""
Ingelesezko zuzendari baten filmekin wititaula bat sortu.
Pelikula bakoitzean datu hauek: urtea, izenburua ingelesez, bi aktore, ekoizlea eta izenburua espainieraz eta frantsesez ingelesezkoa ez badira.
Iterate over a query given in a string using page generators.
"""
#Sortu lista bat pelikula guztien wikidata-identifikadoreekin
# wdt:P57 wd:Q51525 lerroan Q51525 identifikadorea Milos Forman zuzendariarena da.
#Ikus Wikidatan: https://www.wikidata.org/wiki/Q51525
# Query honetan Q51525 identifikadorea ordez beste zuzendari batena jarriz gero beste zuzendari horren taula lortuko da
QUERY = """
#
SELECT ?item WHERE {
?item (wdt:P31/(wdt:P279*)) wd:Q11424;
wdt:P57 wd:Q56014.
}
LIMIT 500
"""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
#Sortu Ddta-frame bat (Kalkulu-orri bat) pelikula bakoitzaren datuekin
header = ['Urtea', 'Filma', 'Antzezleak', 'Ekoizlea', 'Hizkuntzak']
data = {}
data = pd.DataFrame(data, columns=header)
for item in generator:
print (item)
h1 = item.get()
#print(h1)
#print (h1['claims'])
if 'P577' in item.claims: # urtea
date = item.claims['P577'][0].getTarget()
urte = date.year
else:
urte = 0
if 'en' in item.labels:
film = '[['+item.labels['en']+']]'
if 'euwiki' in h1['sitelinks']:
print ('euwiki: '+item.getSitelink('euwiki'))
if item.getSitelink('euwiki') != item.labels['en']:
film = '[['+item.getSitelink('euwiki')+'|'+item.labels['en']+']]'
"""
print ('enlabel: '+item.labels['en'])
print ('enwiki: '+item.getSitelink('enwiki'))
print ('euwiki: '+item.getSitelink('euwiki'))
"""
else:
film = '--'
if 'eu' in item.labels:
print('eu_Label:', item.labels['eu'])
if 'P161' in item.claims: # antzezle
if len(item.claims['P161']) > 1:
antzezle1 = item.claims['P161'][0].getTarget()
antzezle2 = item.claims['P161'][1].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]], [["+antzezle2.labels['en']+"]]"
else:
antzezle1 = item.claims['P161'][0].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]]"
else:
antzezleak = "--"
if 'P272' in item.claims: # ekoizlea
ekoizle1 = item.claims['P272'][0].getTarget()
ekoizle = "|[["+ekoizle1.labels['en']+"]]"
else:
ekoizle = "--"
hizkuntzak =""
if 'es' in item.labels:
if item.labels['es'] != item.labels['en']:
hizkuntzak += '{{Lang-es|'+item.labels['es']+'}} '
if 'fr' in item.labels:
if item.labels['fr'] != item.labels['en']:
hizkuntzak += '{{Lang-fr|'+item.labels['fr']+'}} '
"""
if 'eu' in item.labels:
if item.labels['eu'] != item.labels['en']:
hizkuntzak += '{{Lang-eu|'+item.labels['eu']+'}} '
if 'ca' in item.labels:
if item.labels['ca'] != item.labels['en']:
hizkuntzak += '{{Lang-ca|'+item.labels['ca']+'}} '
if 'gl' in item.labels:
if item.labels['gl'] != item.labels['en']:
hizkuntzak += '{{Lang-gl|'+item.labels['gl']+'}} '
"""
new_row = {'Urtea': urte, 'Filma': film, 'Antzezleak': antzezleak, 'Ekoizlea': ekoizle, 'Hizkuntzak': hizkuntzak}
data.loc[len(data)] = new_row
#Ordenatu filmak argitaratu ziren urtearen arabera
sorted_df = data.sort_values(by=["Urtea"], ascending=True)
#Taularen wikilodea idaztea
print ("""== Filmografia ==
Taula honetan ikus daitezke zuzendutako filma bakoitzaren bi aktore, enpresa ekoizlea eta beste izenburuak (gaztelaniaz, frantsesez):
{| class="wikitable sortable"
! Urtea
! Filma
! Aktoreak
! Ekoizlea
! Izenburuak (es,fr)""")
for index, lerroa in sorted_df.iterrows():
print("|-")
print("| ", lerroa['Urtea'])
print("| "+lerroa['Filma'])
print("| "+lerroa['Antzezleak'])
print("| "+lerroa['Ekoizlea'])
print("| "+lerroa['Hizkuntzak'])
print("|}")
print("------------------------")
</syntaxhighlight>
=== 13.5. CSV fitxategi bat sortzea Wikipediako hainbat artikuluk hainbat hizkuntzatan duten etiketarekin ===
Adibidez, ''txoriak.txt'' fitxategia hau baldin bada:<syntaxhighlight lang="text">
txantxangorri
etxe-txolarre
birigarro arrunt
gailupa eurasiar
zozo arrunt
eskinoso eurasiar
kaskabeltz handi
erregetxo bekainzuri
katagorri arrunt
mika arrunt
urubi arrunt
</syntaxhighlight>''txori_izenak_hizkuntzaka.csv'' fitxategian lortu nahi dugun emaitza hau da:
{| class="wikitable"
| align="left" |Euskaraz
| align="left" |ca
| align="left" |gl
| align="left" |es
| align="left" |fr
| align="left" |ar
| align="left" |en
|-
| align="left" |txantxangorri
| align="left" |pit-roig
| align="left" |paporrubio
| align="left" |Erithacus rubecula
| align="left" |rouge-gorge familier
| align="left" |أبو الحناء الأوروبي
| align="left" |European Robin
|-
| align="left" |etxe-txolarre
| align="left" |pardal
| align="left" |Pardal común
| align="left" |gorrión común
| align="left" |Moineau domestique
| align="left" |عصفور دوري
| align="left" |House Sparrow
|-
| align="left" |birigarro arrunt
| align="left" |tord comú
| align="left" |Tordo común
| align="left" |Turdus philomelos
| align="left" |Grive musicienne
| align="left" |سمنة مطربة
| align="left" |Song Thrush
|-
| align="left" |gailupa eurasiar
| align="left" |pinsà borroner
| align="left" |Cardeal
| align="left" |Pyrrhula pyrrhula
| align="left" |bouvreuil pivoine
| align="left" |دغناش أوراسي
| align="left" |Eurasian Bullfinch
|-
| align="left" |zozo arrunt
| align="left" |merla comuna
| align="left" |Merlo
| align="left" |Turdus merula
| align="left" |Merle noir
| align="left" |شحرور
| align="left" |Common Blackbird
|-
| align="left" |eskinoso eurasiar
| align="left" |gaig
| align="left" |Gaio
| align="left" |Garrulus glandarius
| align="left" |geai des chênes
| align="left" |قيق أوراسي
| align="left" |Eurasian Jay
|-
| align="left" |kaskabeltz handi
| align="left" |mallerenga carbonera
| align="left" |Ferreiriño abelleiro
| align="left" |Parus major
| align="left" |Mésange charbonnière
| align="left" |قرقف كبير
| align="left" |Great Tit
|-
| align="left" |erregetxo bekainzuri
| align="left" |bruel eurasiàtic
| align="left" |Estreliña riscada
| align="left" |Regulus ignicapilla
| align="left" |Roitelet à triple bandeau
| align="left" |صعو أحمر العرف
| align="left" |Common Firecrest
|-
| align="left" |katagorri arrunt
| align="left" |esquirol
| align="left" |Esquío vermello
| align="left" |Sciurus vulgaris
| align="left" |écureuil roux
| align="left" |سنجاب أحمر
| align="left" |red squirrel
|-
| align="left" |mika arrunt
| align="left" |garsa
| align="left" |Pega
| align="left" |Pica pica
| align="left" |pie bavarde
| align="left" |عقعق أوراسي
| align="left" |Eurasian magpie
|-
| align="left" |urubi arrunt
| align="left" |gamarús euroasiàtic
| align="left" |Avelaiona
| align="left" |Strix aluco
| align="left" |Chouette hulotte
| align="left" |خبل
| align="left" |Tawny Owl
|}
Python programak urrats hauek egiten ditu:
# <code>''txoriak.txt''</code> fitxategia irakurtzen du (lerro bakoitzean txori izen bat euskaraz)
# Txori bakoitzaren Wikidata Q-identifikadorea lortzen du
# Wikidatan hizkuntza hauetan bilatzen ditu izenak: eu, ca, gl, es, fr, ar eta en
# Eta ''txori_izenak_hizkuntzaka.csv'' ''izeneko'' fitxategian gordetzen ditu.
Hau da Python programa:<syntaxhighlight lang="python3">
import requests
import csv
from tabulate import tabulate
# Zein hizkuntzatan bilatu nahi dugun
HIZKUNTZAK = ["ca", "gl", "es", "fr", "ar", "en"]
def hartu_wikidata_id(txori_izena_eu):
"""Euskarazko izen batetik Wikidata Q-ID lortzen du"""
query = f"""
SELECT ?item WHERE {{
?item rdfs:label "{txori_izena_eu}"@eu.
}} LIMIT 1
"""
url = "https://query.wikidata.org/sparql"
headers = {"Accept": "application/sparql-results+json"}
response = requests.get(url, headers=headers, params={"query": query})
data = response.json()
emaitzak = data["results"]["bindings"]
if emaitzak:
return emaitzak[0]["item"]["value"].split("/")[-1]
else:
return None
def hartu_etiketak(qid, languages):
"""Wikidata Q-ID batetik hizkuntza ezberdinetako etiketak ateratzen ditu"""
url = f"https://www.wikidata.org/wiki/Special:EntityData/{qid}.json"
response = requests.get(url)
data = response.json()
labels = data["entities"][qid]["labels"]
return {lang: labels.get(lang, {}).get("value", "(ez dago)") for lang in languages}
sarrera_f = "txoriak.txt"
irteera_f = "txori_izenak_hizkuntzaka7.csv"
all_rows = []
try:
with open(sarrera_f, "r", encoding="utf-8") as f:
txori_izenak = [line.strip() for line in f if line.strip()]
except FileNotFoundError:
print(f"Fitxategia ez da aurkitu: {sarrera_f}")
for txori_izena in txori_izenak:
qid = hartu_wikidata_id(txori_izena)
if not qid:
print(f"Ez da aurkitu '{txori_izena}' izeneko elementurik Wikidatan.")
row = [txori_izena] + ["(ez dago)"] * len(HIZKUNTZAK)
else:
names = hartu_etiketak(qid, HIZKUNTZAK)
row = [txori_izena] + [names[lang] for lang in HIZKUNTZAK]
all_rows.append(row)
# CSV fitxategia idatzi
with open(irteera_f, mode="w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
burukoak = ["Euskaraz"] + HIZKUNTZAK
writer.writerow(burukoak)
writer.writerows(all_rows)
print(f"\n Emaitzak '{irteera_f}' fitxategian gorde dira.")
</syntaxhighlight>
=== 13.6. Proposatutako hobekuntzak ===
==== 13.6.1. Zinemako zuzendari ospetsu gehiagoren artikuluetan filmen taula gehitu ====
Python programaren kodea erabil dezakezue PAWS tresnarekin interneten bidez (https://hub-paws.wmcloud.org/), baita beste zuzendari batekin (ordeztu wikidata identifikadorea "Q56014' George Cuckorrena da, hori aldatu).2024an Oscar saria jaso duten zuzendarien artikuluetan txertatu genuen taula hori. Zuzendari gehiagorekin ere egin dezakezu zuk.
==== 13.6.1. Zinemako aktore ospetsu gehiagoren artikuluetan filmen taula gehitu ====
[[Eztabaida:Jack Nicholson|Zinema-aktoreen]] kasuan ikus erabili genuen programa hemen: https://eu.wikipedia.org/wiki/Eztabaida:Jack_Nicholson
== Erreferentziak ==
i9cebb8bvkqmkn0nlxvg4tcrk5g61j2
42035
42034
2025-07-11T09:30:39Z
81.9.242.50
/* 13.4. Wikipediarako taula bat automatikoki sortu Wikidatako datuekin */
42035
wikitext
text/x-wiki
{{lanean}}
== 13. Aplikazioa IV: Wikipedian, Wikidatan eta Wikimedia Commonsen ==
Kapitulu honetan Wikipedian, Wikidatan edota Wikimedia Commons-en aritzeko programa batzuk landuko ditugu. Datu libre eta ugari dituzten hiru zerbitzu horiek aukera handiak eskaintzen dituzte programazio-ariketak egiteko. Noski, hasi baino lehenago wikipediako kontu bat eduki beharko dugu ariketa horiek egin ahal izateko.
Programak idatzi egokitu eta korritzeko bi aukera izango ditugu:
* Norberaren konputagailuan: [[Anaconda (Python banaketa)|Anaconda]] edo [[Idle]] bezalako programazio-ingurune baten Pywikibot erabiltzea
* Internet bidez Wikimedia Cloud Services baliatzea. Wikimediaren hodeiko zerbitzuetako "notebook" batean '''[https://hub-paws.wmcloud.org/) PAWS: A Web Shell (PAWS)]''' erabiltzea
Kapitulu azken urteetan erabilitako zenbait programa erakutsiko ditugu.
=== 13.1. Pywikibot liburutegia. Bilaketak eta ordezpenak Wikipediako orrien testuan. ===
[[Wikipedia:Pywikibot|Pywikibot]] tresna bilduma da, [[MediaWiki]] guneetan lanak automatizatzeko [[Python (informatika)|Python]] liburutegia da. Hasieran Pywikibot Wikipedian lan egiteko sortu bazen ere, gaur egun [[Wikimedia Fundazioa|Wikimedia Foundationeko]] hainbat proiektutan erabiltzen da eta hainbat wikitan, besteak beste [[Wikipedia|Wikipedian]], [[Wikidata|Wikidatan]] eta [[Wikimedia Commons|Commonsen]]).
Pywikibot liburutegi horretan Python-programa ugari eskaintzen dira script moduan erabil daitezkeenak. Esaterako, horien artean oso praktikoak dira ''[[mediawikiwiki:Manual:Pywikibot/listpages.py|listpages]]'' eta ''[[mediawikiwiki:Manual:Pywikibot/replace.py|replace]]'' scriptak Wikipediako orrien testuan bilaketak eta ordezpenak egiteko erabil ditzakegunak.<ref>{{Erreferentzia|izenburua=Eskuliburua:Pywikibotmultilingual|hizkuntza=en|data=2025-06-14|url=https://www.mediawiki.org/wiki/Manual:Pywikibot/eu|aldizkaria=MediaWiki|sartze-data=2025-07-09}}</ref><ref>{{Erreferentzia|izenburua=Manual:Pywikibot/Scripts|hizkuntza=en|url=https://www.mediawiki.org/wiki/Manual:Pywikibot/Scripts|aldizkaria=MediaWiki|sartze-data=2025-07-09}}</ref>
==== 13.1.1 Bilatu karaktere-kate bat duten Wikipediako orriak ====
Adibidez, UEUko liburu bat deskargatzeko esteka ("www.ueu.eus/download/") duten Euskal Wikipediako artikuluak bilatu nahi baditugu honako komandoa erabil ditzakegu terminal batean:<syntaxhighlight lang="linux-config">pwb.py listpages -lang:eu -weblink:"www.ueu.eus/download/"</syntaxhighlight>
Eta emaitzan ikusiko dugu 72 artikulu hauetan agertzen dela horrelako esteka bat:
1 Urtar
2 Primitibo flandestar
3 An13sa
4 Jabier Agirre
5 Martinellok ez du kukurik entzuten
6 Errando
[...]
72 Goi Paleolitoa Euskal Herrian
72 read operations
Execution time:
Read operation time: 0.0 seconds
Script terminated successfully.
Beste adibide bat, [[Inguma (datu-basea)|Inguma]] datu-baseko esteka duten Euskal Wikipediako artikuluak:<syntaxhighlight lang="linux-config">
pwb.py listpages -lang:eu -weblink:"inguma.eus/"
</syntaxhighlight>Komando hori exekutatuz gero 297 artikulu hauek lortuko ditugu:<syntaxhighlight lang="linux-config">
1 Javier Torrealdea
2 Jose Maria Pitarke
3 Eugenio Arraiza
4 Javier Duoandikoetxea
5 Joseba Agirreazkuenaga
6 Karlos del Olmo
[...]
296 Patxi Angulo Martin
297 Aitzpea Leizaola
297 read operations
Execution time:
Read operation time: 0.0 seconds
Script terminated successfully.
</syntaxhighlight>
==== 13.1.2. Ordeztu karaktere-kate bat beste batekin Wikipediako hainbat orritan. ====
Ordezpen hau egin nahi dugu sistematikoki Wikipedian: "Fa maiorren]]" azaltzen den tokietan "fa maiorren]]" jarri nahi dugu letra xehe batekin hasita.
Lehenago bilatu dugu "Fa maiorren]]" karaktere-katea artikulutan azaltzen den eta ordeztekoak.txt fitxategian gorde ditugu.<syntaxhighlight lang="text">[[Fa maior]]
[[3. Sinfonia (Brahms)]]
[[5. Sinfonia (Dvořák)]]
[[8. Sinfonia (Beethoven)]]
[[Aash Al Maleek]]
[[Allah Peliharakan Sultan]]
[[Arise O Compatriots, Nigeria's Call Obey]]
[[Biladi, Biladi, Biladi]]
[[Gloria al Bravo Pueblo]]
[[Hino Nacional Brasileiro]]
[[Imnos is tin Eleftherian]]
[[Inno e Marcia Pontificale]]
[[L-Innu Malti]]
[[Le Temps des cerises]]
[[Maitia, nun zira]]
[[Mazurek Dąbrowskiego]]
[[Os Pinos]]
[[Pastorala (Beethovenen Sinfonia)]]
[[Pianoarentzako 22. sonata (Beethoven)</syntaxhighlight>
Honela egin ditugu ordezpen guzti horiek:<syntaxhighlight lang="text">@PAWS:$ pwb.py replace -lang:eu -file "Fa maiorren]]" "fa maiorren]]"
Please enter the local file name: ordeztekoak.txt
The summary message for the command line replacements will be something like: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
Press Enter to use this automatic message, or enter a description of the
changes your bot will make:
Retrieving 18 pages from wikipedia:eu.
No changes were necessary in [[eu:Fa maior]]
No changes were necessary in [[eu:3. Sinfonia (Brahms)]]
>>> 5. Sinfonia (Dvořák) <<<
@@ -23 +23 @@
- [[Kategoria:Konposizioak Fa maiorren]]
+ [[Kategoria:Konposizioak fa maiorren]]
Do you want to accept these changes? ([y]es, [N]o, [e]dit original, edit
[l]atest, open in [b]rowser, [m]ore context, [a]ll, [q]uit): y
Edit summary: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
No changes were necessary in [[eu:8. Sinfonia (Beethoven)]]
[...]
>>> Pastorala (Beethovenen Sinfonia) <<<
@@ -26 +26 @@
- [[Kategoria:Konposizioak Fa maiorren]]
+ [[Kategoria:Konposizioak fa maiorren]]
Edit summary: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
Sleeping for 8.5 seconds, 2023-04-05 11:11:21
Page [[Pastorala (Beethovenen Sinfonia)]] saved
18 read operations
13 write operations
Execution time: 136 seconds
Read operation time: 7.6 seconds
Write operation time: 10.5 seconds
Script terminated successfully.</syntaxhighlight>Wikipediako erreferentzia batean automatikoki hartu diren izen deiturak konpondu nahi ditugu Wikipedia artikulu batean. Zehazkiago esanda, adibide honetan "Joseba_Agirreazkuenaga" artikuluan "Erreferentzia|izena=Rafael Lopez|abizena=Atxurra|" karaktere-kateak beste honekin ordeztu nahi ditugu: "Erreferentzia|izena=Rafael|abizena=Lopez Atxurra|"<syntaxhighlight lang="text">#!/bin/bash
echo "Izen/deituren banaketa zuzentzen"
pwb.py replace -page:"Joseba_Agirreazkuenaga" "Erreferentzia|izena=Rafael Lopez|abizena=Atxurra|" "Erreferentzia|izena=Rafael|abizena=Lopez Atxurra|"</syntaxhighlight>
=== 13.2. Wikipediako hainbat artikulu sortzea Wikidatako hainbat itemen oinarrizko datuekin ===
2025eko udaberrian [[Wikiproiektu:Euskal Etxeak Munduan Zehar|Euskal Etxeak Munduan Zehar]] wikiproiektuaren barruan Euskal Wikipedian falta ziren 140 euskaletxeen artikuluak programa bidez automatikoki sortu genituen bakoitza oinarrizko datu batzuekin.
Aldez aurretik oinarrizko datu horiek ''euskaletxeak.eus'' webgunetik Wikidatara gehitu genituen (ikus hemen: [https://drive.google.com/drive/folders/1cqDvjqWTvxZ1GYVJ2TUp-5LwlBb4YLRB Zelan igo datu asko Wikidatara? Gidoia eta ariketak egiteko datuak])
Hainbat programa egin behar izan dira. Pixkanaka joan gara sortzen artikuluak, Gehienetan herrialde bakoitzeko programa sortu dugu eta exekuzio bat egin dugu. Argentina hiru urratsetan egon dugu: Buenos Aires hiriburuko euskaletxeak, gero Buenos Aires probintziakoak, eta bukaeran Argentinako beste probintzietakoak denak batera.
Eta hau da Buenos Aires probintziako euskal etxeen artikuluak sortu zituen programa:<syntaxhighlight lang="python3"># -*- coding: utf-8
# Buenos Aires probintziakoak
# Trenque Lauquen (Q264679)
import pywikibot
import re
from pywikibot import pagegenerators
"""
Iterate over a query given in a string using page generators.
"""
QUERY = """
# Euskal etxeak munduan zehar. Bakoitzarekin hainbat datu emanda.
# Ikus datuak hemen: https://www.euskaletxeak.eus/
SELECT DISTINCT ?item WHERE {
?item wdt:P31 wd:Q8341851; # ?itema euskal etxea da
wdt:P131 ?hiria. # ?itema ?hiria-n dago
?hiria wdt:P131* wd:Q44754; # ?hiria Buenos Aires probintzian dago
OPTIONAL {
?sitelink schema:about ?item;
schema:inLanguage "eu".
}
FILTER(!(BOUND(?sitelink)))
SERVICE wikibase:label { bd:serviceParam wikibase:language "eu,es,en". }
}
LIMIT 1000
"""
def helbidekoak (h):
print(h)
if re.search(r"\d", h) != None:
if re.match(r"(.*),? (\d*)$", h):
m = re.match(r"(.*),? (\d*)$", h)
print (m.groups())
kalea = m.group(1) # 'Con Con'
if kalea[-1] == ',':
kalea = kalea [:-1]
kale_zbkia = m.group(2) # '6955'
return kalea + " kalearen " + kale_zbkia +" zenbakian dago."
else:
return "Hau da elkartearen helbidea: " + h + '.'
else:
return "Hau da elkartearen helbidea: " + h + '.'
def sorrerakoak (item1):
claims = item1.get(u'claims') #Get all the existing claims
if u'P571' in claims[u'claims']:
sorrera_date = item1.claims['P571'][0].getTarget()
sorrera = str(sorrera_date.year) #'1981'
return sorrera + ". urtean inauguratu zen. "
else:
return ""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
i_buenos_aires = 4
for item in generator:
print (item)
h1 = item.get()
# print(h1)
#print (h1['claims'])
# Datuak hartu wikidatatik izen ofiziala, hiria, probintzia, sorrerako urtea...
hiria_qid= item.claims['P131'][0].getTarget()
hiria = hiria_qid.labels['eu']
hiria_ko = hiria+'ko' #'Barilocheko'
if hiria != 'Buenos Aires probintzia' and hiria != 'Mar del Plata':
izen_ofiziala = item.labels['eu'] #'"Centro Basko Mendi'ko Euzko Etxea"
etiketa_eu = hiria +" hiriko Euskal Etxea"
#etiketa_eu = izen_ofiziala + " (euskal etxea, Trenque Lauquen)"
probintzia_qid = item.claims['P131'][0].getTarget()
probintzia = probintzia_qid.labels['eu'] #'Río Negro'
helbidea = item.claims['P6375'][0].getTarget().text # 'Con Con 6955')
#print (helbidea)
#testu_sarrera = "'''" + izen_ofiziala + "''' [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[Buenos Aires probintzia|Buenos Aires]] probintzian. " + sorrera + ". urtean inauguratu zen. " + helbidekoak(helbidea) +"<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""
testu_sarrera = "'''" + hiria_ko +" Euskal Etxea''', ofizialki '''" + izen_ofiziala + "''', [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[Buenos Aires probintzia|Buenos Aires]] probintzian. " + sorrerakoak(item) + helbidekoak(helbidea) + "<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""#print (testu_sarrera)
#testu_sarrera = "'''" + hiria_ko +" Euskal Etxea''', ofizialki '''" + izen_ofiziala + "''', [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[" + probintzia + " probintzia|" + probintzia + "]] probintzian. " + sorrerakoak(item) + helbidekoak(helbidea) + "<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""#print (testu_sarrera)
testu_gorputza = """
== Historia ==
== Baliabideak ==
== Jarduerak ==
== Munduko Euskal Etxeen mapa ==
[[Fitxategi:Munduko_euskal_etxeak_-_Mapa_-_Wikidata_-_2025.png|erdian|thumb|380x380px|Ikus [https://w.wiki/Dkvm Munduko euskal etxeen mapa interaktiboa] (Wikidatako datuekin, 2025)]]
== Erreferentziak ==
{{erreferentzia_zerrenda|30em}}
== Ikus, gainera ==
* [[Euskal etxeak]]
* [[Euskal diaspora]]
== Kanpo estekak ==
* [https://www.euskaletxeak.eus/index.php?lang=eu_ES ''www.euskaletxeak.eus'']
{{zirriborroa}}
{{Autoritate kontrola}}
{{Euskal etxeak}}
"""
testu_kategoriak = """
[[Kategoria:Argentinako euskal etxeak]]
[[Kategoria:Buenos Aires probintzia]]""" ## + probintzia + "]]" ### + "ko probintzia]]"
# wikipediako artikuluaren kodea (testua) osatzea, bere zati nagusiak bata bestearen atzeetik jarrita
testua = "{{eraikin infotaula automatikoa}}"
testua += testu_sarrera
testua += testu_gorputza
testua += testu_kategoriak
print(etiketa_eu)
print(testu_sarrera)
print(testu_kategoriak)
#sortu "etiketa_eu" artikulua "testua" wikikodearekin
site1 = pywikibot.Site('wikipedia:eu')
page1 = pywikibot.Page(site1, etiketa_eu)
page1.text = testua
page1.save()
# wikidatako itema lotu sortu berri den wikipediako artikuluarekin
item.setSitelink(page1, summary=u'Setting (/updating?) sitelink.')
#egiteko: "izen_ofiziala" artikulua sortu? #birzuzendu[["etiketa_eu"]]
page3 = pywikibot.Page(site1, izen_ofiziala)
page3.text = "#BIRZUZENDU[[" + etiketa_eu + "]]"
page3.save()
#egiteko: "hiria_ko + Euskal Etxea" jarri wikidatako itemean goitizen moduan
new_alias = {"eu": [etiketa_eu]}
item.editAliases(new_alias, summary="Setting new aliases.")</syntaxhighlight>
=== 13.3. Wikipediako hainbat artikuluren artean etiketa-aldaketak eta birzuzenketak moldatzea ===
2025 martxoan [[Wikiproiektu:Hegaztien euskarazko izenak|Hegaztien_euskarazko_izenak]] wikiproiektuan '''hegaztien euskarazko izenak''' egoki erabiltzeko moldaketak egin genituen Wikipedian eta Wikidatan. Python programak erabili dira [[Euskal Batzorde Ornitologikoa|Euskal Batzorde Ornitologikoak]] izen horiekin egin duen eguneraketak Euskal Wikipedian integratzeko. Taula handi bat zegoen ordura arteko espezie izen onartua (ez du zertan bat etorri behar Euskal Wikipedia zeukanarekin) eta euskarazko izena agertuzen zen. Ziurtatu behar genuen euskarazko izena zela artikuluaren benetako izena, eta ez birzuzenketa bat. Lagungarri, beste hizkuntza batzuetako izenak ere eskaintzen ziren, bilaketa egin behar izatekotan. Egitekoak hauek ziren
* Espezie izenaren zutabean dauden guztiak horiz markatuta agertu behar dira, birzuzenketa bat eginez euskarazko izena duen artikulura.
* Euskarazko izenera mugitu behar diren artikulu guztiak mugitu. Artikulu horietan erreferentzia gisa txoriak.eus zein ornitho.eus gehitu daitezke. <code><nowiki>{{</nowiki>[[Txantiloi:Txoriak|txoriak]]<nowiki>}}</nowiki></code> erabil dezakezu, izen zientifikoa jarrita, lotura sortzeko. Adibidez, <code><nowiki>{{</nowiki>[[Txantiloi:Txoriak|txoriak]]<nowiki>|Pandion-haliaetus}}</nowiki></code>; [[Arrano arrantzale|Arrano arrantzalea]] artikulua horrela hasten da: "'''Arrano arrantzalea''' (''Pandion haliaetus'')...". Izenburu etzana ere kendu behar zaio artikuluari, baldin badu.
* Hegaztietako batzuk beste izen zientifiko bat duen artikulu batean ditugu, zaharkituta geratu dena. Horrelakoetan taulako izen zientifikoarekin ere sortu beharko da artikulu bat, euskarazko izena duen artikulura daraman birzuzenketa moduan.
=== 13.4. Wikipediarako taula bat automatikoki sortu Wikidatako datuekin ===
Sortu genuen Python programa bat zuzendari baten filmen izenburuak gure inguruko hainbat hizkuntzatan ere erakusteko (en, es, fr, eu, ca. gl). Python programak wikikodea sortzen du, taula bat da eta artikuluan sartu behar da gero, eskuz. Gero artikuluan filmen taula ordenatu daiteke ekoizlearen arabera edo izenburuaren arabera ere.<ref>{{Erreferentzia|izenburua=Eztabaida:George Cukor|hizkuntza=eu|data=2024-06-04|url=https://eu.wikipedia.org/w/index.php?title=Eztabaida:George_Cukor&oldid=9812871|sartze-data=2025-07-08|encyclopedia=Wikipedia, entziklopedia askea.}}</ref>
Pena da, pelikula klasiko oso gutxi ikus daitezke euskaraz. Horrelakoetan, behar den bezala, filmaren izenburua jatorrizko hizkuntzan (ingelesez gehienetan) jartzen dugu Euskal Wikipedian Baina horrela, batzuetan ez da erraza filma ezagutzea, filma frantsesez edo gaztelaniaz ikusi dugulako. Adibidez, [[George Cukor]] zuzendariaren artikuluan taula hau txertatu genuen zuzendutako filma bakoitzaren bi aktore, enpresa ekoizlea eta beste izenburuak (gaztelaniaz, frantsesez). Hau da taula horren zatitxo bat:
{| class="wikitable sortable"
!Urtea
!Filma
!Aktoreak
!Ekoizlea
!Izenburuak (es,fr)
|-
|...
|
|
|
|
|-
|1939
|[[:w:Gone with the Wind|Gone with the Wind]]
|[[:w:Clark Gable|Clark Gable]], [[w:Vivien Leigh]]
|[[w:Metro-Goldwyn-Mayer]]
|{{:w:Lang-es|Lo que el viento se llevó}} {{:w:Lang-fr|Autant en emporte le vent}}
|-
|1940
|[[Susan and God]]
|[[Joan Crawford]], [[Fredric March]]
|[[Metro-Goldwyn-Mayer]]
|{{Lang-es|Susana y Dios}} {{Lang-fr|Suzanne et ses idées}}
|-
|1940
|[[:w:The Philadelphia Story|The Philadelphia Story]]
|[[Katharine Hepburn]], [[Cary Grant]]
|[[Metro-Goldwyn-Mayer]]
|{{Lang-fr|Indiscrétions}}
|-
|...
|
|
|
|
|-
|1954
|[[It Should Happen to You]]
|[[Judy Holliday]], [[Peter Lawford]]
|[[Columbia Pictures]]
|{{Lang-es|La rubia fenómeno}} {{Lang-fr|Une femme qui s'affiche}}
|-
|1956
|[[:w:Bhowani Junction (filma)|Bhowani Junction]]
|[[:w:Ava Gardner]], [[:w:Stewart Granger]]
|[[Metro-Goldwyn-Mayer]]
|{{Lang-es|Cruce de destinos}} {{Lang-fr|La Croisée des destins}}
|-
|1956
|[[:w:Lust for Life (filma)|Lust for Life]]
|[[:w:Kirk Douglas]], [[:w:Anthony Quinn]]
|[[Metro-Goldwyn-Mayer]]
|{{Lang-es|El loco del pelo rojo}} {{Lang-fr|La Vie passionnée de Vincent van Gogh}}
|-
|...
|
|
|
|
|}
Animatzen bazara, Python programaren kodea erabil dezakezue PAWS tresnarekin interneten bidez (https://hub-paws.wmcloud.org/), baita beste zuzendari batekin (ordeztu wikidata identifikadorea "Q56014' George Cuckorrena da, hori aldatu)
Beste bertsio bat egin dut [[Eztabaida:Jack Nicholson|zinema-aktoreentzat]] (ikus https://eu.wikipedia.org/wiki/Eztabaida:Jack_Nicholson).<ref>{{Erreferentzia|izenburua=Eztabaida:Jack Nicholson (Euskal Wikipedia)|hizkuntza=eu|data=2024-06-04|url=https://eu.wikipedia.org/w/index.php?title=Eztabaida:Jack_Nicholson&oldid=9812955|sartze-data=2025-07-11|encyclopedia=Wikipedia, entziklopedia askea.}}</ref><syntaxhighlight lang="python"># -*- coding: utf-8 -*-
import pandas as pd
import pywikibot
import datetime
from pywikibot import pagegenerators
"""
Ingelesezko zuzendari baten filmekin wititaula bat sortu.
Pelikula bakoitzean datua hauek: urtea, zuzendaria eta izenburu desberdinak zenbait hizkuntzatan.
Iterate over a query given in a string using page generators.
"""
#Sortu lista bat pelikula guztien wikidata-identifikadoreekin
QUERY = """
#
SELECT ?item WHERE {
?item (wdt:P31/(wdt:P279*)) wd:Q11424;
wdt:P57 wd:Q56014.
}
LIMIT 500
"""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
#Sortu Data-frame bat (Kaljulu-orri bat) pelikula bakoitzaren datuekin
header = ['Urtea', 'Filma', 'Antzezleak', 'Ekoizlea', 'Hizkuntzak']
data = {}
data = pd.DataFrame(data, columns=header)
for item in generator:
print (item)
h1 = item.get()
#print(h1)
#print (h1['claims'])
if 'P577' in item.claims: # urtea
date = item.claims['P577'][0].getTarget()
urte = date.year
else:
urte = 0
if 'en' in item.labels:
film = item.labels['en']
else:
film = '--'
if 'P161' in item.claims: # antzezle
if len(item.claims['P161']) > 1:
antzezle1 = item.claims['P161'][0].getTarget()
antzezle2 = item.claims['P161'][1].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]], [["+antzezle2.labels['en']+"]]"
else:
antzezle1 = item.claims['P161'][0].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]]"
else:
antzezleak = "--"
if 'P272' in item.claims: # ekoizlea
ekoizle1 = item.claims['P272'][0].getTarget()
ekoizle = "|[["+ekoizle1.labels['en']+"]]"
else:
ekoizle = "--"
hizkuntzak =""
if 'es' in item.labels:
if item.labels['es'] != item.labels['en']:
hizkuntzak += '{{Lang-es|'+item.labels['es']+'}} '
if 'fr' in item.labels:
if item.labels['fr'] != item.labels['en']:
hizkuntzak += '{{Lang-fr|'+item.labels['fr']+'}} '
if 'eu' in item.labels:
if item.labels['eu'] != item.labels['en']:
hizkuntzak += '{{Lang-eu|'+item.labels['eu']+'}} '
if 'ca' in item.labels:
if item.labels['ca'] != item.labels['en']:
hizkuntzak += '{{Lang-ca|'+item.labels['ca']+'}} '
if 'gl' in item.labels:
if item.labels['gl'] != item.labels['en']:
hizkuntzak += '{{Lang-gl|'+item.labels['gl']+'}} '
new_row = {'Urtea': urte, 'Filma': film, 'Antzezleak': antzezleak, 'Ekoizlea': ekoizle, 'Hizkuntzak': hizkuntzak}
data.loc[len(data)] = new_row
#Ordenatu filmak argitaratu ziren urtearen arabera
sorted_df = data.sort_values(by=["Urtea"], ascending=True)
#Taularen wikilodea idaztea
print ("""== Zuzendutako filmen aktoreak, ekoizlea eta izenburuak ==
Taula honetan ikus daitezke filmaren bi aktore, enpresa ekoizlea eta beste izenburuak beste hizkuntza batera itzuli bada (gaztelania, frantsesa, euskara, katalana edo galiziera):
{| class="wikitable sortable"
! Urtea
! Filma
! Antzezleak
! Ekoizlea
! Hizkuntzak """)
for index, lerroa in sorted_df.iterrows():
print("|-")
print("| ", lerroa['Urtea'])
print("| [["+lerroa['Filma']+"]]")
print("| "+lerroa['Antzezleak'])
print("| "+lerroa['Ekoizlea'])
print("| "+lerroa['Hizkuntzak'])
print("|}")</syntaxhighlight>
Hona hemen zinema-zuzendarien taula hobeto ateratzeko beste bertsio bat.
Ingelesezkoaren gain gaztelaniazko eta frantsesezko izenburuak bakarrik erakusten dira (wikidatako Labels etiketan dagoena) eta pelikulen euskarazko artikuluaren esteka hobeto adierazten da ("item.getSitelink('euwiki')" eta ez "item.labels['en']" erabilita).
Programa hau hainbat artikulutan erabili zen, horien artean daude oscar sari bat jaso duten zuzendari gehienetan.
Antzeko taula bat gehitu da Oscar saria irabazi duten aktoreekin.
<syntaxhighlight lang="python">
# -*- coding: utf-8 -*-
import pandas as pd
import pywikibot
import datetime
from pywikibot import pagegenerators
"""
Ingelesezko zuzendari baten filmekin wititaula bat sortu.
Pelikula bakoitzean datu hauek: urtea, izenburua ingelesez, bi aktore, ekoizlea eta izenburua espainieraz eta frantsesez ingelesezkoa ez badira.
Iterate over a query given in a string using page generators.
"""
#Sortu lista bat pelikula guztien wikidata-identifikadoreekin
# wdt:P57 wd:Q51525 lerroan Q51525 identifikadorea Milos Forman zuzendariarena da.
#Ikus Wikidatan: https://www.wikidata.org/wiki/Q51525
# Query honetan Q51525 identifikadorea ordez beste zuzendari batena jarriz gero beste zuzendari horren taula lortuko da
QUERY = """
#
SELECT ?item WHERE {
?item (wdt:P31/(wdt:P279*)) wd:Q11424;
wdt:P57 wd:Q56014.
}
LIMIT 500
"""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
#Sortu Ddta-frame bat (Kalkulu-orri bat) pelikula bakoitzaren datuekin
header = ['Urtea', 'Filma', 'Antzezleak', 'Ekoizlea', 'Hizkuntzak']
data = {}
data = pd.DataFrame(data, columns=header)
for item in generator:
print (item)
h1 = item.get()
#print(h1)
#print (h1['claims'])
if 'P577' in item.claims: # urtea
date = item.claims['P577'][0].getTarget()
urte = date.year
else:
urte = 0
if 'en' in item.labels:
film = '[['+item.labels['en']+']]'
if 'euwiki' in h1['sitelinks']:
print ('euwiki: '+item.getSitelink('euwiki'))
if item.getSitelink('euwiki') != item.labels['en']:
film = '[['+item.getSitelink('euwiki')+'|'+item.labels['en']+']]'
"""
print ('enlabel: '+item.labels['en'])
print ('enwiki: '+item.getSitelink('enwiki'))
print ('euwiki: '+item.getSitelink('euwiki'))
"""
else:
film = '--'
if 'eu' in item.labels:
print('eu_Label:', item.labels['eu'])
if 'P161' in item.claims: # antzezle
if len(item.claims['P161']) > 1:
antzezle1 = item.claims['P161'][0].getTarget()
antzezle2 = item.claims['P161'][1].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]], [["+antzezle2.labels['en']+"]]"
else:
antzezle1 = item.claims['P161'][0].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]]"
else:
antzezleak = "--"
if 'P272' in item.claims: # ekoizlea
ekoizle1 = item.claims['P272'][0].getTarget()
ekoizle = "|[["+ekoizle1.labels['en']+"]]"
else:
ekoizle = "--"
hizkuntzak =""
if 'es' in item.labels:
if item.labels['es'] != item.labels['en']:
hizkuntzak += '{{Lang-es|'+item.labels['es']+'}} '
if 'fr' in item.labels:
if item.labels['fr'] != item.labels['en']:
hizkuntzak += '{{Lang-fr|'+item.labels['fr']+'}} '
"""
if 'eu' in item.labels:
if item.labels['eu'] != item.labels['en']:
hizkuntzak += '{{Lang-eu|'+item.labels['eu']+'}} '
if 'ca' in item.labels:
if item.labels['ca'] != item.labels['en']:
hizkuntzak += '{{Lang-ca|'+item.labels['ca']+'}} '
if 'gl' in item.labels:
if item.labels['gl'] != item.labels['en']:
hizkuntzak += '{{Lang-gl|'+item.labels['gl']+'}} '
"""
new_row = {'Urtea': urte, 'Filma': film, 'Antzezleak': antzezleak, 'Ekoizlea': ekoizle, 'Hizkuntzak': hizkuntzak}
data.loc[len(data)] = new_row
#Ordenatu filmak argitaratu ziren urtearen arabera
sorted_df = data.sort_values(by=["Urtea"], ascending=True)
#Taularen wikilodea idaztea
print ("""== Filmografia ==
Taula honetan ikus daitezke zuzendutako filma bakoitzaren bi aktore, enpresa ekoizlea eta beste izenburuak (gaztelaniaz, frantsesez):
{| class="wikitable sortable"
! Urtea
! Filma
! Aktoreak
! Ekoizlea
! Izenburuak (es,fr)""")
for index, lerroa in sorted_df.iterrows():
print("|-")
print("| ", lerroa['Urtea'])
print("| "+lerroa['Filma'])
print("| "+lerroa['Antzezleak'])
print("| "+lerroa['Ekoizlea'])
print("| "+lerroa['Hizkuntzak'])
print("|}")
print("------------------------")
</syntaxhighlight>
=== 13.5. CSV fitxategi bat sortzea Wikipediako hainbat artikuluk hainbat hizkuntzatan duten etiketarekin ===
Adibidez, ''txoriak.txt'' fitxategia hau baldin bada:<syntaxhighlight lang="text">
txantxangorri
etxe-txolarre
birigarro arrunt
gailupa eurasiar
zozo arrunt
eskinoso eurasiar
kaskabeltz handi
erregetxo bekainzuri
katagorri arrunt
mika arrunt
urubi arrunt
</syntaxhighlight>''txori_izenak_hizkuntzaka.csv'' fitxategian lortu nahi dugun emaitza hau da:
{| class="wikitable"
| align="left" |Euskaraz
| align="left" |ca
| align="left" |gl
| align="left" |es
| align="left" |fr
| align="left" |ar
| align="left" |en
|-
| align="left" |txantxangorri
| align="left" |pit-roig
| align="left" |paporrubio
| align="left" |Erithacus rubecula
| align="left" |rouge-gorge familier
| align="left" |أبو الحناء الأوروبي
| align="left" |European Robin
|-
| align="left" |etxe-txolarre
| align="left" |pardal
| align="left" |Pardal común
| align="left" |gorrión común
| align="left" |Moineau domestique
| align="left" |عصفور دوري
| align="left" |House Sparrow
|-
| align="left" |birigarro arrunt
| align="left" |tord comú
| align="left" |Tordo común
| align="left" |Turdus philomelos
| align="left" |Grive musicienne
| align="left" |سمنة مطربة
| align="left" |Song Thrush
|-
| align="left" |gailupa eurasiar
| align="left" |pinsà borroner
| align="left" |Cardeal
| align="left" |Pyrrhula pyrrhula
| align="left" |bouvreuil pivoine
| align="left" |دغناش أوراسي
| align="left" |Eurasian Bullfinch
|-
| align="left" |zozo arrunt
| align="left" |merla comuna
| align="left" |Merlo
| align="left" |Turdus merula
| align="left" |Merle noir
| align="left" |شحرور
| align="left" |Common Blackbird
|-
| align="left" |eskinoso eurasiar
| align="left" |gaig
| align="left" |Gaio
| align="left" |Garrulus glandarius
| align="left" |geai des chênes
| align="left" |قيق أوراسي
| align="left" |Eurasian Jay
|-
| align="left" |kaskabeltz handi
| align="left" |mallerenga carbonera
| align="left" |Ferreiriño abelleiro
| align="left" |Parus major
| align="left" |Mésange charbonnière
| align="left" |قرقف كبير
| align="left" |Great Tit
|-
| align="left" |erregetxo bekainzuri
| align="left" |bruel eurasiàtic
| align="left" |Estreliña riscada
| align="left" |Regulus ignicapilla
| align="left" |Roitelet à triple bandeau
| align="left" |صعو أحمر العرف
| align="left" |Common Firecrest
|-
| align="left" |katagorri arrunt
| align="left" |esquirol
| align="left" |Esquío vermello
| align="left" |Sciurus vulgaris
| align="left" |écureuil roux
| align="left" |سنجاب أحمر
| align="left" |red squirrel
|-
| align="left" |mika arrunt
| align="left" |garsa
| align="left" |Pega
| align="left" |Pica pica
| align="left" |pie bavarde
| align="left" |عقعق أوراسي
| align="left" |Eurasian magpie
|-
| align="left" |urubi arrunt
| align="left" |gamarús euroasiàtic
| align="left" |Avelaiona
| align="left" |Strix aluco
| align="left" |Chouette hulotte
| align="left" |خبل
| align="left" |Tawny Owl
|}
Python programak urrats hauek egiten ditu:
# <code>''txoriak.txt''</code> fitxategia irakurtzen du (lerro bakoitzean txori izen bat euskaraz)
# Txori bakoitzaren Wikidata Q-identifikadorea lortzen du
# Wikidatan hizkuntza hauetan bilatzen ditu izenak: eu, ca, gl, es, fr, ar eta en
# Eta ''txori_izenak_hizkuntzaka.csv'' ''izeneko'' fitxategian gordetzen ditu.
Hau da Python programa:<syntaxhighlight lang="python3">
import requests
import csv
from tabulate import tabulate
# Zein hizkuntzatan bilatu nahi dugun
HIZKUNTZAK = ["ca", "gl", "es", "fr", "ar", "en"]
def hartu_wikidata_id(txori_izena_eu):
"""Euskarazko izen batetik Wikidata Q-ID lortzen du"""
query = f"""
SELECT ?item WHERE {{
?item rdfs:label "{txori_izena_eu}"@eu.
}} LIMIT 1
"""
url = "https://query.wikidata.org/sparql"
headers = {"Accept": "application/sparql-results+json"}
response = requests.get(url, headers=headers, params={"query": query})
data = response.json()
emaitzak = data["results"]["bindings"]
if emaitzak:
return emaitzak[0]["item"]["value"].split("/")[-1]
else:
return None
def hartu_etiketak(qid, languages):
"""Wikidata Q-ID batetik hizkuntza ezberdinetako etiketak ateratzen ditu"""
url = f"https://www.wikidata.org/wiki/Special:EntityData/{qid}.json"
response = requests.get(url)
data = response.json()
labels = data["entities"][qid]["labels"]
return {lang: labels.get(lang, {}).get("value", "(ez dago)") for lang in languages}
sarrera_f = "txoriak.txt"
irteera_f = "txori_izenak_hizkuntzaka7.csv"
all_rows = []
try:
with open(sarrera_f, "r", encoding="utf-8") as f:
txori_izenak = [line.strip() for line in f if line.strip()]
except FileNotFoundError:
print(f"Fitxategia ez da aurkitu: {sarrera_f}")
for txori_izena in txori_izenak:
qid = hartu_wikidata_id(txori_izena)
if not qid:
print(f"Ez da aurkitu '{txori_izena}' izeneko elementurik Wikidatan.")
row = [txori_izena] + ["(ez dago)"] * len(HIZKUNTZAK)
else:
names = hartu_etiketak(qid, HIZKUNTZAK)
row = [txori_izena] + [names[lang] for lang in HIZKUNTZAK]
all_rows.append(row)
# CSV fitxategia idatzi
with open(irteera_f, mode="w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
burukoak = ["Euskaraz"] + HIZKUNTZAK
writer.writerow(burukoak)
writer.writerows(all_rows)
print(f"\n Emaitzak '{irteera_f}' fitxategian gorde dira.")
</syntaxhighlight>
=== 13.6. Proposatutako hobekuntzak ===
==== 13.6.1. Zinemako zuzendari ospetsu gehiagoren artikuluetan filmen taula gehitu ====
Python programaren kodea erabil dezakezue PAWS tresnarekin interneten bidez (https://hub-paws.wmcloud.org/), baita beste zuzendari batekin (ordeztu wikidata identifikadorea "Q56014' George Cuckorrena da, hori aldatu).2024an Oscar saria jaso duten zuzendarien artikuluetan txertatu genuen taula hori. Zuzendari gehiagorekin ere egin dezakezu zuk.
==== 13.6.1. Zinemako aktore ospetsu gehiagoren artikuluetan filmen taula gehitu ====
[[Eztabaida:Jack Nicholson|Zinema-aktoreen]] kasuan ikus erabili genuen programa hemen: https://eu.wikipedia.org/wiki/Eztabaida:Jack_Nicholson
== Erreferentziak ==
4pbsto4v5q19m089z8227dfzkw5i8kd
42036
42035
2025-07-11T09:46:19Z
81.9.242.50
/* 13.4. Wikipediarako taula bat automatikoki sortu Wikidatako datuekin */
42036
wikitext
text/x-wiki
{{lanean}}
== 13. Aplikazioa IV: Wikipedian, Wikidatan eta Wikimedia Commonsen ==
Kapitulu honetan Wikipedian, Wikidatan edota Wikimedia Commons-en aritzeko programa batzuk landuko ditugu. Datu libre eta ugari dituzten hiru zerbitzu horiek aukera handiak eskaintzen dituzte programazio-ariketak egiteko. Noski, hasi baino lehenago wikipediako kontu bat eduki beharko dugu ariketa horiek egin ahal izateko.
Programak idatzi egokitu eta korritzeko bi aukera izango ditugu:
* Norberaren konputagailuan: [[Anaconda (Python banaketa)|Anaconda]] edo [[Idle]] bezalako programazio-ingurune baten Pywikibot erabiltzea
* Internet bidez Wikimedia Cloud Services baliatzea. Wikimediaren hodeiko zerbitzuetako "notebook" batean '''[https://hub-paws.wmcloud.org/) PAWS: A Web Shell (PAWS)]''' erabiltzea
Kapitulu azken urteetan erabilitako zenbait programa erakutsiko ditugu.
=== 13.1. Pywikibot liburutegia. Bilaketak eta ordezpenak Wikipediako orrien testuan. ===
[[Wikipedia:Pywikibot|Pywikibot]] tresna bilduma da, [[MediaWiki]] guneetan lanak automatizatzeko [[Python (informatika)|Python]] liburutegia da. Hasieran Pywikibot Wikipedian lan egiteko sortu bazen ere, gaur egun [[Wikimedia Fundazioa|Wikimedia Foundationeko]] hainbat proiektutan erabiltzen da eta hainbat wikitan, besteak beste [[Wikipedia|Wikipedian]], [[Wikidata|Wikidatan]] eta [[Wikimedia Commons|Commonsen]]).
Pywikibot liburutegi horretan Python-programa ugari eskaintzen dira script moduan erabil daitezkeenak. Esaterako, horien artean oso praktikoak dira ''[[mediawikiwiki:Manual:Pywikibot/listpages.py|listpages]]'' eta ''[[mediawikiwiki:Manual:Pywikibot/replace.py|replace]]'' scriptak Wikipediako orrien testuan bilaketak eta ordezpenak egiteko erabil ditzakegunak.<ref>{{Erreferentzia|izenburua=Eskuliburua:Pywikibotmultilingual|hizkuntza=en|data=2025-06-14|url=https://www.mediawiki.org/wiki/Manual:Pywikibot/eu|aldizkaria=MediaWiki|sartze-data=2025-07-09}}</ref><ref>{{Erreferentzia|izenburua=Manual:Pywikibot/Scripts|hizkuntza=en|url=https://www.mediawiki.org/wiki/Manual:Pywikibot/Scripts|aldizkaria=MediaWiki|sartze-data=2025-07-09}}</ref>
==== 13.1.1 Bilatu karaktere-kate bat duten Wikipediako orriak ====
Adibidez, UEUko liburu bat deskargatzeko esteka ("www.ueu.eus/download/") duten Euskal Wikipediako artikuluak bilatu nahi baditugu honako komandoa erabil ditzakegu terminal batean:<syntaxhighlight lang="linux-config">pwb.py listpages -lang:eu -weblink:"www.ueu.eus/download/"</syntaxhighlight>
Eta emaitzan ikusiko dugu 72 artikulu hauetan agertzen dela horrelako esteka bat:
1 Urtar
2 Primitibo flandestar
3 An13sa
4 Jabier Agirre
5 Martinellok ez du kukurik entzuten
6 Errando
[...]
72 Goi Paleolitoa Euskal Herrian
72 read operations
Execution time:
Read operation time: 0.0 seconds
Script terminated successfully.
Beste adibide bat, [[Inguma (datu-basea)|Inguma]] datu-baseko esteka duten Euskal Wikipediako artikuluak:<syntaxhighlight lang="linux-config">
pwb.py listpages -lang:eu -weblink:"inguma.eus/"
</syntaxhighlight>Komando hori exekutatuz gero 297 artikulu hauek lortuko ditugu:<syntaxhighlight lang="linux-config">
1 Javier Torrealdea
2 Jose Maria Pitarke
3 Eugenio Arraiza
4 Javier Duoandikoetxea
5 Joseba Agirreazkuenaga
6 Karlos del Olmo
[...]
296 Patxi Angulo Martin
297 Aitzpea Leizaola
297 read operations
Execution time:
Read operation time: 0.0 seconds
Script terminated successfully.
</syntaxhighlight>
==== 13.1.2. Ordeztu karaktere-kate bat beste batekin Wikipediako hainbat orritan. ====
Ordezpen hau egin nahi dugu sistematikoki Wikipedian: "Fa maiorren]]" azaltzen den tokietan "fa maiorren]]" jarri nahi dugu letra xehe batekin hasita.
Lehenago bilatu dugu "Fa maiorren]]" karaktere-katea artikulutan azaltzen den eta ordeztekoak.txt fitxategian gorde ditugu.<syntaxhighlight lang="text">[[Fa maior]]
[[3. Sinfonia (Brahms)]]
[[5. Sinfonia (Dvořák)]]
[[8. Sinfonia (Beethoven)]]
[[Aash Al Maleek]]
[[Allah Peliharakan Sultan]]
[[Arise O Compatriots, Nigeria's Call Obey]]
[[Biladi, Biladi, Biladi]]
[[Gloria al Bravo Pueblo]]
[[Hino Nacional Brasileiro]]
[[Imnos is tin Eleftherian]]
[[Inno e Marcia Pontificale]]
[[L-Innu Malti]]
[[Le Temps des cerises]]
[[Maitia, nun zira]]
[[Mazurek Dąbrowskiego]]
[[Os Pinos]]
[[Pastorala (Beethovenen Sinfonia)]]
[[Pianoarentzako 22. sonata (Beethoven)</syntaxhighlight>
Honela egin ditugu ordezpen guzti horiek:<syntaxhighlight lang="text">@PAWS:$ pwb.py replace -lang:eu -file "Fa maiorren]]" "fa maiorren]]"
Please enter the local file name: ordeztekoak.txt
The summary message for the command line replacements will be something like: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
Press Enter to use this automatic message, or enter a description of the
changes your bot will make:
Retrieving 18 pages from wikipedia:eu.
No changes were necessary in [[eu:Fa maior]]
No changes were necessary in [[eu:3. Sinfonia (Brahms)]]
>>> 5. Sinfonia (Dvořák) <<<
@@ -23 +23 @@
- [[Kategoria:Konposizioak Fa maiorren]]
+ [[Kategoria:Konposizioak fa maiorren]]
Do you want to accept these changes? ([y]es, [N]o, [e]dit original, edit
[l]atest, open in [b]rowser, [m]ore context, [a]ll, [q]uit): y
Edit summary: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
No changes were necessary in [[eu:8. Sinfonia (Beethoven)]]
[...]
>>> Pastorala (Beethovenen Sinfonia) <<<
@@ -26 +26 @@
- [[Kategoria:Konposizioak Fa maiorren]]
+ [[Kategoria:Konposizioak fa maiorren]]
Edit summary: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
Sleeping for 8.5 seconds, 2023-04-05 11:11:21
Page [[Pastorala (Beethovenen Sinfonia)]] saved
18 read operations
13 write operations
Execution time: 136 seconds
Read operation time: 7.6 seconds
Write operation time: 10.5 seconds
Script terminated successfully.</syntaxhighlight>Wikipediako erreferentzia batean automatikoki hartu diren izen deiturak konpondu nahi ditugu Wikipedia artikulu batean. Zehazkiago esanda, adibide honetan "Joseba_Agirreazkuenaga" artikuluan "Erreferentzia|izena=Rafael Lopez|abizena=Atxurra|" karaktere-kateak beste honekin ordeztu nahi ditugu: "Erreferentzia|izena=Rafael|abizena=Lopez Atxurra|"<syntaxhighlight lang="text">#!/bin/bash
echo "Izen/deituren banaketa zuzentzen"
pwb.py replace -page:"Joseba_Agirreazkuenaga" "Erreferentzia|izena=Rafael Lopez|abizena=Atxurra|" "Erreferentzia|izena=Rafael|abizena=Lopez Atxurra|"</syntaxhighlight>
=== 13.2. Wikipediako hainbat artikulu sortzea Wikidatako hainbat itemen oinarrizko datuekin ===
2025eko udaberrian [[Wikiproiektu:Euskal Etxeak Munduan Zehar|Euskal Etxeak Munduan Zehar]] wikiproiektuaren barruan Euskal Wikipedian falta ziren 140 euskaletxeen artikuluak programa bidez automatikoki sortu genituen bakoitza oinarrizko datu batzuekin.
Aldez aurretik oinarrizko datu horiek ''euskaletxeak.eus'' webgunetik Wikidatara gehitu genituen (ikus hemen: [https://drive.google.com/drive/folders/1cqDvjqWTvxZ1GYVJ2TUp-5LwlBb4YLRB Zelan igo datu asko Wikidatara? Gidoia eta ariketak egiteko datuak])
Hainbat programa egin behar izan dira. Pixkanaka joan gara sortzen artikuluak, Gehienetan herrialde bakoitzeko programa sortu dugu eta exekuzio bat egin dugu. Argentina hiru urratsetan egon dugu: Buenos Aires hiriburuko euskaletxeak, gero Buenos Aires probintziakoak, eta bukaeran Argentinako beste probintzietakoak denak batera.
Eta hau da Buenos Aires probintziako euskal etxeen artikuluak sortu zituen programa:<syntaxhighlight lang="python3"># -*- coding: utf-8
# Buenos Aires probintziakoak
# Trenque Lauquen (Q264679)
import pywikibot
import re
from pywikibot import pagegenerators
"""
Iterate over a query given in a string using page generators.
"""
QUERY = """
# Euskal etxeak munduan zehar. Bakoitzarekin hainbat datu emanda.
# Ikus datuak hemen: https://www.euskaletxeak.eus/
SELECT DISTINCT ?item WHERE {
?item wdt:P31 wd:Q8341851; # ?itema euskal etxea da
wdt:P131 ?hiria. # ?itema ?hiria-n dago
?hiria wdt:P131* wd:Q44754; # ?hiria Buenos Aires probintzian dago
OPTIONAL {
?sitelink schema:about ?item;
schema:inLanguage "eu".
}
FILTER(!(BOUND(?sitelink)))
SERVICE wikibase:label { bd:serviceParam wikibase:language "eu,es,en". }
}
LIMIT 1000
"""
def helbidekoak (h):
print(h)
if re.search(r"\d", h) != None:
if re.match(r"(.*),? (\d*)$", h):
m = re.match(r"(.*),? (\d*)$", h)
print (m.groups())
kalea = m.group(1) # 'Con Con'
if kalea[-1] == ',':
kalea = kalea [:-1]
kale_zbkia = m.group(2) # '6955'
return kalea + " kalearen " + kale_zbkia +" zenbakian dago."
else:
return "Hau da elkartearen helbidea: " + h + '.'
else:
return "Hau da elkartearen helbidea: " + h + '.'
def sorrerakoak (item1):
claims = item1.get(u'claims') #Get all the existing claims
if u'P571' in claims[u'claims']:
sorrera_date = item1.claims['P571'][0].getTarget()
sorrera = str(sorrera_date.year) #'1981'
return sorrera + ". urtean inauguratu zen. "
else:
return ""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
i_buenos_aires = 4
for item in generator:
print (item)
h1 = item.get()
# print(h1)
#print (h1['claims'])
# Datuak hartu wikidatatik izen ofiziala, hiria, probintzia, sorrerako urtea...
hiria_qid= item.claims['P131'][0].getTarget()
hiria = hiria_qid.labels['eu']
hiria_ko = hiria+'ko' #'Barilocheko'
if hiria != 'Buenos Aires probintzia' and hiria != 'Mar del Plata':
izen_ofiziala = item.labels['eu'] #'"Centro Basko Mendi'ko Euzko Etxea"
etiketa_eu = hiria +" hiriko Euskal Etxea"
#etiketa_eu = izen_ofiziala + " (euskal etxea, Trenque Lauquen)"
probintzia_qid = item.claims['P131'][0].getTarget()
probintzia = probintzia_qid.labels['eu'] #'Río Negro'
helbidea = item.claims['P6375'][0].getTarget().text # 'Con Con 6955')
#print (helbidea)
#testu_sarrera = "'''" + izen_ofiziala + "''' [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[Buenos Aires probintzia|Buenos Aires]] probintzian. " + sorrera + ". urtean inauguratu zen. " + helbidekoak(helbidea) +"<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""
testu_sarrera = "'''" + hiria_ko +" Euskal Etxea''', ofizialki '''" + izen_ofiziala + "''', [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[Buenos Aires probintzia|Buenos Aires]] probintzian. " + sorrerakoak(item) + helbidekoak(helbidea) + "<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""#print (testu_sarrera)
#testu_sarrera = "'''" + hiria_ko +" Euskal Etxea''', ofizialki '''" + izen_ofiziala + "''', [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[" + probintzia + " probintzia|" + probintzia + "]] probintzian. " + sorrerakoak(item) + helbidekoak(helbidea) + "<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""#print (testu_sarrera)
testu_gorputza = """
== Historia ==
== Baliabideak ==
== Jarduerak ==
== Munduko Euskal Etxeen mapa ==
[[Fitxategi:Munduko_euskal_etxeak_-_Mapa_-_Wikidata_-_2025.png|erdian|thumb|380x380px|Ikus [https://w.wiki/Dkvm Munduko euskal etxeen mapa interaktiboa] (Wikidatako datuekin, 2025)]]
== Erreferentziak ==
{{erreferentzia_zerrenda|30em}}
== Ikus, gainera ==
* [[Euskal etxeak]]
* [[Euskal diaspora]]
== Kanpo estekak ==
* [https://www.euskaletxeak.eus/index.php?lang=eu_ES ''www.euskaletxeak.eus'']
{{zirriborroa}}
{{Autoritate kontrola}}
{{Euskal etxeak}}
"""
testu_kategoriak = """
[[Kategoria:Argentinako euskal etxeak]]
[[Kategoria:Buenos Aires probintzia]]""" ## + probintzia + "]]" ### + "ko probintzia]]"
# wikipediako artikuluaren kodea (testua) osatzea, bere zati nagusiak bata bestearen atzeetik jarrita
testua = "{{eraikin infotaula automatikoa}}"
testua += testu_sarrera
testua += testu_gorputza
testua += testu_kategoriak
print(etiketa_eu)
print(testu_sarrera)
print(testu_kategoriak)
#sortu "etiketa_eu" artikulua "testua" wikikodearekin
site1 = pywikibot.Site('wikipedia:eu')
page1 = pywikibot.Page(site1, etiketa_eu)
page1.text = testua
page1.save()
# wikidatako itema lotu sortu berri den wikipediako artikuluarekin
item.setSitelink(page1, summary=u'Setting (/updating?) sitelink.')
#egiteko: "izen_ofiziala" artikulua sortu? #birzuzendu[["etiketa_eu"]]
page3 = pywikibot.Page(site1, izen_ofiziala)
page3.text = "#BIRZUZENDU[[" + etiketa_eu + "]]"
page3.save()
#egiteko: "hiria_ko + Euskal Etxea" jarri wikidatako itemean goitizen moduan
new_alias = {"eu": [etiketa_eu]}
item.editAliases(new_alias, summary="Setting new aliases.")</syntaxhighlight>
=== 13.3. Wikipediako hainbat artikuluren artean etiketa-aldaketak eta birzuzenketak moldatzea ===
2025 martxoan [[Wikiproiektu:Hegaztien euskarazko izenak|Hegaztien_euskarazko_izenak]] wikiproiektuan '''hegaztien euskarazko izenak''' egoki erabiltzeko moldaketak egin genituen Wikipedian eta Wikidatan. Python programak erabili dira [[Euskal Batzorde Ornitologikoa|Euskal Batzorde Ornitologikoak]] izen horiekin egin duen eguneraketak Euskal Wikipedian integratzeko. Taula handi bat zegoen ordura arteko espezie izen onartua (ez du zertan bat etorri behar Euskal Wikipedia zeukanarekin) eta euskarazko izena agertuzen zen. Ziurtatu behar genuen euskarazko izena zela artikuluaren benetako izena, eta ez birzuzenketa bat. Lagungarri, beste hizkuntza batzuetako izenak ere eskaintzen ziren, bilaketa egin behar izatekotan. Egitekoak hauek ziren
* Espezie izenaren zutabean dauden guztiak horiz markatuta agertu behar dira, birzuzenketa bat eginez euskarazko izena duen artikulura.
* Euskarazko izenera mugitu behar diren artikulu guztiak mugitu. Artikulu horietan erreferentzia gisa txoriak.eus zein ornitho.eus gehitu daitezke. <code><nowiki>{{</nowiki>[[Txantiloi:Txoriak|txoriak]]<nowiki>}}</nowiki></code> erabil dezakezu, izen zientifikoa jarrita, lotura sortzeko. Adibidez, <code><nowiki>{{</nowiki>[[Txantiloi:Txoriak|txoriak]]<nowiki>|Pandion-haliaetus}}</nowiki></code>; [[Arrano arrantzale|Arrano arrantzalea]] artikulua horrela hasten da: "'''Arrano arrantzalea''' (''Pandion haliaetus'')...". Izenburu etzana ere kendu behar zaio artikuluari, baldin badu.
* Hegaztietako batzuk beste izen zientifiko bat duen artikulu batean ditugu, zaharkituta geratu dena. Horrelakoetan taulako izen zientifikoarekin ere sortu beharko da artikulu bat, euskarazko izena duen artikulura daraman birzuzenketa moduan.
=== 13.4. Wikipediarako taula bat automatikoki sortu Wikidatako datuekin ===
Sortu genuen Python programa bat zuzendari baten filmen izenburuak gure inguruko hainbat hizkuntzatan ere erakusteko (en, es, fr, eu, ca. gl). Python programak wikikodea sortzen du, taula bat da eta artikuluan sartu behar da gero, eskuz. Gero artikuluan filmen taula ordenatu daiteke ekoizlearen arabera edo izenburuaren arabera ere.<ref>{{Erreferentzia|izenburua=Eztabaida:George Cukor|hizkuntza=eu|data=2024-06-04|url=https://eu.wikipedia.org/w/index.php?title=Eztabaida:George_Cukor&oldid=9812871|sartze-data=2025-07-08|encyclopedia=Wikipedia, entziklopedia askea.}}</ref>
Pena da, pelikula klasiko oso gutxi ikus daitezke euskaraz. Horrelakoetan, behar den bezala, filmaren izenburua jatorrizko hizkuntzan (ingelesez gehienetan) jartzen dugu Euskal Wikipedian Baina horrela, batzuetan ez da erraza filma ezagutzea, filma frantsesez edo gaztelaniaz ikusi dugulako. Adibidez, [[George Cukor]] zuzendariaren artikuluan taula hau txertatu genuen zuzendutako filma bakoitzaren bi aktore, enpresa ekoizlea eta beste izenburuak (gaztelaniaz, frantsesez). Hau da taula horren zatitxo bat:
{| class="wikitable sortable"
!Urtea
!Filma
!Aktoreak
!Ekoizlea
!Izenburuak (es,fr)
|-
|...
|
|
|
|
|-
|1939
|[[:w:Gone with the Wind|Gone with the Wind]]
|[[:w:Clark Gable|Clark Gable]], [[w:Vivien Leigh|Vivien Leigh]]
|[[:w:Metro-Goldwyn-Mayer|Metro-Goldwyn-Mayer]]
|Gaztelaniaz: Lo que el viento se llevó; Frantsesez:Autant en emporte le vent}}
|-
|1940
|[[Susan and God]]
|[[Joan Crawford]], [[:w:Fredric March|Fredric March]]
|[[Metro-Goldwyn-Mayer]]
|Gaztelaniaz:Susana y Dios; Frantsesez:Suzanne et ses idées}}
|-
|1940
|[[:w:The Philadelphia Story|The Philadelphia Story|]]
|[[:w:Katharine HepburnKatharine Hepburn]], [[:w:Cary Grant|Cary Grant]]
|[[Metro-Goldwyn-Mayer]]
| Frantsesez:Indiscrétions}}
|-
|...
|
|
|
|
|-
|1954
|[[It Should Happen to You]]
|[[:w:Judy Holliday]], [[:w:Peter Lawford|Judy Holliday]], [[:w:Peter Lawford]]
|[[:w:Columbia Pictures|Columbia Pictures]]
|Gaztelaniaz:La rubia fenómeno; Frantsesez:Une femme qui s'affiche}}
|-
|1956
|[[:w:Bhowani Junction (filma)|Bhowani Junction]]
|[[:w:Ava Gardner|Ava Gardner]], [[:w:Stewart|Stewart Granger]]
|[[Metro-Goldwyn-Mayer]]
|Gaztelaniaz:Cruce de destinos; Frantsesez:La Croisée des destins}}
|-
|1956
|[[:w:Lust for Life (filma)|Lust for Life]]
|[[:w:Kirk Douglas|Kirk Douglas]], [[:w:Anthony Quinn|Anthony Quinn]]
|[[Metro-Goldwyn-Mayer]]
|Gaztelaniaz:El loco del pelo rojo; Frantsesez:La Vie passionnée de Vincent van Gogh}}
|-
|...
|
|
|
|
|}
Animatzen bazara, Python programaren kodea erabil dezakezue PAWS tresnarekin interneten bidez (https://hub-paws.wmcloud.org/), baita beste zuzendari batekin (ordeztu wikidata identifikadorea "Q56014' George Cuckorrena da, hori aldatu)
Beste bertsio bat egin dut [[Eztabaida:Jack Nicholson|zinema-aktoreentzat]] (ikus https://eu.wikipedia.org/wiki/Eztabaida:Jack_Nicholson).<ref>{{Erreferentzia|izenburua=Eztabaida:Jack Nicholson (Euskal Wikipedia)|hizkuntza=eu|data=2024-06-04|url=https://eu.wikipedia.org/w/index.php?title=Eztabaida:Jack_Nicholson&oldid=9812955|sartze-data=2025-07-11|encyclopedia=Wikipedia, entziklopedia askea.}}</ref><syntaxhighlight lang="python"># -*- coding: utf-8 -*-
import pandas as pd
import pywikibot
import datetime
from pywikibot import pagegenerators
"""
Ingelesezko zuzendari baten filmekin wititaula bat sortu.
Pelikula bakoitzean datua hauek: urtea, zuzendaria eta izenburu desberdinak zenbait hizkuntzatan.
Iterate over a query given in a string using page generators.
"""
#Sortu lista bat pelikula guztien wikidata-identifikadoreekin
QUERY = """
#
SELECT ?item WHERE {
?item (wdt:P31/(wdt:P279*)) wd:Q11424;
wdt:P57 wd:Q56014.
}
LIMIT 500
"""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
#Sortu Data-frame bat (Kaljulu-orri bat) pelikula bakoitzaren datuekin
header = ['Urtea', 'Filma', 'Antzezleak', 'Ekoizlea', 'Hizkuntzak']
data = {}
data = pd.DataFrame(data, columns=header)
for item in generator:
print (item)
h1 = item.get()
#print(h1)
#print (h1['claims'])
if 'P577' in item.claims: # urtea
date = item.claims['P577'][0].getTarget()
urte = date.year
else:
urte = 0
if 'en' in item.labels:
film = item.labels['en']
else:
film = '--'
if 'P161' in item.claims: # antzezle
if len(item.claims['P161']) > 1:
antzezle1 = item.claims['P161'][0].getTarget()
antzezle2 = item.claims['P161'][1].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]], [["+antzezle2.labels['en']+"]]"
else:
antzezle1 = item.claims['P161'][0].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]]"
else:
antzezleak = "--"
if 'P272' in item.claims: # ekoizlea
ekoizle1 = item.claims['P272'][0].getTarget()
ekoizle = "|[["+ekoizle1.labels['en']+"]]"
else:
ekoizle = "--"
hizkuntzak =""
if 'es' in item.labels:
if item.labels['es'] != item.labels['en']:
hizkuntzak += '{{Lang-es|'+item.labels['es']+'}} '
if 'fr' in item.labels:
if item.labels['fr'] != item.labels['en']:
hizkuntzak += '{{Lang-fr|'+item.labels['fr']+'}} '
if 'eu' in item.labels:
if item.labels['eu'] != item.labels['en']:
hizkuntzak += '{{Lang-eu|'+item.labels['eu']+'}} '
if 'ca' in item.labels:
if item.labels['ca'] != item.labels['en']:
hizkuntzak += '{{Lang-ca|'+item.labels['ca']+'}} '
if 'gl' in item.labels:
if item.labels['gl'] != item.labels['en']:
hizkuntzak += '{{Lang-gl|'+item.labels['gl']+'}} '
new_row = {'Urtea': urte, 'Filma': film, 'Antzezleak': antzezleak, 'Ekoizlea': ekoizle, 'Hizkuntzak': hizkuntzak}
data.loc[len(data)] = new_row
#Ordenatu filmak argitaratu ziren urtearen arabera
sorted_df = data.sort_values(by=["Urtea"], ascending=True)
#Taularen wikilodea idaztea
print ("""== Zuzendutako filmen aktoreak, ekoizlea eta izenburuak ==
Taula honetan ikus daitezke filmaren bi aktore, enpresa ekoizlea eta beste izenburuak beste hizkuntza batera itzuli bada (gaztelania, frantsesa, euskara, katalana edo galiziera):
{| class="wikitable sortable"
! Urtea
! Filma
! Antzezleak
! Ekoizlea
! Hizkuntzak """)
for index, lerroa in sorted_df.iterrows():
print("|-")
print("| ", lerroa['Urtea'])
print("| [["+lerroa['Filma']+"]]")
print("| "+lerroa['Antzezleak'])
print("| "+lerroa['Ekoizlea'])
print("| "+lerroa['Hizkuntzak'])
print("|}")</syntaxhighlight>
Hona hemen zinema-zuzendarien taula hobeto ateratzeko beste bertsio bat.
Ingelesezkoaren gain gaztelaniazko eta frantsesezko izenburuak bakarrik erakusten dira (wikidatako Labels etiketan dagoena) eta pelikulen euskarazko artikuluaren esteka hobeto adierazten da ("item.getSitelink('euwiki')" eta ez "item.labels['en']" erabilita).
Programa hau hainbat artikulutan erabili zen, horien artean daude oscar sari bat jaso duten zuzendari gehienetan.
Antzeko taula bat gehitu da Oscar saria irabazi duten aktoreekin.
<syntaxhighlight lang="python">
# -*- coding: utf-8 -*-
import pandas as pd
import pywikibot
import datetime
from pywikibot import pagegenerators
"""
Ingelesezko zuzendari baten filmekin wititaula bat sortu.
Pelikula bakoitzean datu hauek: urtea, izenburua ingelesez, bi aktore, ekoizlea eta izenburua espainieraz eta frantsesez ingelesezkoa ez badira.
Iterate over a query given in a string using page generators.
"""
#Sortu lista bat pelikula guztien wikidata-identifikadoreekin
# wdt:P57 wd:Q51525 lerroan Q51525 identifikadorea Milos Forman zuzendariarena da.
#Ikus Wikidatan: https://www.wikidata.org/wiki/Q51525
# Query honetan Q51525 identifikadorea ordez beste zuzendari batena jarriz gero beste zuzendari horren taula lortuko da
QUERY = """
#
SELECT ?item WHERE {
?item (wdt:P31/(wdt:P279*)) wd:Q11424;
wdt:P57 wd:Q56014.
}
LIMIT 500
"""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
#Sortu Ddta-frame bat (Kalkulu-orri bat) pelikula bakoitzaren datuekin
header = ['Urtea', 'Filma', 'Antzezleak', 'Ekoizlea', 'Hizkuntzak']
data = {}
data = pd.DataFrame(data, columns=header)
for item in generator:
print (item)
h1 = item.get()
#print(h1)
#print (h1['claims'])
if 'P577' in item.claims: # urtea
date = item.claims['P577'][0].getTarget()
urte = date.year
else:
urte = 0
if 'en' in item.labels:
film = '[['+item.labels['en']+']]'
if 'euwiki' in h1['sitelinks']:
print ('euwiki: '+item.getSitelink('euwiki'))
if item.getSitelink('euwiki') != item.labels['en']:
film = '[['+item.getSitelink('euwiki')+'|'+item.labels['en']+']]'
"""
print ('enlabel: '+item.labels['en'])
print ('enwiki: '+item.getSitelink('enwiki'))
print ('euwiki: '+item.getSitelink('euwiki'))
"""
else:
film = '--'
if 'eu' in item.labels:
print('eu_Label:', item.labels['eu'])
if 'P161' in item.claims: # antzezle
if len(item.claims['P161']) > 1:
antzezle1 = item.claims['P161'][0].getTarget()
antzezle2 = item.claims['P161'][1].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]], [["+antzezle2.labels['en']+"]]"
else:
antzezle1 = item.claims['P161'][0].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]]"
else:
antzezleak = "--"
if 'P272' in item.claims: # ekoizlea
ekoizle1 = item.claims['P272'][0].getTarget()
ekoizle = "|[["+ekoizle1.labels['en']+"]]"
else:
ekoizle = "--"
hizkuntzak =""
if 'es' in item.labels:
if item.labels['es'] != item.labels['en']:
hizkuntzak += '{{Lang-es|'+item.labels['es']+'}} '
if 'fr' in item.labels:
if item.labels['fr'] != item.labels['en']:
hizkuntzak += '{{Lang-fr|'+item.labels['fr']+'}} '
"""
if 'eu' in item.labels:
if item.labels['eu'] != item.labels['en']:
hizkuntzak += '{{Lang-eu|'+item.labels['eu']+'}} '
if 'ca' in item.labels:
if item.labels['ca'] != item.labels['en']:
hizkuntzak += '{{Lang-ca|'+item.labels['ca']+'}} '
if 'gl' in item.labels:
if item.labels['gl'] != item.labels['en']:
hizkuntzak += '{{Lang-gl|'+item.labels['gl']+'}} '
"""
new_row = {'Urtea': urte, 'Filma': film, 'Antzezleak': antzezleak, 'Ekoizlea': ekoizle, 'Hizkuntzak': hizkuntzak}
data.loc[len(data)] = new_row
#Ordenatu filmak argitaratu ziren urtearen arabera
sorted_df = data.sort_values(by=["Urtea"], ascending=True)
#Taularen wikilodea idaztea
print ("""== Filmografia ==
Taula honetan ikus daitezke zuzendutako filma bakoitzaren bi aktore, enpresa ekoizlea eta beste izenburuak (gaztelaniaz, frantsesez):
{| class="wikitable sortable"
! Urtea
! Filma
! Aktoreak
! Ekoizlea
! Izenburuak (es,fr)""")
for index, lerroa in sorted_df.iterrows():
print("|-")
print("| ", lerroa['Urtea'])
print("| "+lerroa['Filma'])
print("| "+lerroa['Antzezleak'])
print("| "+lerroa['Ekoizlea'])
print("| "+lerroa['Hizkuntzak'])
print("|}")
print("------------------------")
</syntaxhighlight>
=== 13.5. CSV fitxategi bat sortzea Wikipediako hainbat artikuluk hainbat hizkuntzatan duten etiketarekin ===
Adibidez, ''txoriak.txt'' fitxategia hau baldin bada:<syntaxhighlight lang="text">
txantxangorri
etxe-txolarre
birigarro arrunt
gailupa eurasiar
zozo arrunt
eskinoso eurasiar
kaskabeltz handi
erregetxo bekainzuri
katagorri arrunt
mika arrunt
urubi arrunt
</syntaxhighlight>''txori_izenak_hizkuntzaka.csv'' fitxategian lortu nahi dugun emaitza hau da:
{| class="wikitable"
| align="left" |Euskaraz
| align="left" |ca
| align="left" |gl
| align="left" |es
| align="left" |fr
| align="left" |ar
| align="left" |en
|-
| align="left" |txantxangorri
| align="left" |pit-roig
| align="left" |paporrubio
| align="left" |Erithacus rubecula
| align="left" |rouge-gorge familier
| align="left" |أبو الحناء الأوروبي
| align="left" |European Robin
|-
| align="left" |etxe-txolarre
| align="left" |pardal
| align="left" |Pardal común
| align="left" |gorrión común
| align="left" |Moineau domestique
| align="left" |عصفور دوري
| align="left" |House Sparrow
|-
| align="left" |birigarro arrunt
| align="left" |tord comú
| align="left" |Tordo común
| align="left" |Turdus philomelos
| align="left" |Grive musicienne
| align="left" |سمنة مطربة
| align="left" |Song Thrush
|-
| align="left" |gailupa eurasiar
| align="left" |pinsà borroner
| align="left" |Cardeal
| align="left" |Pyrrhula pyrrhula
| align="left" |bouvreuil pivoine
| align="left" |دغناش أوراسي
| align="left" |Eurasian Bullfinch
|-
| align="left" |zozo arrunt
| align="left" |merla comuna
| align="left" |Merlo
| align="left" |Turdus merula
| align="left" |Merle noir
| align="left" |شحرور
| align="left" |Common Blackbird
|-
| align="left" |eskinoso eurasiar
| align="left" |gaig
| align="left" |Gaio
| align="left" |Garrulus glandarius
| align="left" |geai des chênes
| align="left" |قيق أوراسي
| align="left" |Eurasian Jay
|-
| align="left" |kaskabeltz handi
| align="left" |mallerenga carbonera
| align="left" |Ferreiriño abelleiro
| align="left" |Parus major
| align="left" |Mésange charbonnière
| align="left" |قرقف كبير
| align="left" |Great Tit
|-
| align="left" |erregetxo bekainzuri
| align="left" |bruel eurasiàtic
| align="left" |Estreliña riscada
| align="left" |Regulus ignicapilla
| align="left" |Roitelet à triple bandeau
| align="left" |صعو أحمر العرف
| align="left" |Common Firecrest
|-
| align="left" |katagorri arrunt
| align="left" |esquirol
| align="left" |Esquío vermello
| align="left" |Sciurus vulgaris
| align="left" |écureuil roux
| align="left" |سنجاب أحمر
| align="left" |red squirrel
|-
| align="left" |mika arrunt
| align="left" |garsa
| align="left" |Pega
| align="left" |Pica pica
| align="left" |pie bavarde
| align="left" |عقعق أوراسي
| align="left" |Eurasian magpie
|-
| align="left" |urubi arrunt
| align="left" |gamarús euroasiàtic
| align="left" |Avelaiona
| align="left" |Strix aluco
| align="left" |Chouette hulotte
| align="left" |خبل
| align="left" |Tawny Owl
|}
Python programak urrats hauek egiten ditu:
# <code>''txoriak.txt''</code> fitxategia irakurtzen du (lerro bakoitzean txori izen bat euskaraz)
# Txori bakoitzaren Wikidata Q-identifikadorea lortzen du
# Wikidatan hizkuntza hauetan bilatzen ditu izenak: eu, ca, gl, es, fr, ar eta en
# Eta ''txori_izenak_hizkuntzaka.csv'' ''izeneko'' fitxategian gordetzen ditu.
Hau da Python programa:<syntaxhighlight lang="python3">
import requests
import csv
from tabulate import tabulate
# Zein hizkuntzatan bilatu nahi dugun
HIZKUNTZAK = ["ca", "gl", "es", "fr", "ar", "en"]
def hartu_wikidata_id(txori_izena_eu):
"""Euskarazko izen batetik Wikidata Q-ID lortzen du"""
query = f"""
SELECT ?item WHERE {{
?item rdfs:label "{txori_izena_eu}"@eu.
}} LIMIT 1
"""
url = "https://query.wikidata.org/sparql"
headers = {"Accept": "application/sparql-results+json"}
response = requests.get(url, headers=headers, params={"query": query})
data = response.json()
emaitzak = data["results"]["bindings"]
if emaitzak:
return emaitzak[0]["item"]["value"].split("/")[-1]
else:
return None
def hartu_etiketak(qid, languages):
"""Wikidata Q-ID batetik hizkuntza ezberdinetako etiketak ateratzen ditu"""
url = f"https://www.wikidata.org/wiki/Special:EntityData/{qid}.json"
response = requests.get(url)
data = response.json()
labels = data["entities"][qid]["labels"]
return {lang: labels.get(lang, {}).get("value", "(ez dago)") for lang in languages}
sarrera_f = "txoriak.txt"
irteera_f = "txori_izenak_hizkuntzaka7.csv"
all_rows = []
try:
with open(sarrera_f, "r", encoding="utf-8") as f:
txori_izenak = [line.strip() for line in f if line.strip()]
except FileNotFoundError:
print(f"Fitxategia ez da aurkitu: {sarrera_f}")
for txori_izena in txori_izenak:
qid = hartu_wikidata_id(txori_izena)
if not qid:
print(f"Ez da aurkitu '{txori_izena}' izeneko elementurik Wikidatan.")
row = [txori_izena] + ["(ez dago)"] * len(HIZKUNTZAK)
else:
names = hartu_etiketak(qid, HIZKUNTZAK)
row = [txori_izena] + [names[lang] for lang in HIZKUNTZAK]
all_rows.append(row)
# CSV fitxategia idatzi
with open(irteera_f, mode="w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
burukoak = ["Euskaraz"] + HIZKUNTZAK
writer.writerow(burukoak)
writer.writerows(all_rows)
print(f"\n Emaitzak '{irteera_f}' fitxategian gorde dira.")
</syntaxhighlight>
=== 13.6. Proposatutako hobekuntzak ===
==== 13.6.1. Zinemako zuzendari ospetsu gehiagoren artikuluetan filmen taula gehitu ====
Python programaren kodea erabil dezakezue PAWS tresnarekin interneten bidez (https://hub-paws.wmcloud.org/), baita beste zuzendari batekin (ordeztu wikidata identifikadorea "Q56014' George Cuckorrena da, hori aldatu).2024an Oscar saria jaso duten zuzendarien artikuluetan txertatu genuen taula hori. Zuzendari gehiagorekin ere egin dezakezu zuk.
==== 13.6.1. Zinemako aktore ospetsu gehiagoren artikuluetan filmen taula gehitu ====
[[Eztabaida:Jack Nicholson|Zinema-aktoreen]] kasuan ikus erabili genuen programa hemen: https://eu.wikipedia.org/wiki/Eztabaida:Jack_Nicholson
== Erreferentziak ==
i88cz31igikcjeyuc4q00jg0vs6amhg
42037
42036
2025-07-11T09:48:27Z
81.9.242.50
/* 13.4. Wikipediarako taula bat automatikoki sortu Wikidatako datuekin */
42037
wikitext
text/x-wiki
{{lanean}}
== 13. Aplikazioa IV: Wikipedian, Wikidatan eta Wikimedia Commonsen ==
Kapitulu honetan Wikipedian, Wikidatan edota Wikimedia Commons-en aritzeko programa batzuk landuko ditugu. Datu libre eta ugari dituzten hiru zerbitzu horiek aukera handiak eskaintzen dituzte programazio-ariketak egiteko. Noski, hasi baino lehenago wikipediako kontu bat eduki beharko dugu ariketa horiek egin ahal izateko.
Programak idatzi egokitu eta korritzeko bi aukera izango ditugu:
* Norberaren konputagailuan: [[Anaconda (Python banaketa)|Anaconda]] edo [[Idle]] bezalako programazio-ingurune baten Pywikibot erabiltzea
* Internet bidez Wikimedia Cloud Services baliatzea. Wikimediaren hodeiko zerbitzuetako "notebook" batean '''[https://hub-paws.wmcloud.org/) PAWS: A Web Shell (PAWS)]''' erabiltzea
Kapitulu azken urteetan erabilitako zenbait programa erakutsiko ditugu.
=== 13.1. Pywikibot liburutegia. Bilaketak eta ordezpenak Wikipediako orrien testuan. ===
[[Wikipedia:Pywikibot|Pywikibot]] tresna bilduma da, [[MediaWiki]] guneetan lanak automatizatzeko [[Python (informatika)|Python]] liburutegia da. Hasieran Pywikibot Wikipedian lan egiteko sortu bazen ere, gaur egun [[Wikimedia Fundazioa|Wikimedia Foundationeko]] hainbat proiektutan erabiltzen da eta hainbat wikitan, besteak beste [[Wikipedia|Wikipedian]], [[Wikidata|Wikidatan]] eta [[Wikimedia Commons|Commonsen]]).
Pywikibot liburutegi horretan Python-programa ugari eskaintzen dira script moduan erabil daitezkeenak. Esaterako, horien artean oso praktikoak dira ''[[mediawikiwiki:Manual:Pywikibot/listpages.py|listpages]]'' eta ''[[mediawikiwiki:Manual:Pywikibot/replace.py|replace]]'' scriptak Wikipediako orrien testuan bilaketak eta ordezpenak egiteko erabil ditzakegunak.<ref>{{Erreferentzia|izenburua=Eskuliburua:Pywikibotmultilingual|hizkuntza=en|data=2025-06-14|url=https://www.mediawiki.org/wiki/Manual:Pywikibot/eu|aldizkaria=MediaWiki|sartze-data=2025-07-09}}</ref><ref>{{Erreferentzia|izenburua=Manual:Pywikibot/Scripts|hizkuntza=en|url=https://www.mediawiki.org/wiki/Manual:Pywikibot/Scripts|aldizkaria=MediaWiki|sartze-data=2025-07-09}}</ref>
==== 13.1.1 Bilatu karaktere-kate bat duten Wikipediako orriak ====
Adibidez, UEUko liburu bat deskargatzeko esteka ("www.ueu.eus/download/") duten Euskal Wikipediako artikuluak bilatu nahi baditugu honako komandoa erabil ditzakegu terminal batean:<syntaxhighlight lang="linux-config">pwb.py listpages -lang:eu -weblink:"www.ueu.eus/download/"</syntaxhighlight>
Eta emaitzan ikusiko dugu 72 artikulu hauetan agertzen dela horrelako esteka bat:
1 Urtar
2 Primitibo flandestar
3 An13sa
4 Jabier Agirre
5 Martinellok ez du kukurik entzuten
6 Errando
[...]
72 Goi Paleolitoa Euskal Herrian
72 read operations
Execution time:
Read operation time: 0.0 seconds
Script terminated successfully.
Beste adibide bat, [[Inguma (datu-basea)|Inguma]] datu-baseko esteka duten Euskal Wikipediako artikuluak:<syntaxhighlight lang="linux-config">
pwb.py listpages -lang:eu -weblink:"inguma.eus/"
</syntaxhighlight>Komando hori exekutatuz gero 297 artikulu hauek lortuko ditugu:<syntaxhighlight lang="linux-config">
1 Javier Torrealdea
2 Jose Maria Pitarke
3 Eugenio Arraiza
4 Javier Duoandikoetxea
5 Joseba Agirreazkuenaga
6 Karlos del Olmo
[...]
296 Patxi Angulo Martin
297 Aitzpea Leizaola
297 read operations
Execution time:
Read operation time: 0.0 seconds
Script terminated successfully.
</syntaxhighlight>
==== 13.1.2. Ordeztu karaktere-kate bat beste batekin Wikipediako hainbat orritan. ====
Ordezpen hau egin nahi dugu sistematikoki Wikipedian: "Fa maiorren]]" azaltzen den tokietan "fa maiorren]]" jarri nahi dugu letra xehe batekin hasita.
Lehenago bilatu dugu "Fa maiorren]]" karaktere-katea artikulutan azaltzen den eta ordeztekoak.txt fitxategian gorde ditugu.<syntaxhighlight lang="text">[[Fa maior]]
[[3. Sinfonia (Brahms)]]
[[5. Sinfonia (Dvořák)]]
[[8. Sinfonia (Beethoven)]]
[[Aash Al Maleek]]
[[Allah Peliharakan Sultan]]
[[Arise O Compatriots, Nigeria's Call Obey]]
[[Biladi, Biladi, Biladi]]
[[Gloria al Bravo Pueblo]]
[[Hino Nacional Brasileiro]]
[[Imnos is tin Eleftherian]]
[[Inno e Marcia Pontificale]]
[[L-Innu Malti]]
[[Le Temps des cerises]]
[[Maitia, nun zira]]
[[Mazurek Dąbrowskiego]]
[[Os Pinos]]
[[Pastorala (Beethovenen Sinfonia)]]
[[Pianoarentzako 22. sonata (Beethoven)</syntaxhighlight>
Honela egin ditugu ordezpen guzti horiek:<syntaxhighlight lang="text">@PAWS:$ pwb.py replace -lang:eu -file "Fa maiorren]]" "fa maiorren]]"
Please enter the local file name: ordeztekoak.txt
The summary message for the command line replacements will be something like: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
Press Enter to use this automatic message, or enter a description of the
changes your bot will make:
Retrieving 18 pages from wikipedia:eu.
No changes were necessary in [[eu:Fa maior]]
No changes were necessary in [[eu:3. Sinfonia (Brahms)]]
>>> 5. Sinfonia (Dvořák) <<<
@@ -23 +23 @@
- [[Kategoria:Konposizioak Fa maiorren]]
+ [[Kategoria:Konposizioak fa maiorren]]
Do you want to accept these changes? ([y]es, [N]o, [e]dit original, edit
[l]atest, open in [b]rowser, [m]ore context, [a]ll, [q]uit): y
Edit summary: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
No changes were necessary in [[eu:8. Sinfonia (Beethoven)]]
[...]
>>> Pastorala (Beethovenen Sinfonia) <<<
@@ -26 +26 @@
- [[Kategoria:Konposizioak Fa maiorren]]
+ [[Kategoria:Konposizioak fa maiorren]]
Edit summary: Robota: Testu aldaketa automatikoa (-Fa maiorren]] +fa maiorren]])
Sleeping for 8.5 seconds, 2023-04-05 11:11:21
Page [[Pastorala (Beethovenen Sinfonia)]] saved
18 read operations
13 write operations
Execution time: 136 seconds
Read operation time: 7.6 seconds
Write operation time: 10.5 seconds
Script terminated successfully.</syntaxhighlight>Wikipediako erreferentzia batean automatikoki hartu diren izen deiturak konpondu nahi ditugu Wikipedia artikulu batean. Zehazkiago esanda, adibide honetan "Joseba_Agirreazkuenaga" artikuluan "Erreferentzia|izena=Rafael Lopez|abizena=Atxurra|" karaktere-kateak beste honekin ordeztu nahi ditugu: "Erreferentzia|izena=Rafael|abizena=Lopez Atxurra|"<syntaxhighlight lang="text">#!/bin/bash
echo "Izen/deituren banaketa zuzentzen"
pwb.py replace -page:"Joseba_Agirreazkuenaga" "Erreferentzia|izena=Rafael Lopez|abizena=Atxurra|" "Erreferentzia|izena=Rafael|abizena=Lopez Atxurra|"</syntaxhighlight>
=== 13.2. Wikipediako hainbat artikulu sortzea Wikidatako hainbat itemen oinarrizko datuekin ===
2025eko udaberrian [[Wikiproiektu:Euskal Etxeak Munduan Zehar|Euskal Etxeak Munduan Zehar]] wikiproiektuaren barruan Euskal Wikipedian falta ziren 140 euskaletxeen artikuluak programa bidez automatikoki sortu genituen bakoitza oinarrizko datu batzuekin.
Aldez aurretik oinarrizko datu horiek ''euskaletxeak.eus'' webgunetik Wikidatara gehitu genituen (ikus hemen: [https://drive.google.com/drive/folders/1cqDvjqWTvxZ1GYVJ2TUp-5LwlBb4YLRB Zelan igo datu asko Wikidatara? Gidoia eta ariketak egiteko datuak])
Hainbat programa egin behar izan dira. Pixkanaka joan gara sortzen artikuluak, Gehienetan herrialde bakoitzeko programa sortu dugu eta exekuzio bat egin dugu. Argentina hiru urratsetan egon dugu: Buenos Aires hiriburuko euskaletxeak, gero Buenos Aires probintziakoak, eta bukaeran Argentinako beste probintzietakoak denak batera.
Eta hau da Buenos Aires probintziako euskal etxeen artikuluak sortu zituen programa:<syntaxhighlight lang="python3"># -*- coding: utf-8
# Buenos Aires probintziakoak
# Trenque Lauquen (Q264679)
import pywikibot
import re
from pywikibot import pagegenerators
"""
Iterate over a query given in a string using page generators.
"""
QUERY = """
# Euskal etxeak munduan zehar. Bakoitzarekin hainbat datu emanda.
# Ikus datuak hemen: https://www.euskaletxeak.eus/
SELECT DISTINCT ?item WHERE {
?item wdt:P31 wd:Q8341851; # ?itema euskal etxea da
wdt:P131 ?hiria. # ?itema ?hiria-n dago
?hiria wdt:P131* wd:Q44754; # ?hiria Buenos Aires probintzian dago
OPTIONAL {
?sitelink schema:about ?item;
schema:inLanguage "eu".
}
FILTER(!(BOUND(?sitelink)))
SERVICE wikibase:label { bd:serviceParam wikibase:language "eu,es,en". }
}
LIMIT 1000
"""
def helbidekoak (h):
print(h)
if re.search(r"\d", h) != None:
if re.match(r"(.*),? (\d*)$", h):
m = re.match(r"(.*),? (\d*)$", h)
print (m.groups())
kalea = m.group(1) # 'Con Con'
if kalea[-1] == ',':
kalea = kalea [:-1]
kale_zbkia = m.group(2) # '6955'
return kalea + " kalearen " + kale_zbkia +" zenbakian dago."
else:
return "Hau da elkartearen helbidea: " + h + '.'
else:
return "Hau da elkartearen helbidea: " + h + '.'
def sorrerakoak (item1):
claims = item1.get(u'claims') #Get all the existing claims
if u'P571' in claims[u'claims']:
sorrera_date = item1.claims['P571'][0].getTarget()
sorrera = str(sorrera_date.year) #'1981'
return sorrera + ". urtean inauguratu zen. "
else:
return ""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
i_buenos_aires = 4
for item in generator:
print (item)
h1 = item.get()
# print(h1)
#print (h1['claims'])
# Datuak hartu wikidatatik izen ofiziala, hiria, probintzia, sorrerako urtea...
hiria_qid= item.claims['P131'][0].getTarget()
hiria = hiria_qid.labels['eu']
hiria_ko = hiria+'ko' #'Barilocheko'
if hiria != 'Buenos Aires probintzia' and hiria != 'Mar del Plata':
izen_ofiziala = item.labels['eu'] #'"Centro Basko Mendi'ko Euzko Etxea"
etiketa_eu = hiria +" hiriko Euskal Etxea"
#etiketa_eu = izen_ofiziala + " (euskal etxea, Trenque Lauquen)"
probintzia_qid = item.claims['P131'][0].getTarget()
probintzia = probintzia_qid.labels['eu'] #'Río Negro'
helbidea = item.claims['P6375'][0].getTarget().text # 'Con Con 6955')
#print (helbidea)
#testu_sarrera = "'''" + izen_ofiziala + "''' [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[Buenos Aires probintzia|Buenos Aires]] probintzian. " + sorrera + ". urtean inauguratu zen. " + helbidekoak(helbidea) +"<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""
testu_sarrera = "'''" + hiria_ko +" Euskal Etxea''', ofizialki '''" + izen_ofiziala + "''', [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[Buenos Aires probintzia|Buenos Aires]] probintzian. " + sorrerakoak(item) + helbidekoak(helbidea) + "<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""#print (testu_sarrera)
#testu_sarrera = "'''" + hiria_ko +" Euskal Etxea''', ofizialki '''" + izen_ofiziala + "''', [[Argentina]]ko [[" + hiria + "]] hirian dagoen [[euskal etxe]] bat da, [[" + probintzia + " probintzia|" + probintzia + "]] probintzian. " + sorrerakoak(item) + helbidekoak(helbidea) + "<ref>{{Erreferentzia|abizena=|izenburua=EuskalEtxeak - Euskal etxeak|hizkuntza=eu-es|url=https://www.euskaletxeak.eus/index.php?option=com_content&task=view&id=140&Itemid=191&lang=eu_ES|aldizkaria=www.euskaletxeak.eus|sartze-data=2025-04-13}}</ref>"""#print (testu_sarrera)
testu_gorputza = """
== Historia ==
== Baliabideak ==
== Jarduerak ==
== Munduko Euskal Etxeen mapa ==
[[Fitxategi:Munduko_euskal_etxeak_-_Mapa_-_Wikidata_-_2025.png|erdian|thumb|380x380px|Ikus [https://w.wiki/Dkvm Munduko euskal etxeen mapa interaktiboa] (Wikidatako datuekin, 2025)]]
== Erreferentziak ==
{{erreferentzia_zerrenda|30em}}
== Ikus, gainera ==
* [[Euskal etxeak]]
* [[Euskal diaspora]]
== Kanpo estekak ==
* [https://www.euskaletxeak.eus/index.php?lang=eu_ES ''www.euskaletxeak.eus'']
{{zirriborroa}}
{{Autoritate kontrola}}
{{Euskal etxeak}}
"""
testu_kategoriak = """
[[Kategoria:Argentinako euskal etxeak]]
[[Kategoria:Buenos Aires probintzia]]""" ## + probintzia + "]]" ### + "ko probintzia]]"
# wikipediako artikuluaren kodea (testua) osatzea, bere zati nagusiak bata bestearen atzeetik jarrita
testua = "{{eraikin infotaula automatikoa}}"
testua += testu_sarrera
testua += testu_gorputza
testua += testu_kategoriak
print(etiketa_eu)
print(testu_sarrera)
print(testu_kategoriak)
#sortu "etiketa_eu" artikulua "testua" wikikodearekin
site1 = pywikibot.Site('wikipedia:eu')
page1 = pywikibot.Page(site1, etiketa_eu)
page1.text = testua
page1.save()
# wikidatako itema lotu sortu berri den wikipediako artikuluarekin
item.setSitelink(page1, summary=u'Setting (/updating?) sitelink.')
#egiteko: "izen_ofiziala" artikulua sortu? #birzuzendu[["etiketa_eu"]]
page3 = pywikibot.Page(site1, izen_ofiziala)
page3.text = "#BIRZUZENDU[[" + etiketa_eu + "]]"
page3.save()
#egiteko: "hiria_ko + Euskal Etxea" jarri wikidatako itemean goitizen moduan
new_alias = {"eu": [etiketa_eu]}
item.editAliases(new_alias, summary="Setting new aliases.")</syntaxhighlight>
=== 13.3. Wikipediako hainbat artikuluren artean etiketa-aldaketak eta birzuzenketak moldatzea ===
2025 martxoan [[Wikiproiektu:Hegaztien euskarazko izenak|Hegaztien_euskarazko_izenak]] wikiproiektuan '''hegaztien euskarazko izenak''' egoki erabiltzeko moldaketak egin genituen Wikipedian eta Wikidatan. Python programak erabili dira [[Euskal Batzorde Ornitologikoa|Euskal Batzorde Ornitologikoak]] izen horiekin egin duen eguneraketak Euskal Wikipedian integratzeko. Taula handi bat zegoen ordura arteko espezie izen onartua (ez du zertan bat etorri behar Euskal Wikipedia zeukanarekin) eta euskarazko izena agertuzen zen. Ziurtatu behar genuen euskarazko izena zela artikuluaren benetako izena, eta ez birzuzenketa bat. Lagungarri, beste hizkuntza batzuetako izenak ere eskaintzen ziren, bilaketa egin behar izatekotan. Egitekoak hauek ziren
* Espezie izenaren zutabean dauden guztiak horiz markatuta agertu behar dira, birzuzenketa bat eginez euskarazko izena duen artikulura.
* Euskarazko izenera mugitu behar diren artikulu guztiak mugitu. Artikulu horietan erreferentzia gisa txoriak.eus zein ornitho.eus gehitu daitezke. <code><nowiki>{{</nowiki>[[Txantiloi:Txoriak|txoriak]]<nowiki>}}</nowiki></code> erabil dezakezu, izen zientifikoa jarrita, lotura sortzeko. Adibidez, <code><nowiki>{{</nowiki>[[Txantiloi:Txoriak|txoriak]]<nowiki>|Pandion-haliaetus}}</nowiki></code>; [[Arrano arrantzale|Arrano arrantzalea]] artikulua horrela hasten da: "'''Arrano arrantzalea''' (''Pandion haliaetus'')...". Izenburu etzana ere kendu behar zaio artikuluari, baldin badu.
* Hegaztietako batzuk beste izen zientifiko bat duen artikulu batean ditugu, zaharkituta geratu dena. Horrelakoetan taulako izen zientifikoarekin ere sortu beharko da artikulu bat, euskarazko izena duen artikulura daraman birzuzenketa moduan.
=== 13.4. Wikipediarako taula bat automatikoki sortu Wikidatako datuekin ===
Sortu genuen Python programa bat zuzendari baten filmen izenburuak gure inguruko hainbat hizkuntzatan ere erakusteko (en, es, fr, eu, ca. gl). Python programak wikikodea sortzen du, taula bat da eta artikuluan sartu behar da gero, eskuz. Gero artikuluan filmen taula ordenatu daiteke ekoizlearen arabera edo izenburuaren arabera ere.<ref>{{Erreferentzia|izenburua=Eztabaida:George Cukor|hizkuntza=eu|data=2024-06-04|url=https://eu.wikipedia.org/w/index.php?title=Eztabaida:George_Cukor&oldid=9812871|sartze-data=2025-07-08|encyclopedia=Wikipedia, entziklopedia askea.}}</ref>
Pena da, pelikula klasiko oso gutxi ikus daitezke euskaraz. Horrelakoetan, behar den bezala, filmaren izenburua jatorrizko hizkuntzan (ingelesez gehienetan) jartzen dugu Euskal Wikipedian Baina horrela, batzuetan ez da erraza filma ezagutzea, filma frantsesez edo gaztelaniaz ikusi dugulako. Adibidez, [[George Cukor]] zuzendariaren artikuluan taula hau txertatu genuen zuzendutako filma bakoitzaren bi aktore, enpresa ekoizlea eta beste izenburuak (gaztelaniaz, frantsesez). Hau da taula horren zatitxo bat:
{| class="wikitable sortable"
!Urtea
!Filma
!Aktoreak
!Ekoizlea
!Izenburuak (es,fr)
|-
|...
|
|
|
|
|-
|1939
|[[:w:Gone with the Wind|Gone with the Wind]]
|[[:w:Clark Gable|Clark Gable]], [[w:Vivien Leigh|Vivien Leigh]]
|[[:w:Metro-Goldwyn-Mayer|Metro-Goldwyn-Mayer]]
|Gaztelaniaz: Lo que el viento se llevó; Frantsesez:Autant en emporte le vent
|-
|1940
|[[Susan and God]]
|[[Joan Crawford]], [[:w:Fredric March|Fredric March]]
|[[:w:Metro-Goldwyn-Mayer|Metro-Goldwyn-Mayer]]
|Gaztelaniaz:Susana y Dios; Frantsesez:Suzanne et ses idées
|-
|1940
|[[:w:The Philadelphia Story|The Philadelphia Story|]]
|[[:w:Katharine HepburnKatharine Hepburn]], [[:w:Cary Grant|Cary Grant]]
|[[:w:Metro-Goldwyn-Mayer|Metro-Goldwyn-Mayer]]
| Frantsesez:Indiscrétions
|-
|...
|
|
|
|
|-
|1954
|[[It Should Happen to You]]
|[[:w:Judy Holliday]], [[:w:Peter Lawford|Judy Holliday]], [[:w:Peter Lawford]]
|[[:w:Columbia Pictures|Columbia Pictures]]
|Gaztelaniaz:La rubia fenómeno; Frantsesez:Une femme qui s'affiche
|-
|1956
|[[:w:Bhowani Junction (filma)|Bhowani Junction]]
|[[:w:Ava Gardner|Ava Gardner]], [[:w:Stewart|Stewart Granger]]
|[[:w:Metro-Goldwyn-Mayer|Metro-Goldwyn-Mayer]]
|Gaztelaniaz:Cruce de destinos; Frantsesez:La Croisée des destins
|-
|1956
|[[:w:Lust for Life (filma)|Lust for Life]]
|[[:w:Kirk Douglas|Kirk Douglas]], [[:w:Anthony Quinn|Anthony Quinn]]
|[[:w:Metro-Goldwyn-Mayer|Metro-Goldwyn-Mayer]]
|Gaztelaniaz:El loco del pelo rojo; Frantsesez:La Vie passionnée de Vincent van Gogh
|-
|...
|
|
|
|
|}
Animatzen bazara, Python programaren kodea erabil dezakezue PAWS tresnarekin interneten bidez (https://hub-paws.wmcloud.org/), baita beste zuzendari batekin (ordeztu wikidata identifikadorea "Q56014' George Cuckorrena da, hori aldatu)
Beste bertsio bat egin dut [[Eztabaida:Jack Nicholson|zinema-aktoreentzat]] (ikus https://eu.wikipedia.org/wiki/Eztabaida:Jack_Nicholson).<ref>{{Erreferentzia|izenburua=Eztabaida:Jack Nicholson (Euskal Wikipedia)|hizkuntza=eu|data=2024-06-04|url=https://eu.wikipedia.org/w/index.php?title=Eztabaida:Jack_Nicholson&oldid=9812955|sartze-data=2025-07-11|encyclopedia=Wikipedia, entziklopedia askea.}}</ref><syntaxhighlight lang="python"># -*- coding: utf-8 -*-
import pandas as pd
import pywikibot
import datetime
from pywikibot import pagegenerators
"""
Ingelesezko zuzendari baten filmekin wititaula bat sortu.
Pelikula bakoitzean datua hauek: urtea, zuzendaria eta izenburu desberdinak zenbait hizkuntzatan.
Iterate over a query given in a string using page generators.
"""
#Sortu lista bat pelikula guztien wikidata-identifikadoreekin
QUERY = """
#
SELECT ?item WHERE {
?item (wdt:P31/(wdt:P279*)) wd:Q11424;
wdt:P57 wd:Q56014.
}
LIMIT 500
"""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
#Sortu Data-frame bat (Kaljulu-orri bat) pelikula bakoitzaren datuekin
header = ['Urtea', 'Filma', 'Antzezleak', 'Ekoizlea', 'Hizkuntzak']
data = {}
data = pd.DataFrame(data, columns=header)
for item in generator:
print (item)
h1 = item.get()
#print(h1)
#print (h1['claims'])
if 'P577' in item.claims: # urtea
date = item.claims['P577'][0].getTarget()
urte = date.year
else:
urte = 0
if 'en' in item.labels:
film = item.labels['en']
else:
film = '--'
if 'P161' in item.claims: # antzezle
if len(item.claims['P161']) > 1:
antzezle1 = item.claims['P161'][0].getTarget()
antzezle2 = item.claims['P161'][1].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]], [["+antzezle2.labels['en']+"]]"
else:
antzezle1 = item.claims['P161'][0].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]]"
else:
antzezleak = "--"
if 'P272' in item.claims: # ekoizlea
ekoizle1 = item.claims['P272'][0].getTarget()
ekoizle = "|[["+ekoizle1.labels['en']+"]]"
else:
ekoizle = "--"
hizkuntzak =""
if 'es' in item.labels:
if item.labels['es'] != item.labels['en']:
hizkuntzak += '{{Lang-es|'+item.labels['es']+'}} '
if 'fr' in item.labels:
if item.labels['fr'] != item.labels['en']:
hizkuntzak += '{{Lang-fr|'+item.labels['fr']+'}} '
if 'eu' in item.labels:
if item.labels['eu'] != item.labels['en']:
hizkuntzak += '{{Lang-eu|'+item.labels['eu']+'}} '
if 'ca' in item.labels:
if item.labels['ca'] != item.labels['en']:
hizkuntzak += '{{Lang-ca|'+item.labels['ca']+'}} '
if 'gl' in item.labels:
if item.labels['gl'] != item.labels['en']:
hizkuntzak += '{{Lang-gl|'+item.labels['gl']+'}} '
new_row = {'Urtea': urte, 'Filma': film, 'Antzezleak': antzezleak, 'Ekoizlea': ekoizle, 'Hizkuntzak': hizkuntzak}
data.loc[len(data)] = new_row
#Ordenatu filmak argitaratu ziren urtearen arabera
sorted_df = data.sort_values(by=["Urtea"], ascending=True)
#Taularen wikilodea idaztea
print ("""== Zuzendutako filmen aktoreak, ekoizlea eta izenburuak ==
Taula honetan ikus daitezke filmaren bi aktore, enpresa ekoizlea eta beste izenburuak beste hizkuntza batera itzuli bada (gaztelania, frantsesa, euskara, katalana edo galiziera):
{| class="wikitable sortable"
! Urtea
! Filma
! Antzezleak
! Ekoizlea
! Hizkuntzak """)
for index, lerroa in sorted_df.iterrows():
print("|-")
print("| ", lerroa['Urtea'])
print("| [["+lerroa['Filma']+"]]")
print("| "+lerroa['Antzezleak'])
print("| "+lerroa['Ekoizlea'])
print("| "+lerroa['Hizkuntzak'])
print("|}")</syntaxhighlight>
Hona hemen zinema-zuzendarien taula hobeto ateratzeko beste bertsio bat.
Ingelesezkoaren gain gaztelaniazko eta frantsesezko izenburuak bakarrik erakusten dira (wikidatako Labels etiketan dagoena) eta pelikulen euskarazko artikuluaren esteka hobeto adierazten da ("item.getSitelink('euwiki')" eta ez "item.labels['en']" erabilita).
Programa hau hainbat artikulutan erabili zen, horien artean daude oscar sari bat jaso duten zuzendari gehienetan.
Antzeko taula bat gehitu da Oscar saria irabazi duten aktoreekin.
<syntaxhighlight lang="python">
# -*- coding: utf-8 -*-
import pandas as pd
import pywikibot
import datetime
from pywikibot import pagegenerators
"""
Ingelesezko zuzendari baten filmekin wititaula bat sortu.
Pelikula bakoitzean datu hauek: urtea, izenburua ingelesez, bi aktore, ekoizlea eta izenburua espainieraz eta frantsesez ingelesezkoa ez badira.
Iterate over a query given in a string using page generators.
"""
#Sortu lista bat pelikula guztien wikidata-identifikadoreekin
# wdt:P57 wd:Q51525 lerroan Q51525 identifikadorea Milos Forman zuzendariarena da.
#Ikus Wikidatan: https://www.wikidata.org/wiki/Q51525
# Query honetan Q51525 identifikadorea ordez beste zuzendari batena jarriz gero beste zuzendari horren taula lortuko da
QUERY = """
#
SELECT ?item WHERE {
?item (wdt:P31/(wdt:P279*)) wd:Q11424;
wdt:P57 wd:Q56014.
}
LIMIT 500
"""
site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
generator = pagegenerators.PreloadingEntityGenerator(pagegenerators.WikidataSPARQLPageGenerator(QUERY,site=repo))
#Sortu Ddta-frame bat (Kalkulu-orri bat) pelikula bakoitzaren datuekin
header = ['Urtea', 'Filma', 'Antzezleak', 'Ekoizlea', 'Hizkuntzak']
data = {}
data = pd.DataFrame(data, columns=header)
for item in generator:
print (item)
h1 = item.get()
#print(h1)
#print (h1['claims'])
if 'P577' in item.claims: # urtea
date = item.claims['P577'][0].getTarget()
urte = date.year
else:
urte = 0
if 'en' in item.labels:
film = '[['+item.labels['en']+']]'
if 'euwiki' in h1['sitelinks']:
print ('euwiki: '+item.getSitelink('euwiki'))
if item.getSitelink('euwiki') != item.labels['en']:
film = '[['+item.getSitelink('euwiki')+'|'+item.labels['en']+']]'
"""
print ('enlabel: '+item.labels['en'])
print ('enwiki: '+item.getSitelink('enwiki'))
print ('euwiki: '+item.getSitelink('euwiki'))
"""
else:
film = '--'
if 'eu' in item.labels:
print('eu_Label:', item.labels['eu'])
if 'P161' in item.claims: # antzezle
if len(item.claims['P161']) > 1:
antzezle1 = item.claims['P161'][0].getTarget()
antzezle2 = item.claims['P161'][1].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]], [["+antzezle2.labels['en']+"]]"
else:
antzezle1 = item.claims['P161'][0].getTarget()
antzezleak = "[["+antzezle1.labels['en']+"]]"
else:
antzezleak = "--"
if 'P272' in item.claims: # ekoizlea
ekoizle1 = item.claims['P272'][0].getTarget()
ekoizle = "|[["+ekoizle1.labels['en']+"]]"
else:
ekoizle = "--"
hizkuntzak =""
if 'es' in item.labels:
if item.labels['es'] != item.labels['en']:
hizkuntzak += '{{Lang-es|'+item.labels['es']+'}} '
if 'fr' in item.labels:
if item.labels['fr'] != item.labels['en']:
hizkuntzak += '{{Lang-fr|'+item.labels['fr']+'}} '
"""
if 'eu' in item.labels:
if item.labels['eu'] != item.labels['en']:
hizkuntzak += '{{Lang-eu|'+item.labels['eu']+'}} '
if 'ca' in item.labels:
if item.labels['ca'] != item.labels['en']:
hizkuntzak += '{{Lang-ca|'+item.labels['ca']+'}} '
if 'gl' in item.labels:
if item.labels['gl'] != item.labels['en']:
hizkuntzak += '{{Lang-gl|'+item.labels['gl']+'}} '
"""
new_row = {'Urtea': urte, 'Filma': film, 'Antzezleak': antzezleak, 'Ekoizlea': ekoizle, 'Hizkuntzak': hizkuntzak}
data.loc[len(data)] = new_row
#Ordenatu filmak argitaratu ziren urtearen arabera
sorted_df = data.sort_values(by=["Urtea"], ascending=True)
#Taularen wikilodea idaztea
print ("""== Filmografia ==
Taula honetan ikus daitezke zuzendutako filma bakoitzaren bi aktore, enpresa ekoizlea eta beste izenburuak (gaztelaniaz, frantsesez):
{| class="wikitable sortable"
! Urtea
! Filma
! Aktoreak
! Ekoizlea
! Izenburuak (es,fr)""")
for index, lerroa in sorted_df.iterrows():
print("|-")
print("| ", lerroa['Urtea'])
print("| "+lerroa['Filma'])
print("| "+lerroa['Antzezleak'])
print("| "+lerroa['Ekoizlea'])
print("| "+lerroa['Hizkuntzak'])
print("|}")
print("------------------------")
</syntaxhighlight>
=== 13.5. CSV fitxategi bat sortzea Wikipediako hainbat artikuluk hainbat hizkuntzatan duten etiketarekin ===
Adibidez, ''txoriak.txt'' fitxategia hau baldin bada:<syntaxhighlight lang="text">
txantxangorri
etxe-txolarre
birigarro arrunt
gailupa eurasiar
zozo arrunt
eskinoso eurasiar
kaskabeltz handi
erregetxo bekainzuri
katagorri arrunt
mika arrunt
urubi arrunt
</syntaxhighlight>''txori_izenak_hizkuntzaka.csv'' fitxategian lortu nahi dugun emaitza hau da:
{| class="wikitable"
| align="left" |Euskaraz
| align="left" |ca
| align="left" |gl
| align="left" |es
| align="left" |fr
| align="left" |ar
| align="left" |en
|-
| align="left" |txantxangorri
| align="left" |pit-roig
| align="left" |paporrubio
| align="left" |Erithacus rubecula
| align="left" |rouge-gorge familier
| align="left" |أبو الحناء الأوروبي
| align="left" |European Robin
|-
| align="left" |etxe-txolarre
| align="left" |pardal
| align="left" |Pardal común
| align="left" |gorrión común
| align="left" |Moineau domestique
| align="left" |عصفور دوري
| align="left" |House Sparrow
|-
| align="left" |birigarro arrunt
| align="left" |tord comú
| align="left" |Tordo común
| align="left" |Turdus philomelos
| align="left" |Grive musicienne
| align="left" |سمنة مطربة
| align="left" |Song Thrush
|-
| align="left" |gailupa eurasiar
| align="left" |pinsà borroner
| align="left" |Cardeal
| align="left" |Pyrrhula pyrrhula
| align="left" |bouvreuil pivoine
| align="left" |دغناش أوراسي
| align="left" |Eurasian Bullfinch
|-
| align="left" |zozo arrunt
| align="left" |merla comuna
| align="left" |Merlo
| align="left" |Turdus merula
| align="left" |Merle noir
| align="left" |شحرور
| align="left" |Common Blackbird
|-
| align="left" |eskinoso eurasiar
| align="left" |gaig
| align="left" |Gaio
| align="left" |Garrulus glandarius
| align="left" |geai des chênes
| align="left" |قيق أوراسي
| align="left" |Eurasian Jay
|-
| align="left" |kaskabeltz handi
| align="left" |mallerenga carbonera
| align="left" |Ferreiriño abelleiro
| align="left" |Parus major
| align="left" |Mésange charbonnière
| align="left" |قرقف كبير
| align="left" |Great Tit
|-
| align="left" |erregetxo bekainzuri
| align="left" |bruel eurasiàtic
| align="left" |Estreliña riscada
| align="left" |Regulus ignicapilla
| align="left" |Roitelet à triple bandeau
| align="left" |صعو أحمر العرف
| align="left" |Common Firecrest
|-
| align="left" |katagorri arrunt
| align="left" |esquirol
| align="left" |Esquío vermello
| align="left" |Sciurus vulgaris
| align="left" |écureuil roux
| align="left" |سنجاب أحمر
| align="left" |red squirrel
|-
| align="left" |mika arrunt
| align="left" |garsa
| align="left" |Pega
| align="left" |Pica pica
| align="left" |pie bavarde
| align="left" |عقعق أوراسي
| align="left" |Eurasian magpie
|-
| align="left" |urubi arrunt
| align="left" |gamarús euroasiàtic
| align="left" |Avelaiona
| align="left" |Strix aluco
| align="left" |Chouette hulotte
| align="left" |خبل
| align="left" |Tawny Owl
|}
Python programak urrats hauek egiten ditu:
# <code>''txoriak.txt''</code> fitxategia irakurtzen du (lerro bakoitzean txori izen bat euskaraz)
# Txori bakoitzaren Wikidata Q-identifikadorea lortzen du
# Wikidatan hizkuntza hauetan bilatzen ditu izenak: eu, ca, gl, es, fr, ar eta en
# Eta ''txori_izenak_hizkuntzaka.csv'' ''izeneko'' fitxategian gordetzen ditu.
Hau da Python programa:<syntaxhighlight lang="python3">
import requests
import csv
from tabulate import tabulate
# Zein hizkuntzatan bilatu nahi dugun
HIZKUNTZAK = ["ca", "gl", "es", "fr", "ar", "en"]
def hartu_wikidata_id(txori_izena_eu):
"""Euskarazko izen batetik Wikidata Q-ID lortzen du"""
query = f"""
SELECT ?item WHERE {{
?item rdfs:label "{txori_izena_eu}"@eu.
}} LIMIT 1
"""
url = "https://query.wikidata.org/sparql"
headers = {"Accept": "application/sparql-results+json"}
response = requests.get(url, headers=headers, params={"query": query})
data = response.json()
emaitzak = data["results"]["bindings"]
if emaitzak:
return emaitzak[0]["item"]["value"].split("/")[-1]
else:
return None
def hartu_etiketak(qid, languages):
"""Wikidata Q-ID batetik hizkuntza ezberdinetako etiketak ateratzen ditu"""
url = f"https://www.wikidata.org/wiki/Special:EntityData/{qid}.json"
response = requests.get(url)
data = response.json()
labels = data["entities"][qid]["labels"]
return {lang: labels.get(lang, {}).get("value", "(ez dago)") for lang in languages}
sarrera_f = "txoriak.txt"
irteera_f = "txori_izenak_hizkuntzaka7.csv"
all_rows = []
try:
with open(sarrera_f, "r", encoding="utf-8") as f:
txori_izenak = [line.strip() for line in f if line.strip()]
except FileNotFoundError:
print(f"Fitxategia ez da aurkitu: {sarrera_f}")
for txori_izena in txori_izenak:
qid = hartu_wikidata_id(txori_izena)
if not qid:
print(f"Ez da aurkitu '{txori_izena}' izeneko elementurik Wikidatan.")
row = [txori_izena] + ["(ez dago)"] * len(HIZKUNTZAK)
else:
names = hartu_etiketak(qid, HIZKUNTZAK)
row = [txori_izena] + [names[lang] for lang in HIZKUNTZAK]
all_rows.append(row)
# CSV fitxategia idatzi
with open(irteera_f, mode="w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
burukoak = ["Euskaraz"] + HIZKUNTZAK
writer.writerow(burukoak)
writer.writerows(all_rows)
print(f"\n Emaitzak '{irteera_f}' fitxategian gorde dira.")
</syntaxhighlight>
=== 13.6. Proposatutako hobekuntzak ===
==== 13.6.1. Zinemako zuzendari ospetsu gehiagoren artikuluetan filmen taula gehitu ====
Python programaren kodea erabil dezakezue PAWS tresnarekin interneten bidez (https://hub-paws.wmcloud.org/), baita beste zuzendari batekin (ordeztu wikidata identifikadorea "Q56014' George Cuckorrena da, hori aldatu).2024an Oscar saria jaso duten zuzendarien artikuluetan txertatu genuen taula hori. Zuzendari gehiagorekin ere egin dezakezu zuk.
==== 13.6.1. Zinemako aktore ospetsu gehiagoren artikuluetan filmen taula gehitu ====
[[Eztabaida:Jack Nicholson|Zinema-aktoreen]] kasuan ikus erabili genuen programa hemen: https://eu.wikipedia.org/wiki/Eztabaida:Jack_Nicholson
== Erreferentziak ==
dr9dcp9w77gagndvx5u63tvcor41oio