Archiv | Februar, 2013

Informatik Publikationen der Universität Paderborn

25 Feb

Open Access Publikationen sind frei zugänglich und eignen sich, um einen Eindruck über die Forschung in einem Fachgebiet zu bekommen. Für Autoren bringt die Veröffentlichung im Web auch Vorteile, da elektronische Publikationen nach gegenwärtiger Erfahrung häufiger zitiert werden (DFG).

In meiner Abschlussarbeit beschäftige ich mich mit der Generierung von Vorschlägen für wissenschaftliche Publikationen. Diese Vorschläge werden automatisch berechnet. Daher ist es nötig zu prüfen, ob diese Vorschläge Sinn ergeben.

Eine Möglichkeit der Prüfung ist der Vergleich mit Datensammlungen, die von Menschen klassifiziert wurden. Ein Beispiel ist der Cora Datensatz. Eine andere Variante ist eine stichprobenartige Prüfung. Um einen Zusammenhang zwischen Publikationen bewerten zu können, ist allerdings eine gewisse Expertise erforderlich. Und diese ist bei Forschern, Lehrenden und Studierenden zu finden.

Einen Überblick über Informatik-Themen, die an der Uni Paderborn behandelt werden, erhält man durch einen Blick in die Publikationslisten. Diese sind auf den Webseiten der einzelnen Fachgebiete zu finden. Die Veröffentlichung der Dateien im Web bringt den Autoren potenzielle Leser und dadurch vielleicht auch die ein oder andere Zitierung. Für diejenigen, die an einer Sammlung der frei zugänglichen PDFs interessiert sind, sollte diese Tabelle mit Listen von PDF-Dateien nützlich sein:

Fachgebiet Publikationen
Model Driven Software Engineering 0 Dateien
Didaktik der Informatik 37 Dateien
Codes und Kryptographie 60 Dateien
Algorithmen und Komplexität 0 Dateien
Electronic Commerce und Datenbanken 2 Dateien
Technische Informatik 76 Dateien
Computergrafik, Visualisierung und Bildverarbeitung 69 Dateien
Custom Computing 54 Dateien
Swarm Intelligence 211 Dateien
Entwurf paralleler Systeme 0 Dateien
Datenbank und Informationssysteme 363 Dateien
Softwaretechnik 0 Dateien
Theorie verteilter Systeme 213 Dateien
Rechnernetze 155 Dateien
Programmiersprachen und Übersetzer 32 Dateien
Sicherheit in Netzwerken 11 Dateien
Kontextuelle Informatik 0 Dateien
Mensch-Computer-Interaktion und Softwaretechnologie 0 Dateien
Wissensbasierte Systeme 16 Dateien
Spezifikation und Modellierung von Softwaresystemen 18 Dateien

Insgesamt 1317 Dateien und 1,3 Gigabyte (ermittelt mit du -sch).

Creative Commons Lizenzvertrag Dieses Werk bzw. Inhalt steht unter einer Creative Commons Namensnennung 3.0 Deutschland Lizenz.
Wenn möglich, verwenden Sie doch einen Link zum Originalartikel:
Adrian Wilke: Informatik Publikationen der Universität Paderborn.

Die Levenshtein-Distanz in MySQL

13 Feb

Man stelle sich vor, man hat eine größere Menge wissenschaftlicher Publikationen gesammelt. Nehmen wir mal vorsichtig an, es sind zumindest viele Tausend. Und diese Dokumente zitieren und referenzieren sich untereinander. Da kommt es vor, dass sich Tippfehler in Literaturverzeichnissen einschleichen und die Titel eigentlich identischer Dokumente sich nicht mehr vollkommen gleichen. Die Titel eigenen sich aber eigentlich sehr gut, um eine Publikation zu identifizieren. Dementsprechend kommt es bei Analysen der Beziehungen zwischen den Dokumenten zu Folgefehlern.

Um Ungleichheiten in Zeichenketten großzügig zu behandeln, kann man die Levenshtein-Distanz nutzen. Diese vergleicht zwei Zeichenketten und gibt die minimale Anzahl von Operationen (Einfügen, Löschen und Ersetzen) an, die benötigt werden, um die erste Zeichenkette die zweite umzuwandeln. Anstatt Titel auf vollkommene Gleichheit zu überprüfen, ist es hiermit also z.B. möglich, kleinere Ungleichheiten zu tolerieren.

