Saltu al enhavo

Vikipedia diskuto:Mallongaj paĝoj kiuj ne estas ĝermoj

Paĝenhavo ne ekzistas en aliaj lingvoj.
Aldoni temon
El Vikipedio, la libera enciklopedio
Latest comment: antaŭ 1 jaro by Stefangrotz in topic Kreita uzante skripton

Kreita uzante skripton

[redakti fonton]

Jen la skripto por krei la liston:

import requests
from bs4 import BeautifulSoup
import re
import os
import time

SHORT_PAGES_URL = "https://eo.wikipedia.org/w/index.php?title=Speciala%C4%B5o:Mallongaj_pa%C4%9Doj"

CHECK_WORDS = ["Ĝermo","Ĝermeto","ĝermo","ĝermeto","{jar","{Jar"]

OUTPUT_PREFIX = "mallongaj_pagxoj_sen_sxablonoj"
CHUNK_SIZE = 500

CACHE_DIR = "page_cache"

HEADERS = {
"User-Agent": "MallongajArtikolojBot/3.0 (https://eo.wikipedia.org/wiki/Uzanto:ViaNomo)"
}

session = requests.Session()
session.headers.update(HEADERS)

os.makedirs(CACHE_DIR, exist_ok=True)


# ------------------------------------------------
# filename sanitizer
# ------------------------------------------------
def safe_filename(title):
return re.sub(r'[\\/:*?"<>|]', "_", title)


def cache_path(title):
return os.path.join(CACHE_DIR, safe_filename(title) + ".txt")


# ------------------------------------------------
# get short pages via scraping
# ------------------------------------------------
def get_short_page_links():

links = []
offset = 0

while True:

url = f"{SHORT_PAGES_URL}&limit=500&offset={offset}"

response = session.get(url)
response.raise_for_status()

soup = BeautifulSoup(response.text, "html.parser")

page_links = soup.select(".mw-spcontent li a")

if not page_links:
break

for link in page_links:

href = link.get("href")

if href.startswith("/wiki/"):

title = link.text
raw_title = href.replace("/wiki/", "")

links.append((title, raw_title))

print("Fetched list offset", offset)

offset += 500
time.sleep(0.5)

return links


# ------------------------------------------------
# last edit timestamp
# ------------------------------------------------
def get_last_edit_time(title):

url = f"https://eo.wikipedia.org/w/api.php?action=query&titles={title}&prop=revisions&rvprop=timestamp&format=json"

r = session.get(url)
r.raise_for_status()

data = r.json()

pages = data.get("query", {}).get("pages", {})

for page in pages.values():

if "revisions" in page:

return page["revisions"][0]["timestamp"]

return "Unknown"


# ------------------------------------------------
# wikidata id
# ------------------------------------------------
def get_wikidata_id(title):

url = f"https://eo.wikipedia.org/w/api.php?action=query&prop=pageprops&titles={title}&format=json"

r = session.get(url)
r.raise_for_status()

data = r.json()

pages = data.get("query", {}).get("pages", {})

for page in pages.values():

return page.get("pageprops", {}).get("wikibase_item", "N/A")

return "N/A"


# ------------------------------------------------
# extract templates
# ------------------------------------------------
def extract_templates(text):

templates = set(re.findall(r"\{\{([a-zA-Z0-9_-]+)", text))

if templates:
return ", ".join(sorted(templates))

return "neniuj ŝablonoj"


# ------------------------------------------------
# load cache
# ------------------------------------------------
def load_cache(title):

path = cache_path(title)

if os.path.exists(path):

with open(path, "r", encoding="utf-8") as f:
return f.read()

return None


# ------------------------------------------------
# save cache
# ------------------------------------------------
def save_cache(title, text):

path = cache_path(title)

with open(path, "w", encoding="utf-8") as f:
f.write(text)


# ------------------------------------------------
# fetch raw article
# ------------------------------------------------
def fetch_article(title):

cached = load_cache(title)

if cached is not None:
return cached

url = f"https://eo.wikipedia.org/w/index.php?title={title}&action=raw"

r = session.get(url)
r.raise_for_status()

text = r.text

save_cache(title, text)

return text


# ------------------------------------------------
# open new table
# ------------------------------------------------
def open_new_table(index):

filename = f"{OUTPUT_PREFIX}_{index}.txt"

f = open(filename, "w", encoding="utf-8")

f.write('{| class="wikitable sortable"\n')
f.write('! Artikolo !! Grandeco (bitoj) !! Lasta redakto !! Wikidata ID !! Ŝablonoj\n')

