Archiv für den Monat: August 2017

Riesige Text- oder XML-Dateien zerteilen mit Python

Manchmal ist es einfacher, große Datenmengen nicht auf einmal zu verarbeiten, sondern sie zuerst in kleine Stücke zu zerteilen. Ein Beispiel, das eine Teilung notwendig macht, ist das Umwandeln von XML mit XSLT, das bei sehr großen Dateien zu viel Speicher beansprucht.

Das Unix-Kommando split kann große Textdateien in kleine zerlegen, aber für manche Anwendungsfälle wie die Teilung von sehr großen XML-Dateien ist das nicht ausreichend. Es gelten dabei folgende Anforderungen:

  • Die Trennung darf nur an bestimmten Stellen erfolgen (d.h. zumeist hinter bestimmten schließenden XML-Tags).
  • Aber nicht an jeder dieser möglichen Trennstellen muss auch tatsächlich getrennt werden.
  • Ein Header/Footer (mit äußeren XML-Tags) muss in jedem Teil erhalten bleiben bzw. kopiert werden.

Das split-Kommando ist dafür zu unflexibel, da es entweder nach einer bestimmten Anzahl Zeilen oder an definierten Trennstellen teilt, aber keine Kombination aus beidem zulässt und außerdem die automatische Übernahme von Kopf- und Fußzeilen nicht zulässt.

Folgendes Python-Skript erledigt den Job (getestet mit Python 3.6):

Riesige Text- oder XML-Dateien zerteilen mit Python weiterlesen

Solr Highlighting geht nicht?

Offenbar war ich zu doof, Solr mit einem ganz einfachen Beispiel zu bedienen, deswegen für mich (und vielleicht für andere, die sich auch für zu doof halten) eine kleine Notiz, was zu tun ist, wenn das Highlighting (in meinem Fall in Solr 6.6.0) zwar im „techproducts“-Beispiel wunderbar funktioniert, mit einem eigenen Korpus aber nicht:

Wenn man eigene Dokumente importiert und sich dabei auf die Standardkonfiguration und darauf, dass die Felder automatisch angelegt werden, verlässt, sind der Field Type für diese Felder möglicherweise auf „StrField“ (anstatt auf „TextField“) und die Optionen auf „Omit Term Frequencies & Positions“ (was für alles außer Text Standard ist) gesetzt. Die Suche an sich funktioniert dann ganz normal, ein bei der Query eingeschaltetes Highlighting liefert dann in der Antwort zwar eine Highlighting-Sektion, aber nur mit den IDs, ohne Text mit Hervorhebungen.

Mögliche Lösung: Die Felder, für die später Highlighting funktionieren soll, von Hand anlegen (geht auch im Admin-Interface unter Schema / Add Field) und dabei auf den korrekten Field Type und darauf, dass die Omit-Options nicht aktiv sind, achten. Eventuell sollte man in Betracht ziehen, die Optionen termPositions=true und termOffsets=true zu aktivieren. Siehe dazu die SchemaXml-Doku.

Bei der Abfrage ist dann hl=on und hl.fl=[Der Name des eben angelegten Feldes] anzugeben. Das kann man bei Bedarf auch in der solrconfig.xml aufnehmen, wenn es dauerhaft aktiv sein soll.

Manchmal (!) klappt das Highlighting auch nur, wenn in der Query nicht einfach nur q=Suchbegriffe, sondern ausdrücklich q=[Feldname:Suchbegriffe] angegeben ist. Da bin ich mir jetzt aber wirklich nicht sicher, ob das nicht doch ein Bug ist.