Es gibt eine ganze Reihe von Implementierungen in verschiedenen Sprachen, z.B. in PostgreSQL. Zurzeit arbeite ich allerdings mit MySQL. Hier ist die Funktion nicht von Haus aus installiert, es gibt aber zumindest eine UDF (User Defined Function), die auf der GitHub Seite von Juan Miguel Cejuela zu finden ist. Und da die Einbindung doch ein paar Minuten in Anspruch genommen hat, folgt hier ein kleines HowTo.

Installation

Zunächst lädt man die Datei levenshtein.c runter und folgt den Installationsanweisungen im Kommentar. Bei mir fehlten zusätzliche Codedateien:

$ gcc -o levenshtein.so -shared levenshtein.c
levenshtein.c:33:23: fatal error: my_global.h: No such file or directory
compilation terminated.

Den Sourcecode kann man in Mint/Ubuntu/Debian so beziehen:

$ sudo aptitude install mysql-source-5.5

Als Nächstes wird die benötigte Datei ausfindig gemacht:

$ dpkg -L mysql-source-5.5
/.
/usr
/usr/src
/usr/src/mysql
/usr/src/mysql/mysql-source-5.5.tar.gz
/usr/share
/usr/share/doc
/usr/share/doc/mysql-source-5.5
/usr/share/doc/mysql-source-5.5/copyright
/usr/share/doc/mysql-source-5.5/changelog.Debian.gz

Das Archiv wird entpackt:

$ tar -xzf /usr/src/mysql/mysql-source-5.5.tar.gz

In den extrahierten Dateien wird nach der benötigten Headerdatei gesucht:

$ find ./ -iname "my_global.h"
./source/mysql-5.5/include/my_global.h

Ein erneuter Versuch, zu kompilieren. Dieses Mal mit Angabe des Verzeichnisses der Headerdatei:

$ gcc -o levenshtein.so -shared levenshtein.c -I source/mysql-5.5/include/
In file included from levenshtein.c:33:0:
source/mysql-5.5/include/my_global.h:77:23: fatal error: my_config.h: No such file or directory
compilation terminated.

Suche der zweiten fehlenden Datei:

$ find ./ -iname "my_config.h"
./source/mysql-5.5/builddir/include/my_config.h
./source/mysql-5.5/builddir/packaging/rpm-uln/my_config.h
./source/mysql-5.5/packaging/rpm-uln/my_config.h

Dieses Mal klappt das Kompilieren:

gcc -o levenshtein.so -shared levenshtein.c -I source/mysql-5.5/include/ -I source/mysql-5.5/builddir/include/

Suche nach dem MySQL Plugin Verzeichnis:

$ mysql
mysql> show variables;
+----------------+------------------------+
| Variable_name | Value | |
+----------------+------------------------+
| plugin_dir | /usr/lib/mysql/plugin/ |
+----------------+------------------------+

Kopieren der erstellten Datei ins MySQL Plugin Verzeichnis:

$ sudo cp levenshtein.so /usr/lib/mysql/plugin/

MySQL als root Starten und die Funktion erstellen:

$ mysql -uroot
mysql> CREATE FUNCTION levenshtein RETURNS INT SONAME 'levenshtein.so';
Query OK, 0 rows affected (0.07 sec)
mysql> CREATE FUNCTION levenshtein_k RETURNS INT SONAME 'levenshtein.so';
Query OK, 0 rows affected (0.01 sec)

Test:

mysql> select levenshtein('hello', 'world');
+-------------------------------+
| levenshtein('hello', 'world') |
+-------------------------------+
| 4 |
+-------------------------------+
1 row in set (0.00 sec)

Vladimir Levenshtein (Deutsche Übersetzung) hat den Algorithmus übrigens 1965 veröffentlicht.

Hier ist noch ein Backup der Datei mit dem C Code.

Creative Commons Lizenzvertrag Dieses Werk bzw. Inhalt steht unter einer Creative Commons Namensnennung 3.0 Deutschland Lizenz. Wenn möglich, verwenden Sie doch einen Link zum Originalartikel: Adrian Wilke: Die Levenshtein-Distanz in MySQL.

