Suchmaschine für Websites: mnoGoSearch und das Umwandeln von Dateien in Text

searchLeider wurde die Entwicklung von htdig scheinbar eingestellt, und so wurde ich gezwungen nach Alternativen zu suchen. Aber alles der Reihe nach: was will ich denn, ausser 12 Stunden Schlaf? Also; An unserer Schule werden alle Unterrichtsunterlagen in SVN-Repositories abgelegt, Um das Zusammenarbeiten der Lehrpersonen zu fördern soll es eine Suche über alle Unterrichtsmaterialien geben. So besteht die Chance, dass einiges an Doppelspurigkeiten vermieden werden könnte. Eine Recherche hat einiges an Kandidaten aufgezeigt: Sphinx schien ein wenig SQL-Lastig zu sein, Swish-e kannte ich schon und somit habe ich mich mal auf mnoGoSearch gestürzt. Für Unix ist mnoGoSearch gratis, open Source und sogar in Debian verfügbar.

Suchmaschinen Theorie

Das mit den Lokalen Suchmaschinen läuft immer ziemlich ähnlich und wurde auch schon an verschiedenen Stellen in diesem Blog besprochen (Beagle (neu) und xFriend (alt)). Ein Indexer liest alle Dateien und erstellt einen – ja was denn wohl? – Index. Damit er das kann, müssen alle Dateien in eine für ihn lesbare Form umgewandelt werden. Normalerweise ist „Lesbar“ Text oder HTML. Einige Suchmaschinen – wie beispielsweise Lucene oder Swish-e – erlauben auch XML um gewisse Felder zu bezeichnen, aber das ist eine andere Geschichte. Eine Suchoberfläche interagiert nun mit dem Index und versucht möglichst viele Seiten zu Finden und diese nach Relevanz geordnet dem Benutzer zu präsentieren.
Weiterlesen

Beagle Revisited

Wie im Artikel Organisatorisch herausgefordert… habe ich immernoch zuviele Dokus und zuwenig Ordnung. Aber leider scheint XFriend 2.1 zu kosten… Zeit, Beagle nochmals anzusehen. Und: Ich bin begeistert! Er tut genau das was ich erwarte und die KDE Integration ist spitze! Es werden nicht nur Konversationen in Kopete, Mails von KMail direkt ab den Maildirs (was mir extrem viel Speicherplatz für die HTML-Mails spart!), Kontakte von KAddressbook, Akregator-Feeds und KNotes indiziert, sondern mit Kerry steht auch eine Applikation für den Tray zur Verfügung!!! Ich glaube das ist die bei Opensuse viel gemacht haben… Damit sind sowohl Gnome als auch Opensuse in meiner Sympathieskala gestiegen.

Beagle-Suche mit Kerry

Natürlich wollte ich, dass er alles indiziert was mich interessiert: Powerpoint, LaTeX, Excel, Word, … Dafür musste ich die Datei /etc/beagle/external-filters.xml etwas anpassen:

< ?xml version=”1.0″ encoding=”utf-8″?>
<external -filters>
<filter>
<mimetype>text/x-tex</mimetype>
<extension>.tex</extension>
<command>untex</command>
<arguments>-gascii %s</arguments>
</filter>
<filter>
<mimetype>application/msword</mimetype>
<mimetype>application/x-mswrite</mimetype>
<extension>.doc</extension>
<command>catdoc</command>
<arguments> %s</arguments>
</filter>
<filter>
<mimetype>application/postscript</mimetype>
<extension>.ps</extension>
<extension>.ai</extension>
<extension>.eps</extension>
<command>pstotext</command>
<arguments>%s</arguments>
</filter>
<filter>
<mimetype>application/x-rar</mimetype>
<extension>.rar</extension>
<command>unrar</command>
<arguments>lb %s</arguments>
</filter>
<filter>
<mimetype>application/vnd.ms-powerpoint</mimetype>
<mimetype>application/mspowerpoint</mimetype>
<extension>.ppt</extension>
<command>catppt</command>
<arguments>%s</arguments>
</filter>
<filter>
<mimetype>application/excel</mimetype>
<mimetype>application/msexcel</mimetype>
<extension>.xls</extension>
<command>xls2csv</command>
<arguments>%s</arguments>
</filter>
<filter>
<mimetype>application/x-zip</mimetype>
<mimetype>application/zip</mimetype>
<mimetype>application/x-zip-compressed</mimetype>
<extension>.zip</extension>
<command>unzip</command>
<arguments>-l %s</arguments>
</filter>
<filter>
<mimetype>application/mbox</mimetype>
<command>cat</command>
<arguments>%s</arguments>
</filter>
</external>

