Friday, July 2, 2010

Social Network Mining

Das Projekt mit den Bachelor Studenten ist jetzt fertig. Das Ziel des Projekts war, die unterschiedlichen SocialNetwork-Daten zu konsolidieren und alle Kontakte einer eingegebenen Person als ein Graphobjekt anzuzeigen. Das Jung-Framework von Sourceforge wurde in der GUI Schicht verwendet, um die Daten in einer bestimmten Format anzuzeigen. Die Anwendunglogik kümmert sich um das Umwandeln der unterschiedlichen Network-Personklassen in eine bestimmte Personklasse, die wiederum eine Subclass der Vertex-Klasse in Jung-Framework ist. Jede Beziehung ist ein Edge-Objekt. Die Datenschicht verwendet im Hintergrund die entsprechenden API’s von jeweiligen SocialNetworks (zur Zeit nur von Facebook und LinkedIn). Die Komponente wurden voneinander entkoppelt, dass sie eine mühelose Erweiterung und Verwendung von anderen SocialNetwork-Daten ermöglichen. Hier ist ein Bild unserer Schichten:

SNM_Arch 

 Dank an Stefan Britze

Zum Beispiel, um das XING-Network in die Anwendunglogik einzubauen braucht man nur in der MapperManager.java eine Funktion zu definieren:

 

/**
*
* @param a collection of PersonGeneral (XING) will be mapped into a Person instance.
* @return a collection of Person with individual properties which defines them.
*/
private Collection<Person> extractXing(Collection<PersonGeneral> np) {
     Collection<Person> ret = new ArrayList<Person>();

     for (Iterator i = np.iterator(); i.hasNext();) {
         //for each PersonGeneral create a Person and add it into ret
         PersonXing temp = (PersonXing) i.next();

         Person p = new Person(temp.getUID(), temp.getLast_name(), temp.getFirst_name(), temp.getName(), temp.getPic_small());
         //Special for PersonXing
         Property propEmail = new Property("companyName", temp.getCompanyName());
         p.addProperty(propEmail);
         p.setDescriptor(new NetworkDescriptor("xing"));
         ret.add(p);
     }
     return ret;
}

 

und in der gleichen Klasse eine kleine Erweiterung machen:

Mapper xm = MapperFactory.getMapperInstance(MapperType.XING);
Collection<PersonGeneral> xPerson = xm.getFriendsOf(p);
        if (xPerson.size() > 0) {
            people = extractXing(xPerson);
        }

Der komplette Quellcode wird in kürze hier veröffentlicht.

1 comment:

Anonymous said...

Took me time to read the whole article, the article is great but the comments bring more brainstorm ideas, thanks.

- Johnson