Uzanto:Taw/Topologio de Vikipedio

El Vikipedio, la libera enciklopedio

Mi faris topologian analizon de Esperanta Vikipedio.

Analizo de pola Vikipedio estas ĉi tie: http://pl.wikipedia.com/wiki.cgi?Taw/Topologia_Wikipedii

Rezultoj:

Ĉiuj:

  • -1 1366 (31.93827449%)
  • 0 1 (0.02338087444%)
  • 1 53 (1.239186346%)
  • 2 601 (14.05190554%)
  • 3 1549 (36.21697451%)
  • 4 555 (12.97638532%)
  • 5 108 (2.52513444%)
  • 6 41 (0.9586158522%)
  • 7 3 (0.07014262333%)

Sume 4277

Sen redirektoj, diskusiaj paĝoj kaj malplenaj paĝoj:

  • -1 847 (24.75884244%)
  • 0 1 (0.02923121894%)
  • 1 48 (1.403098509%)
  • 2 565 (16.5156387%)
  • 3 1340 (39.16983338%)
  • 4 479 (14.00175387%)
  • 5 99 (2.893890675%)
  • 6 40 (1.169248758%)
  • 7 2 (0.05846243788%)

Sume 3421

  • 0 - ĉefpaĝo
  • (n+1) - unu kliko el (n) paĝo
  • -1 - malakcesebla

El tiu 847 paĝoj, 319 paĝoj estas orfaj, aliaj havas ligiloj sed estas malakcesebla el ĉefpaĝo.

En Pola Vikipedio (ete pli granda) nur 12.0% (586 el 4894) / 4.6% (198 el 4270) estas malakcesebla kaj nur 117 paĝoj estas orfaj.

Skripto (necesas mysql versio de databazo de vikipedio):

#!/usr/bin/ruby

require "mysql.so"

host = nil
user = nil
passwd = "***"
db = "wikipedia"

my = Mysql.new(host, user, passwd)
my.select_db db

def topology(my)
    order={}
    linked={}
    empty_redirect_or_talk={}

    res = my.query("SELECT cur_title FROM cur  WHERE cur_title LIKE 'Priparolu:%'
              OR cur_text LIKE '#redirect%'
              OR cur_text = '' ORDER BY cur_title")
    while row = res.fetch_row
	empty_redirect_or_talk[row[0]] = true
    end

    res = my.query("select cur_title from cur")
    while row = res.fetch_row
        order[row[0]] = -1
	linked[row[0]] = []
    end

    res = my.query("select distinct * from linked")
    while row = res.fetch_row
	linked[row[1]].push row[0]
    end

    cur_order = 0
#    cur_set = ["Polska_Wikipedia"]
    cur_set = ["Ĉefpaĝo"]
    begin
	cur_linked = []
	cur_set.each {|title|
	    order[title] = cur_order
	    cur_linked += linked[title]
	}
	cur_linked.uniq!
        new_set = []
        cur_linked.each {|title|
	    if order[title] == -1
		new_set.push title
		order[title] = cur_order
    	    end
	}
	cur_set = new_set
        cur_order += 1
    end until cur_set.empty?

#   With empty redirect and talk
    group_by_order = {}
    order.each {|k,v|
        group_by_order[v] = [] unless group_by_order[v]
	group_by_order[v].push k    
    }
    group_by_order.sort.each {|k,v|
	print "* ",k," ",v.size," (#{v.size*100.0/order.size}%)\n"
    }
    print "Total #{order.size}\n\n"
#   Without empty redirect and talk
    group_by_order = {}
    total = 0
    order.each {|k,v|
	next if empty_redirect_or_talk[k]
        group_by_order[v] = [] unless group_by_order[v]
	group_by_order[v].push k
	total += 1
    }
    group_by_order.sort.each {|k,v|
	print "* ",k," ",v.size," (#{v.size*100.0/total}%)\n"
    }
    print "Total #{total}\n\n"
#   esat accessible
    group_by_order.sort.each {|k,v|
	if k >= 6
	    v.each {|t|
		print "* ",k," [[",t,"]]\n"
	    }
	end    
    }
    print "\n"
end

def lonely(my)
# user pages don't exist yet
    res = my.query("SELECT cur_title FROM cur
            WHERE cur_title NOT LIKE 'Priparolu:%'
              AND cur_text NOT LIKE '#redirect%'
              AND cur_text != '' ORDER BY cur_title")
    p = []
    while row = res.fetch_row
	p.push row[0]
    end
    res = my.query("SELECT DISTINCT linked_to FROM linked ORDER BY linked_to")
    l = []
    while row = res.fetch_row
	l.push row[0]
    end
    r = p - l
    r.each {|lp|
	print "* [[", lp, "]]\n"
    }
    print "\n"
end

def wanted(my)
    res = my.query("SELECT unlinked_to, COUNT( DISTINCT unlinked_from ) AS ulf
            FROM unlinked
            GROUP BY unlinked_to
            ORDER BY ulf DESC
            LIMIT 100")
    while row = res.fetch_row
	print "* ", row[1], " [[",row[0],"]]\n"
    end
    
end

topology(my)
lonely(my)
wanted(my)


Legu ankaŭ : Taw