Excel und Powerpoint mit htdig indizieren

Möchte man xls und ppt in den Index der Intranet Suchengine htdig aufnehmen, muss man etwas Magie wirken lassen:

  1. Es braucht ein Umwandler „gewünscht2txt“. Ich habe xls2csv für Excel und catppt für Powerpoint gewählt.
  2. Die Mimetypes sollten aktualisiert werden. /etc/htdig/mime.types:
    [...]
    application/vnd.ms-excel        xls
    application/vnd.ms-powerpoint   ppt
    [...]
  3. Externe Parser müssen aktiviert werden in /etc/htdig/htdig.conf:
    [...]
    external_parsers: application/msword /usr/share/htdig/parse_doc.pl \
    application/postscript /usr/share/htdig/parse_doc.pl \
    application/pdf /usr/share/htdig/parse_doc.pl \
    application/vnd.ms-powerpoint /usr/share/htdig/parse_doc.pl \
    application/vnd.ms-excel /usr/share/htdig/parse_doc.pl
    [...]
  4. Nun muss noch /usr/share/htdig/parse_doc.pl angepasst werden:
    [...]
    #
    # Excel
    #
    $XLS2CSV = "/usr/bin/xls2csv";#
    # Powerpoint
    #
    $CATPPT = "/usr/bin/catppt";
    [...]
    } elsif ( $ARGV[1] =~  /excel/) {       # it's MS Excel - this detection is a kludge
        $parser = $XLS2CSV;
        # convert all possible sheets to ascii
        $parsecmd = "$parser "$ARGV[0]" |";
        $type = "MS-Excel";
        $dehyphenate = 0;               # Excel documents not likely hyphenated
    } elsif ( $ARGV[1] =~  /powerpoint/) {
        $parser = $CATPPT;
        # convert all possible sheets to ascii
        $parsecmd = "$parser "$ARGV[0]" |";
        $type = "MS-Powerpoint";
        $dehyphenate = 0;
    }
    [...]
  5. Nun sollts funzen.

Man könnte es wohl auch über html machen (mit dem Helfer xlhtml). Dazu müsste die Zeile in htdig.conf heissen:

application/vnd.ms-excel->text/html /usr/share/htdig/parse_doc.pl

und dann müsste inparse_doc.pl xlhtml mit den korrekten Parametern aufgerufen werden.

Generell können folgende Probleme auftreten:

Apache Index:
Indiziert man Verzeichnisse, die das Apache Index Modul erzeugt (Dateibaum ohne index.html), so können Seiten mehrfach gespeichert sein weil sich die Parameter unterscheiden. Um dies zu verhindern muss htdig.conf ergänzt werden:

bad_querystr: ?C=D ?C=S ?C=M ?C=N ?O=A ?D=A ?D=D ?M=A ?M=D ?N=A ?N=D ?S=A ?S=D C=D C=S C=M C=N O=A D=A D=D M=A M=D N=A N=D S=A S=D

Ghostscript-Hanger:
Mein Indexer hatte die Tendenz beim Aufruf von gs zu hangen. Nundenn, ein Umstellen von „pstotext“ auf „pdftotext“ hat das ganze subjektiv schneller gemacht und bis jetzt ist es nimmer gestalled. In /usr/share/htdig/parse_doc.pl:

