Monday, November 24, 2008

Blatt 3

1.

a)

<element name=”kochbuch”>
  <complexType >
    <element name=”rezept” minOccurs=”1” maxOccurs=”unbound”>
      <complexType>
        <sequence>
          <element name=”rezepttyp”>
            <complexType>
              <attribute name=”name” type=”string” use=”required”/>
            </complexType>
          </element>
          <element name= “titel” type =”string”/>
          <element name= “zutat” type=“string“ minOccurs=”1” maxOccurs=”unbound”/>
          <element name= “arbeitsschritt” type=”string” minOccurs=”1” maxOccurs=”unbound”/>
            <complexType>
              <attribut name=”nummer” type=”short” use=“required“/>
            </complexType>
          </element>
        </sequence>
      </complexType>
    </element>
  </complexType>
</element>

b) 'int' ist auf 32 bit begrenzt, 'integer' jedoch "unbegrenzt".

c)

<complexType name=“person“>
  <sequence>
    <element name=“last“ type=“string“ minOccurs=“0“ maxOccurs=“unbounded“/>
    <element name=“first“ type=“string“/>
    <element name=”affiliation” type=”string”/>
  </sequence>
</complexType>

<element name =“bib“>
  <complexType>
    <element name=“book“ minOccurs=“0“ maxOccurs=“unbound“>
      <complexType>
        <sequence>
          <element name=”title” type=”string” use=”required”/>
            <choice>
              <element name=”author” type=”person” minOccurs=”0” maxOccurs=”unbound”/>
              <element name=”editor” type=”person” minOccurs=”0” maxOccurs=”unbound”/>
            </choice>
          <element name=”publisher” type=”string” use=”required”>
          <element name=”price” type=”string” use=”required”/>
        </sequence>
        <attribute name=”year” type=”year” use=”optional”/>
      </complexType>
    </element>
  </complexType>
</element>

2.

a)

1)
'5 heaviest buildings moved' liefert 'http://science.howstuffworks.com/heaviest-building-moved.htm' an erster Stelle.
2)
Ernest Hemmingway
'sportreporter sylvia beach' liefert 'content.grin.com/document/v18845.pdf' an erster Stelle.
3)
Jayne Mansfield
'künstler "im alter von 34 jahren" herzinfarkt' liefert 'http://www.steffi-line.de/archiv_text/nost_3filmusa/22_mansfield.htm' an erster Stelle.
4)
Phaidon Press Inc

'amazon stationary journal cartoonist' liefert 'http://www.amazon.com/Sempe-Journal-Stationery-Editors-Phaidon/dp/0714845507' an erster Stelle.

b) leider noch nicht fertig

Monday, November 17, 2008

Aufgabenblatt 2

1.
a)

- Kfz-Kennzeichen
- Steuer-Identifikationsnummer / social security number
- MAC-Adresse
- Personalausweisnummer
- PURL
- NBN (national bibliography number)
- ISSN (International Standard Serial Number)
- Das info-scheme wurde von der Library of Congress eingeführt um Publikationen etc. zu identifizieren. 'The most pressing need was to find a way to use URIs to reference information assets that have identifiers in public namespaces but had no representation within the URI allocation – for example, LCCNs.'
http://www.loc.gov/standards/uri/info.html
- RFC3966 - The tel URI for Telephone Numbers
http://www.faqs.org/rfcs/rfc3966.html
- RFC1521 - MIME (Multipurpose Internet Mail Extensions)
http://www.faqs.org/rfcs/rfc1521.html
- LDIF
http://en.wikipedia.org/wiki/LDAP_Data_Interchange_Format

b)
identification = continent“.“country“.“address“.“name
address = city“_“zip“_“street“_“number
name = firstNames“_“lastName

Probleme:
- Unterschiedliche Adressschemata in unterschiedlichen Ländern
- Der Fall, dass eine Adresse auf zwei oder mehr Personen mit gleichem Namen zutreffen könnte, kann stets auftauchen, da kein weltweites Identifikationsnummernsystem für Personen existiert. Namen sind nicht eindeutig. Ausweis- und Sozialversicherungsnummern sind nicht international standardisiert.

