Uzanto:Taw/Topologio de Vikipedio
Aspekto
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