[...]
#
# set this to your PDF to text converter
#
#$CATPDF = "/usr/bin/pstotext";                         # From "pstotext"
$CATPDF = "/usr/bin/pdftotext";                         # From "pdftotext"
if (! -x $CATPDF) { $CATPDF = "/usr/bin/pdftotext"; }   # From "xpdf"/"xpdf-i"
if (! -x $CATPDF) { $CATPDF = "/usr/bin/ps2ascii"; }    # From a ghostscript
if (! -x $CATPDF) { $CATPDF = "/bin/true"; }
[...]

LaTeX – Die hart erarbeiteten Grundlagen

LaTeX (das Textsatzsystem, nicht das Thermoplast) ist super, aber nichts für Foliengriller. Die Erfahrung dreier lernender und leidender Personen ist im angehängten Dokument niedergeschrieben. Generell geht es darum, LaTeX im Schulumfeld einzusetzen (mehr dazu folgt noch).

Hanspeter Vogt hat vorbildlich begonnen, seine Erfahrungen und Erkenntnisse niederzuschreiben. Ernst Mösching hat verschiedene Beiträge geliefert und ich habe am Schluss die Scribfäler und ungeschickten Formulierungen eingebaut.

Themen der LaTeX Zusammenfassung und Einführung sind:

  • LaTeX unter Windows/Linux, Arbeitsumgebungen
  • Installation von Packages
  • Dokumentaufbau
  • Umbruch: Zeilen, Absatz, Seiten
  • Dokumentklassen und Packages
  • Kapiteleinteilung
  • Tabellen
  • Darstellung von Sonderzeichen
  • Formate
  • Schriftgrösse
  • Anführungszeichen
  • Fussnoten
  • Marginalien
  • Auflistungen
  • Erstellen von Verzeichnissen
  • Arbeiten mit Tabulatoren
  • Erstellen von Querverweisen
  • Quellenangaben
  • Titelseiten erstellen
  • URLs
  • Teildokumente
  • Eigene Kommandos definieren
  • Variablen in LATEX2
  • Fremdsprachen und Symbole
  • Mathematische Symbole
  • Mathematische Akzente
  • Rahmen und Striche
  • Nummerierung von Tabellen und Abbildungen
  • Kopf- und Fusszeilen
  • Integration von PS-Grafiken
  • Verdrehen von Objekten
  • Mehrspaltendruck
  • Noch viel mehr Schriften
  • Nützliche Symbole
  • Setzen von Listings
  • Zitate
  • Dateien in PDF einbetten
  • Index
  • Glossar
  • Grafikformate
  • Grafiken als Figures/Floats
  • Grafiken im Text
  • Grafiken mit PGF

Organisatorisch herausgefordert…

…oder zu Deutsch: Ein riesen Chaos herrscht auf meiner Fetplatte.43’759 Dateien alleine in meinem Datenverzeichnis und 2,3 GB an Mail. Ausserdem, stetig im Stress sind halt Dateien falsch benamst und und die Mails verschwinden in meiner Ad-Hoc Ordnerstruktur auf nimmerwiedersehen. Ich arbeite mit Kontact bzw. KMail, und der lässt sich beim Durchsuchen der Mail immer viel Zeit. Damit man diese Arbeit auch ja zu würdigen weiss, blockiert er währenddessen das ganze Benutzerinterface

Nun gut, sagte ich mir, wir leben im Jahre 2006 und da dürfte mir der Computer behilflich sein. Leider tut er dies nicht von sich aus, denn das Dateisystem das sich darum bemühen sollte kämpft immernoch mit Encodings und Dateien >2 GB. Tenor steht etwas still und dbfs ist auch noch in Entwicklung und der Server lässt sich unter Debian nicht kompilieren ohne in Tränen auszubrechen (ocaml ! Ja, das ist kein Ausruf des Entsetzens sondern eine Programmiersprache!).