Fazit: Realisierung nur begrenzt möglich und unter starken Annahmen bezüglich der Einzigartigkeit.

c)
http://identification (1.b))

d)
URI- Dubletten:
Hashtabelleneintragsvergleiche können aufgrund Speicherbeschränkungen nicht endlos durchgeführt werden.


Webseitendubletten:
Der Inhalt muss jeweils komplett gelesen und dann mit jedem bereits besuchten Dokument verglichen werden, was wiederum Unmengen an Zeit- und Speicherverbrauch mit sich zieht, da jedes Dokument komplett heruntergeladen und gespeichert werden muss.

Um festzustellen, dass zwei Dokumente identischen Inhalts sind, müssen sie erst komplett heruntergeladen werden und komplett 'gecrawlt' werden. Dann ist est für Optimierung schon zu spät.

2.
a)

http://myhpi.de/~martin.konarski/hcard.html

b)

http://maps.google.com/maps?q=http%3A//suda.co.uk/projects/microformats/geo/get-geo.php%3Ftype%3Dkml%26uri%3Dhttp%253A//myhpi.de/%257Emartin.konarski/hcard.html

3.
a)

Das Wurzelelement dieser DTD ist "kochbuch", welches mindestens aus einem "rezept" besteht. Ein "rezept" wiederum kann genau einen "rezepttyp" und genua einen "titel" besitzen, muss aber zumindest eine "zutat" und einen "arbeitsschritt" haben. "titel", "zutat" und "arbeitsschritt" besitzen vom Parser betrachtete Zeichenketten, während der "rezepttyp" keinerlei Zeichenketten beinhaltet und daher ein leeres Element ist. Ein "arbeitsschritt" besitzt zwingend eine "nummer", die durch eine Zeichenkette repräsentiert wird. Ein "rezepttyp" besitzt zwingend zwingend einen "namen", welches ebenfalls durch eine einfache Zeichenkette repräsentiert ist.

b)
Die XML-Datei ist nicht konform, da die in dem Element "rezept" angegebene Reihenfolge in der Liste der Unterelement nicht eingehalten wurde. In der DTD steht "zutat" vor "arbeitsschritt" in der Liste, während im XML zuerst der "arbeitsschritt" "Chillis zugeben" vor den einzelnen "zutaten" auftaucht. Ansonsten ist die XML-Datei zur DTD konform, da sämtliche Besonderheiten (Häufigkeiten der Elemente, leeres Element, Zwangsangabe eines Attributs) eingehalten wurden.

4.
a)

In welchem Film aus den siebziger Jahren stirbt der Protagonist ohne Vornamen am Ende in einem weißen Auto?

Vanishing Point -> http://www.youtube.com/watch?v=ySfbocEAmcs

Welches Nagetier kann länger als ein Kamel ohne Wasser auskommen?

Ratte -> http://www.nickfessler.com/Wisdom/32_Unknown_Facts.html

Zwischen welchen beiden Internetkritikern von Unterhaltungsmedien vergangener Tage brach im April 2008 eine 'Beschimpfungsfehde' aus?

Angry Video Game Nerd & Nostalgia Critic -> http://www.cinemassacre.com/new/?p=252

b)

http://myhpi.de/~martin.konarski/crawler.jar

Monday, November 10, 2008

Lösungen Blatt 1

1.
a)
1. Anzahl der Webadressen / Dokumente
- wenn alle Adressen / Dokumente bekannt wären, dann wäre somit das gesamte Web erfasst
- es ist unmöglich alle zu erfassen
- die ermittelte Größe berücksichtigt keinerlei Inhalte von Seiten, sie macht eine Aussage über die Struktur und Komplexität des Webs

2. Größe der Gesamtdatenmenge
- gleiches Problem wie a) 1. , unmöglich zu ermitteln, jedoch wäre logischerweise das gesamte Web erfasste
- wieder erhielte man “nur“ ein sehr große Zahl, die zwar sicherlich sehr beeindruckend wäre, jedoch nicht weiter interessant

3. Anzahl der Teilnehmer
- unmöglich zu messen
- macht keinerlei Aussage über die Größe des Webs an sich
- auch hier, lediglich große Zahl