return f, filename


# ------------------------------------------------
# main
# ------------------------------------------------
def main():

print("Fetching short pages...")

short_pages = get_short_page_links()

print("Total pages:", len(short_pages))

file_index = 1
row_count = 0

file, filename = open_new_table(file_index)

for title, raw_title in short_pages:

text = fetch_article(raw_title)

contains_word = any(word.lower() in text.lower() for word in CHECK_WORDS)

templates = extract_templates(text)

size = len(text) * 8

last_edit = get_last_edit_time(raw_title)

wikidata_id = get_wikidata_id(raw_title)

wikidata_link = f"[[:d:{wikidata_id}|{wikidata_id}]]" if wikidata_id != "N/A" else "N/A"

if not contains_word:

if row_count >= CHUNK_SIZE:

file.write("|}\n")
file.close()

print("Finished:", filename)

file_index += 1
row_count = 0

file, filename = open_new_table(file_index)

entry = f"|-\n| [[{title}]] || {size} bitoj || {last_edit} || {wikidata_link} || {templates}"

file.write(entry + "\n")
file.flush()

print(entry)

row_count += 1

time.sleep(0.2)

file.write("|}\n")
file.close()

print("Finished:", filename)


if __name__ == "__main__":
main()

Stefangrotz (diskuto) 31 jan. 2025 (UTC)

Dankon Kara Stefangrotz pro tiu ĉi grava listo, SED la nuna versio estas nuda listo kaj se eblas povus esti grava indiki por ĉiu listaĵero ekzemple kiom larĝa (eta) ĝi estas? kiam okazis ĝia lasta ĝisdatigo? ĉu ĝi havas ŝablonojn, kiom kaj kiuj? Ĉu ĝi estas konektita al vikidatumoj (kaj do indiko de la vikidatuma identigilo)? iuj aliaj statistikoj...
Mi iom kontrolis la liston kaj mi ja trovis iuj kiuj havas ŝablonon, sed Notu ke por malgrandeco oni deziras kontroli la enhavon mem kaj ne inkluzivi la eldonitaj ŝablonojn. Se eblos kontroli la mezuroN de malgrandeco tiu estos oportuna.
Dankon denove pro via grava laboro, amike Sj1mor (diskuto) 20:40, 29 jan. 2025 (UTC)Reply
Mi aldonis multajn ŝablonojn al paĝoj hieraŭ, eble vi vidis tion. Mi kontrolos ĉu mi povas aldoni pli da detaloj, sed nun mi denove iomete devas laboro kiam mi estas en la laborejo, do mi ne havas tiom da tempo ;) Sed ni vidos.
amike Stefangrotz (diskuto) 08:41, 30 jan. 2025 (UTC)Reply
Nova tabelo kun la grandeco kaj la lasta redakto pretas nun Stefangrotz (diskuto) 11:05, 30 jan. 2025 (UTC)Reply
Dankon denove. Mi nur volas emfazi ke oni interesiĝas NE pri artikoloj sen ŝablonojn (kiel la titolo de la listo diras), sed pri mallongaj artikoloj kiuj ne havas la specifajn ŝablonojn nek Ĝermo nek Ĝermeto! Sj1mor (diskuto) 13:03, 30 jan. 2025 (UTC)Reply
Fartie. Sed la rezulto havas pli ol 6000 rezultoj, do la paĝo nun estas grandega. Stefangrotz (diskuto) 15:16, 30 jan. 2025 (UTC)Reply
Mi jam komenciĝis aldoni ŝablonojn, do vi verŝajne denove trovos ĝermojn en la listo. Stefangrotz (diskuto) 18:14, 30 jan. 2025 (UTC)Reply
Dankon. Gravas indiki ĉu la artikolo estas konektita, do havas vikidatumoN (kaj doni la identigilon). Ankaŭ eble oni deziruas filtri ekz la artikoloj pri jaroj. Sj1mor (diskuto) 13:16, 31 jan. 2025 (UTC)Reply
Mi pensas ke la granda teknika defio estas mezuri la malgrandecon laŭ la enhavo mem de la artikolo (do filtri la grandecojN de iuj ŝablonoj uzataj de la artikolo). Ekz., malgraŭ ke ĝi estas markita per ŝablono:ĝermeto, pri Blaine (Vaŝingtonio) la nuna versio taksas 5 060 bitokoj, sed la granda Informkesto geografiaĵo|urbo prenas la plejmulton de la grandeco.
PS. ŝablonoj kiel Koord, Projektoj, Referencoj, Vivtempo, bibliotekoj, formatnum, daton ne estas interesaj por montri. Se vi povas nombradi la nombron de (bluaj) Kategorioj per artikolo tiu povus esti ankaŭ interesa. Sj1mor (diskuto) 15:47, 31 jan. 2025 (UTC)Reply
La listo nun ankaŭ havas ligilojn al vikidatumo. Krei ĝin tenas pli ol 1,5 horojn, do mi ne povas fari ĝin ofte. Mi ne havos tempon dum la sekvaj tagoj, sed eble mi iam povos krei pli malgrandajn listojn sortitaj laŭ jaroj. --Stefangrotz (diskuto) 17:23, 31 jan. 2025 (UTC)Reply

