om autoriteter i brugerskabt indhold

Den bedste internet søgemaskine på markedet idag er baseret på begreberne ‘hubs’ og ‘authorities’. En ‘authority’ opfattes som en side der er central i et netværk for et givent emne og opfattes af netværket som centralt for emnet. En ‘hub’ er et knudepunkt i netværket der indeholder mange henvisninger til øvrige steder.

Efterhånden som flere og flere steder på internettet tillader brugerskabt indhold så mener jeg at vi må ændre på beregning af autoritet vha af henvisninger i et netværk. F.eks på ‘blogs’ så indeholder kommentarer typisk en henvisning tilbage til hjemmesiden til ham eller hende der har skrevet kommentaren, derved vender vi op og ned på hvad en ‘hub’ og en ‘authority’ er – idet linket nu går den anden vej i kommentaren.

Den traditionelle ‘hubs’ and ‘authorities’ model

Hvis vi i den traditionelle situation betragter et endeligt antal websider uden brugerskabt indhold i et sæt {1,2, … ,n} så kan vi opstille en matrice B med links i mellem de forskellige websider hvor 1 markerer at der link mens 0 markerer intet link – indgang (i,j) i B markerer så at der er et link fra i til j.

Hvis vi så yderligere betragter ‘hubs’  som og authorities

Så kan vi beregnene vægtene i netværket således :

og     

Hvis vi itererer en gang så når vi

og  

næste iteration giver

og

Den matematisk kyndige læser vil her indse at at resultaterne vil konvergere imod de principielle egenvektorer for og

Rent intuitivt ses det at samlingen af autoritetsvægte for siderne i netværket udtrykker at en gennemsøgning i netværket vil have større sandsynlighed for at ende på en side hvor vægten er større end på en side hvor vægten er lille.

Google har benyttet princippet til at opstille deres PageRank

Hvor er antallet af links ud fra side og d er valgt til 0.85.

Min mulige ændring af beregning af autoriteter

Når vi betragter modeller hvor “autoritet” tages som et udtryk for at en læser vil have høj sandsynlighed for at opleve en henvisning fra side A til side B som autoritet, så vil et brugerskabt links fra A til B have mulighed for at vende situationen om. Et kendt eksempel er ved brugen af blogs, hvor en hyppig bruger af mange blogs vil opnå mange indgående links (Man kunne kalde det en ‘invers hub’). Brugen af henvisninger i brugerskabt indhold går nu fra at være en måde at udtrykke mening om relevans inden for et emne til at udtrykke interesse for et emne.

Det er så her at jeg tænker på om man kan finde de typiske steder hvor brugeren af blogs skriver på og foretage tilpasninger af link-beregningen der. Lad os antage at vi kunne finde en passende måde at beregne om der er tale om lille koncentreret klynge af websteder der henviser til hinanden . Efter at have opnået listen af sider kunne vi ændre på den vægt der tilføjes pr iteration ved betragtninger over linkafstanden til klyngecenteret. Altså at hvis vi betrager et websted , der er inde i den lille klynge, så har et link ikke så stor betydning som hvis det optrådte udenfor.

Stackoverflow!

Normalt forbinder jeg stackoverflow med noget negativt – men her for nyligt , så har jeg fundet gode svar på en del spørgsmål på http://stackoverflow.com

se eksempelvis:

Bemærk at der er angivet et antal votes for hvert svar. Her er det angivet hvor mange der har syntes at svaret er godt .  På den facon får du en ledetråd om hvilket svar der er mest accepteret blandt de andre der læser på webstedet.

Brug af java reflection til at generere JSON data

Jeg arbejder iøjeblikket på en opgave , hvor jeg har behov for at bringe datamodellen ud til behandling i javascript på en nem facon . Ifbm med denne opgave har jeg tænkt på hvordan man kunne gøre det vha reflection.

Hvis vi antager flg klasser :


class A{
public int B;
public int C;
public D F;
public D G;
};

class D {
public String E;
}

og at de var initialiseret således:

A a=new A();
a.B=1;
a.C=2;
a.F=new D();
a.F.E="test";
a.G=new D();
a.G.E="test2";

Så kunne man kigge på selve java objekterne vha reflection for at generere JSON output til bruge i javascript således:


public class JsonEmit{
public static String emit(Object target) throws Exception{
StringBuilder sb=new StringBuilder();
sb.append("{");
Class targetClass=target.getClass();
Field[] publicFields = targetClass.getFields();
for (int i=0;i String sFieldName = publicFields[i].getName();
Class typeClass = publicFields[i].getType();
String sFieldType = typeClass.getName();
Object value = publicFields[i].get(target);
if(value!=null){
sb.append(sFieldName+":");
if(typeClass.isPrimitive()
||sFieldType=="java.lang.String"){
sb.append("""+value.toString()+""");
}else{
sb.append(JsonEmit.emit(value));
}
}
if(i!=(publicFields.length-1))
sb.append(",");
}
sb.append("}");
return(sb.toString());
}

På den facon vil man kunne genere JSON ved et simpelt kald til

JsonEmit.emit(a)

hvorefter man vil se

{B:"1",C:"2",F:{E:"test"},G:{E:"test2"}}