4. Anzahl der registrierten Domains
- gibt keine Aussage über wirkliche Anzahl der Dokumente und Unterseiten hinter der Domain
- im Vergleich zu den anderen Größen relativ einfach zu ermitteln → Domains müssen registriert sein.
- Seiten ohne Domainnamen werden jedoch ignoriert und registrierte Domains können unbenutzt sein

b)
1. Umsetzung durch Webcrawler. Je größer die Anzahl der Webseiten wird, desto mehr Speicher und CPU Zeit wird benötigt. Durch sich ständig ändernde Inhalte recht ineffizient.

2. Ähnlich wie b) 1. durch Webcrawler, der die Größe aller Dokumente / Dateien speichert.

3. unmöglich zu messen

4. registrierte Domains zählen

c) Probleme eines Webcrawlers:
- benötigt viel Speicherplatz und muss um effizienter zu arbeiten hochgradig parallel laufen
- muss Ringverweise erkennen, was bei der großen Datenmenge schwierig werden kann bzw. bei ungenügendem RAM sehr langsam
- passwortgeschützte Seiten können nicht durchsucht werden
- Links können kein Ergebnis liefern, da z.B. die Adresse nicht mehr existiert, der entsprechende Server gerade offline oder einfach nur sehr langsam ist.
- Seiten die nicht von anderen Seiten verlinkt sind werden nicht gefunden. Es kann passieren, dass nur eine sehr kleine, abgeschlossene Teilmenge von Seiten gefunden wird, z.B. es wird auf einer Seite begonnen, die keine externe Seite verlinkt.
- Neue Inhalte auf schon durchsuchten Seiten können neue Suche nötig machen
→ ständige Aktualisierung wäre nötig. Könnte behoben werden indem Suchmaschine von der Seite informiert wird, dass neue Inhalte hinzugekommen sind.

d)

/**
*
*/
package uebung1;

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WebCrawler {

// initial pages
private final static String[] PAGES = new String[] { "http://www.web.de" };

// mapping from URL to crawled or not
private Map pages = null;

private String currentPage = null;

private int errorCount = 0;

private long start = 0;
private long end = 0;

/*
* Probleme: -relative pfade zusammenbasteln...de/test/ kann auch ein Blatt
* sein, d.h. relativer Pfad existiert nicht
* (http://www.hpi.uni-potsdam.de/meinel/projects/lock-keeper/meinel/research.html)
* -keine BerŸcksichtigung von anderen Dateiformaten...pdf, .mpg usw.
* -verschlŸsselte Seiten -passwortgeschŸtze Seiten -mit captchas geschŸtzte
* Seiten -verschiedene URLs verweisen auf die gleichen Seiten
*
*/

/**
*
*/
public WebCrawler() {
pages = new HashMap();

for (String page : PAGES) {
pages.put(page, false);
}

start = System.currentTimeMillis();

while (pages.containsValue(false)) {
for (String key : pages.keySet()) {
if (!pages.get(key).booleanValue()) {
currentPage = key;
break;
}
}
getPage(currentPage);
pages.put(currentPage, true);
}
}

/**
* Builds up a connection to a page and reads it.
*
* @param page
*/
private void getPage(String page) {

try {
URL url = new URL(page);
URLConnection urlConn = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
urlConn.getInputStream()));

String inputLine;
while ((inputLine = in.readLine()) != null) {
getUrlsFromPageContent(inputLine);
}

in.close();
} catch (Exception ex) {
System.out.println("Fehler beim Lesen aufgetreten: " + ex);
pages.remove(page);
errorCount++;
}
}