Interesaĵo

[redakti fonton]

Saluton @ThomasPusch, eble tiu listo povus esti interesa ankaŭ por vi. Laŭ inspiro de vi, mi petis ĝia kreado de nia kolego Stefangrotz (vidu nia diskuto en la Projekto:La Senpaĝulinoj). Espereble tiu povus bone servi por la esperantlingva vikipedio. Se vi deziros iujn alĵustiĝojn bonvolu ne heziti peti la aŭtoro Stefangrotz. Fartu bone, amike Sj1mor (diskuto) 20:03, 29 jan. 2025 (UTC)Reply

@Sj1mor: Bedaŭrinde la supra komandaro estas kripta volapukaĵo por mi. Kvankam mia frato estas tre sperta informadikisto, mi intertempe dirus ke la informadika geno tute ne trafis min. Sed la preta rezulto Vikipedio:Mallongaj paĝoj sen ŝablonoj jes estas tute komprenebla al mi kaj ŝajnas tre utila. La unuan paĝon el la listo, 140-aj jaroj, mi hodiaŭ matene jam havis sur mia ekrano, kaj mi pripensis kiel procedi pri ĝi VP:FA#250-aj jaroj ni havis 5 pliajn paĝojn el la sama serio - tri estis buĉitaj kaj du mi pene kreskigis al bona paĝa reto: la jardekoj 480-aj jaroj kaj 490-aj jaroj. Tamen mi dirus ke la tempoinvesto por ĉiu jardeko ekde la unuaj piramidoj de Egiptio ĝis la meze de la mezepoko, kiam unuafoje estas ĉiuj 10 jardekoj de jarcento, sed tamen mizere malplenaj, estas tro granda. Tial reflekso estus tamen buĉi la "140-ajn jarojn" kiel ĵus la 250-aj, 830-aj kaj 850-aj jaroj. Sed entute ne necesas urĝi kaj malpacienci. La sorton de la ridinda mikrolisto la "140-ajn jaroj" ne necesas decidi ĉi-semajne. Do la listo Vikipedio:Mallongaj paĝoj sen ŝablonoj tamen estas bona superrigardo por vidi, kie oni kun limigita fortostreĉo povas plibonigi nun malkvalitan paĝon. Do dankon. ThomasPusch (diskuto) 20:53, 29 jan. 2025 (UTC)Reply

Sed paĝoj kiel la vakua paĝo Interlingvistikaj instancoj de nur 3 mizeraj vortoj estas ŝokaj. Se oni vidas la titolon en alia paĝo, ĝi aspektas tute nesuspektiga, kaj ŝajnas estis naiva normala artikolo. Sed ne! Kompreneble oni en 30 sekundoj povas aldoni al ĝi ŝablonojn {{polurinda|la enhavo estas absolute neakcepteble tro malmulta.}}{{ĝermeto|lingvistiko}} Fakte la du eblecoj estas nur tute buĉi la tuton aŭ vastigi ĝin al ĝerma artikolo pri la temo. Do oni devos iam provoke prezenti ĝin en la diskutejo "ĉu iu pretas kune savi la tekston? alikaze necesas buĉi ĝin". Kaj la kategorion "Problemoj" mi ankaŭ neniam vidis. Ĝi estas problemo, sed ĉu solvo estas simple meti ĉiujn 1015 problemojn de la listo en vikipedian kategorion "Problemoj" kune kun pedagogiaj tekstoj pri solvado de problemoj?? Neniel, estus plena stultaĵo! Sed ne ĉiuj paĝoj tiel senesperigas. Listo de persaj esperantistoj simple kunigeblas kun Listo de iranaj esperantistoj kaj poste estos alidirektilo al la restanta paĝo - tio estas solvo farebla en akceptebla tempo! Do jam nur estos 1015-1=1014 restaj problemoj . ThomasPusch (diskuto) 21:17, 29 jan. 2025 (UTC)Reply