XFriend LogoAuf gehts, dann lass uns halt alles Volltextindizieren. Beagle habe ich wirklich eine Chance gegeben, aber er hat nie das gemacht was ich wollte, obwohl er ein Maildir-Modul besitzt. KAT wurde gehyped, aber nun ist die Webseite und alles Weitere verschwunden. Google Desktop Search gibt es nur für Windows… Nach einigen Versuchen habe ich es auch mit Websuchmaschinen wie htdig oder swish-e aufgegeben: Leisten sie doch gute DIenste bei der Suche auf Websites, möchte ich für meinen Desktop die Dinge lieber finden als mir den Zeigefinger wunde zu konfigurieren. Durch ein Zufall wurde ich auf X-Friend aufmerksam.

Dieses Programm hat verschiedene Phasen durchgemacht: Zuerst war es unbrauchbar, dann gut, danach wurde nur noch an einer kommerziellen Version gearbeitet und man hat nichts mehr gehört, dann gab es die kommerzielle Version und die gratisausgabe wurde beschnitten auf lächerliche 20’000 irgendwas Dateien und jetzt ist sie wieder da, ohne Beschränkung, in alter Frische.

Flugs eingerichtet (ist nicht so schwer) kam die erste Enttäuschung, der X-Freund kann kein Maildir. Nun, Versuche eines POP und/oder IMAP-Servers der auf mein Maildir zugreift sind kläglich gescheitert und meine Mails wurden alle korrupt (denglisch für vermurkst!). Die Rettung nahte in Mhonarc. Der kann was! Auch wenn der Schmetterling ein bisschen debil wirkt. Genügend Festplatte vorausgesetzt kann man so alle Mails in HTML wandeln, inklusive der Verlinkung von Attachments. Einfach genial. Bei mir braucht es folgenden Batch, den ich jeden zweiten Tag über meine Mails rasseln lasse:

#!/bin/bash

echo "Finding maildirs"

echo "Cleaning and creating folders"
rm -rf /home/sarg/data/mailhtml/archive/maildir/*
rm -rf /home/sarg/data/mailhtml/archive/mbox/*

mkdir /home/sarg/data/mailhtml/archive/maildir/attachments /home/sarg/data/mailhtml/archive/maildir/mails
mkdir /home/sarg/data/mailhtml/archive/mbox/attachments /home/sarg/data/mailhtml/archive/mbox/mails

echo "Converting maildirs"
find /home/sarg/Mail/ -name 'cur' -type d -print0 | xargs -0 /usr/bin/mhonarc -add -mhpattern '^[^\.]' -nolock -umask 0022 -time --attachmentdir /home/sarg/data/mailhtml/archive/maildir/attachments/ -nochecknoarchive -dbfile /home/sarg/data/mailhtml/archive/maildir/mhonarcdb -outdir /home/sarg/data/mailhtml/archive/maildir/mails

echo "Converting MBOX"
find /home/sarg/Mail/ -type f -regex "^.*/[^\.][^/]*$" -print | grep -v "/cur/" | tr '12' '00' | xargs -0 /usr/bin/mhonarc -nolock -umask 0022 -time --attachmentdir /home/sarg/data/mailhtml/archive/mbox/attachments/ -nochecknoarchive -dbfile /home/sarg/data/mailhtml/archive/mbox/mhonarcdb -outdir /home/sarg/data/mailhtml/archive/mbox/mails

echo "Cleaning up"
chown -R sarg.sarg /home/sarg/data/mailhtml/
Um es jeden zweiten Tag anzustupsen:
<pre># crontab -e
0 14 * * 0,3 /home/skaldrom/data/mailhtml/mailarchive
</pre>

Wobei mailarchive das obige Skript höchstselbst ist.

Mein X-Freund indiziert diese Liste und schon kann ich mit Volltext meine Mail Durchsuchen. Ein ganz neues Gefühl zu wissen, wieviele Penisse und Viagras man in seinen Foldern hat!!!

Damit der Freund bei jedem Systemstart dabei ist muss noch ein Link gemacht werden:

ln -s /opt/xfriend/xfriend ~/.kde/Autostart/xfriend

Und schon funzts, mit allen Details… Um ein Bisschen den Neid zu wecken ist ein Screenshot angehängt 🙂 … XFriend Screenshot