Literaturverzeichnis für URLs in LaTeX

8 Feb

Wie bindet man vorteilhaft URLs in Seminar- und Abschlussarbeiten ein? Obwohl manch Alteingesessener solche Webadressen gar nicht in einem wissenschaftlichen Text sehen mag, stecken in diesen kleinen Verweisen für viele Leser wertvolle Zusatzinformationen.

Eine Möglichkeit der Unterbringung ist, die gesammelten Adressen dem Literaturverzeichnis hinzuzufügen. Dieser Ansatz ist stimmig, wenn die hinzugefügten URLs auf Texte verweisen, die wissenschaftlichen Publikationen ähneln. Dabei sollte aber nicht vergessen werden, eine Notiz mit der Information darüber hinzuzufügen, wann die entsprechende Seite eingesehen wurde.

Ein anderer Ansatz ist, URLs als Fußnote mit einem footnote an das Seitenende zu setzen. Kombiniert mit dem url Befehl, einem passenden Titel und dem Datum des Zugriffs ist dies auch eine schöne Lösung. Diese bietet sich an, wenn die verlinken Seiten vor allem Zusatzinformationen darstellen und ein Verweis als Randnotiz bereitgestellt werden soll. Bei einer längeren Arbeit könnte diese Lösung für jemanden, der gezielt nach einer Webadresse sucht, lästig sein.

Bisher war ich mit diesen Alternativen recht zufrieden. Es scheint allerdings, als würde meine aktuelle Arbeit ein längerer Text mit einigen URLs werden. Also wären einerseits die Adressen bei der Fußnoten-Lösung zu verstreut, auf der anderen Seite häufen sich bei dem langen Text auch viele klassische Literaturangaben an, was recht unübersichtlich werden könnte. Also entstand der Wunsch, URLs übersichtlich beieinander aufzulisten und auf diese verweisen zu können. Die erste Idee war, mittels label und ref alle Adressen im Anhang zu verstauen. Nach einer Recherche habe ich jetzt eine bessere Lösung: Zwei getrennte Bibliografien.

Verwendung mehrerer Literaturverzeichnisse

Auf UK List of TeX FAQ: Multiple bibliographies? gibt es mit multibbl, multibib, bibtopic und splitbib gleich vier Ansätze für die Verwendung mehrerer Bibliografien. Ich habe mich hier für multibib entschieden. Das Paket musste in meinem Fall erst installiert werden. Dazu gibt es hier eine kurze Anleitung: Adding a new package to a latex install on linux. Dabei muss multibib runtergeladen, entpackt und anschließend die Dateien auffindbar gemacht werden:

latex multibib.ins
sudo mkdir /usr/share/texmf/tex/latex/multibib
sudo cp multibib.sty /usr/share/texmf/tex/latex/multibib
sudo texhash

Nun können neue Befehle zur Referenzierung definiert und genutzt werden. Hier ein Minimalbeispiel für zwei getrennte Literaturverzeichnisse:

multibib.tex

\documentclass{scrartcl}
\usepackage{multibib}
\usepackage{hyperref}
\newcites{Refs,Urls}{Literaturverzeichnis,Verzeichnis der Webadressen}
\begin{document}
\bibliographystyleRefs{plain}
\bibliographystyleUrls{plain} % Erstes Beispiel
%\bibliographystyleUrls{urls} % Zweites Beispiel
\nociteRefs{*}
\nociteUrls{*}
\bibliographyRefs{Bibliography}
\bibliographyUrls{BibliographyUrls}
\end{document}

Bibliography.bib

@incollection{aan2012,
year={2012},
isbn={978-1-4471-4053-5},
booktitle={Computational Social Networks},
editor={Abraham, Ajith},
title={Mining and {V}isualizing {R}esearch {N}etworks {U}sing the {A}rtefact-{A}ctor-{N}etwork {A}pproach},
publisher={Springer London},
author={Reinhardt, Wolfgang and Wilke, Adrian and Moi, Matthias and Drachsler, Hendrik and Sloep, Peter},
pages={233--267},
}

BibliographyUrls.bib