/**
* Collects urls from a given html-string.
*
* @param html
*/
private void getUrlsFromPageContent(String html) {

// define regular expression
Pattern p = Pattern.compile("<a.*?href=\".*?\".*?</a>");
Matcher m = p.matcher(html);

while (m.find()) {
String htmlPart = html.substring(m.start(), m.end());
int indexOfFirstQuotation = htmlPart.indexOf("\"") + 1;
String url = htmlPart.substring(indexOfFirstQuotation, htmlPart
.indexOf("\"", indexOfFirstQuotation));

// handle relative paths
if (!url.startsWith("http") && !url.startsWith("ftp")) {
// do not handle the relative paths in case the current page is
// a "leaf"
if (currentPage.contains("htm") || currentPage.contains("php")) {
continue;
}
if (url.startsWith("/")) {
if (currentPage.endsWith("/")) {
url = url.substring(1);
}
} else {
if (!currentPage.endsWith("/")) {
url = "/" + url;
}
}
url = currentPage + url;
}

// add new URL
if (!pages.containsKey(url)) {
pages.put(url, false);

int size = pages.size();
if (size % 100000 == 0) {
end = System.currentTimeMillis();
System.out.println((end - start) / 1000
+ " seconds; found pages: " + size
+ "; error count: " + errorCount);
System.out.println(currentPage);

// serialize pages in order to determine size of data
// structure
// try {
// ObjectOutputStream out = new ObjectOutputStream(
// new FileOutputStream("data.out"));
// out.writeObject(pages);
// out.close();
// } catch (IOException ex) {
// System.out.println(ex);
// }
}
}
}
}

/**
* @param args
*/
public static void main(String[] args) {
new WebCrawler();
}

}


- 100.000 Seiten ausgehend von www.web.de erfasst, allerdings ist die Gültigkeit/Erreichbarkeit der Seiten noch nicht sicher
Dauer: 5 min
Größe der verwendeten Datenstruktur: 42,3 MB Speicherplatz für die auf der
Festplatte abgelegte serialisierte HashMap
- 10^12 Seiten
5 min * 10.000.000 = 95,13 Jahre
42,3 MB * 10.000.000 = 423 TB

2.
a)
– Um die goldene Toilette benutzen zu dürfen.
– http://wcar.alrc.net/mainfile2.php/For+the+negative/8/
– lam sai wing hongkong 1000 dollars
– 6
– 5 min

b)
– Da Berufstätigkeit bei Frauen strikt auf die Zeit vor der Ehe beschränkt war.
– http://de.wikipedia.org/wiki/Fräulein#Anrede_.E2.80.9EHerr.E2.80.9C_vs._.E2.80.9EFrau_oder_Fr.C3.A4ulein.E2.80.9C
– lehrerin fräulein wiki
– 1
– 0 min

c)
– Tadschikistan
– http://www.imf.org/external/np/sec/nb/2000/nb0097.htm
– currency reform 2000
– 3
– 5 min inkl. Check auf wikipedia mit 'Somoni'

d)
– Hawaii
– http://distancecalculator.globefeed.com/World_Distance_Calculator.asp
http://de.wikipedia.org/wiki/Bundesstaat_der_Vereinigten_Staaten
– botswana us state distance
– 3
– 10 min (testen von Washington, Kalifornien und Hawaii)

e)
– Tycho Brahe
– http://de.wikipedia.org/wiki/Tycho_Brahe?title=Spezial:Booksources&isbn=3518369903
– hamburg-wandsbek harnverhaltung
– 2
– 1 min

f) Schwierigkeit:
- sich in den Kopf von Leuten versetzen, die über das Thema schreiben, um gute Suchworte abzuleiten,
- Suchmaschine kann Zusammenhänge der Suchworte nicht erkennen und sucht stur nach Übereinstimmungen in Dokumenten, jedoch nicht deren Bedeutung

3.
a)
- Aktualität: Sind die Treffer (tages-)aktuell? Es sollten beispielsweise keine veralteten oder überholten Antworten kommen.
- Abdeckung: Wird wirklich jede mögliche Seite (das 'gesamte Internet') durchsucht? Die beste Suchmaschine nützt nichts, wenn sie nur zwei Seiten kennt und meine gesuchte Information auf einer dritten steht.

(Wichtiger als objektive Qualität ist aber eigentliche die subjektive Qualität. Habe ich gefunden, was ich gesucht hab?)

b)

Eine Möglichkeit die Mächtigkeit einer semantischen Suchmaschine zu zeigen ist die Verwendung von natürlicher Sprache zur Suche. Eine weitere Möglichkeit ist das finden von Informationen durch Eingabe von Synonymen der Informationen.