@Misc{DDI,
title = {Didaktik der {I}nformatik},
note = {Eingesehen am 07.02.2013},
url = {http://ddi.uni-paderborn.de/},
howpublished = "\url{http://ddi.uni-paderborn.de/}",
key = {DDI},
}

Um die beiden BibTeX Dateien nutzen zu können, müssen sie per Konsolenbefehl vorbereitet werden:

bibtex Refs.aux; bibtex Urls.aux

Das Ergebnis sieht so aus:

multibib Beispiel

In diesem Beispiel ist am Marker allein nicht sofort erkennbar, ob es sich um eine klassische Literaturangabe oder eine Webadresse handelt. Um dieses Problem zu umgehen, kann für die URL-Referenzen ein anderer Stil verwendet werden. Ich habe allerdings keine solche bst-Datei gefunden, die mir gefallen hat. Daher kommt mit diesem Artikel eine Datei urls.bst, die gern heruntergeladen und verwendet werden darf.

Zur Erstellung der Datei habe ich folgende Eingaben vorgenommen:

latex makebst

Name of the final OUTPUT .bst file? (default extension=bst)
\ofile=urls

STYLE OF CITATIONS:
(*) Numerical as in standard LaTeX
(a) Author-year with some non-standard interface
(b) Alpha style, Jon90 or JWB90 for single or multiple authors
(o) Alpha style, Jon90 even for multiple authors
(f) Alpha style, Jones90 (full name of first author)
(c) Cite key (special for listing contents of bib file)
Select:
\ans=c

ORDERING OF REFERENCES (if non-author/year and non-alph)
(*) Alphabetical by all authors
(c) Citation order (unsorted, like unsrt.bst)
(d) Year ordered and then by authors
(r) Reverse year ordered and then by authors
Select:
\ans=c

FINAL PUNCTUATION:
(*) Period at very end of the listed reference
(x) No period at end
Select:
\ans=x

URL ADDRESS: (without REVTeX fields)
(*) No URL for electronic (Internet) documents
(u) Include URL as regular item block
(n) URL as note
(l) URL on new line after rest of reference
Select:
\ans=u

Finished!!
Batch job written to file `urls.dbj‘
Shall I now run this batch job? (NO)
\yn=y

Damit wurde eine fertige Datei urls.bst erstellt. Bei Einträgen mit dem Feld url wird in dieser generierten Zwischenlösung noch ein unschönes Präfix „URL“ bei jeder Referenz eingefügt. Das kann mit einer Nachbearbeitung der Datei urls.bst behoben werden:

"\providecommand{\urlprefix}{URL }"
wird zu
"\providecommand{\urlprefix}{}"

Hier der im zweiten Beispiel genutze Code:

multibib.tex

\documentclaß{scrartcl}
\usepackage{multibib}
\usepackage{hyperref}
\newcites{Refs,Urls}{Literaturverzeichnis,Verzeichnis der Webadreßen}
\begin{document}
\bibliographystyleRefs{plain}
%\bibliographystyleUrls{plain} % Erstes Beispiel
\bibliographystyleUrls{urls} % Zweites Beispiel
\nociteRefs{*}
\nociteUrls{*}
\bibliographyRefs{Bibliography}
\bibliographyUrls{BibliographyUrls}
\end{document}

BibliographyUrls.bib

@Misc{DDI,
title = {Didaktik der {I}nformatik},
note = {Eingesehen am 07.02.2013},
url = {http://ddi.uni-paderborn.de/},
NICHT_BENOETIGT_howpublished = "\url{http://ddi.uni-paderborn.de/}",
NICHT_BENOETIGT_key = {DDI},
}

Und so sieht das finale Resultat aus:

multibib Beispiel mit URLs

Das ganze klappt übringens auch mit der Vorlage classicthesis von Andre Miede.

Hier noch die für diesen Artikel verwendeten Dateien:

Creative Commons Lizenzvertrag Dieses Werk bzw. Inhalt steht unter einer Creative Commons Namensnennung 3.0 Deutschland Lizenz.
Wenn möglich, verwenden Sie doch einen Link zum Originalartikel:
Adrian Wilke: Literaturverzeichnis für URLs in LaTeX.