Erste MIME-Typ Subtyp mit Apache tika
Ich brauchen würde, um die iana.org MediaType eher als application/zip oder application/x-tika-msoffice für Dokumente wie, odt, ppt, pptx, xlsx etc.
Wenn man sich mimetypes.xml es gibt mimeType Elemente aus der iana.org mime-Typ und "sub-Klasse von"
<mime-type type="application/msword">
<alias type="application/vnd.ms-word"/>
............................
<glob pattern="*.doc"/>
<glob pattern="*.dot"/>
<sub-class-of type="application/x-tika-msoffice"/>
</mime-type>
Wie man die iana.org mime-Typ-name anstelle der Eltern geben Namen ?
Beim testen mime-Typ-Erkennung, weiß ich :
MediaType mediaType = MediaType.parse(tika.detect(inputStream));
String mimeType = mediaType.getSubtype();
Test-Ergebnisse :
FAILED: getsCorrectContentType("application/vnd.ms-excel", docs/xls/en.xls)
java.lang.AssertionError: expected:<application/vnd.ms-excel> but was:<x-tika-msoffice>
FAILED: getsCorrectContentType("vnd.openxmlformats-officedocument.spreadsheetml.sheet", docs/xlsx/en.xlsx)
java.lang.AssertionError: expected:<vnd.openxmlformats-officedocument.spreadsheetml.sheet> but was:<zip>
FAILED: getsCorrectContentType("application/msword", doc/en.doc)
java.lang.AssertionError: expected:<application/msword> but was:<x-tika-msoffice>
FAILED: getsCorrectContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document", docs/docx/en.docx)
java.lang.AssertionError: expected:<application/vnd.openxmlformats-officedocument.wordprocessingml.document> but was:<zip>
FAILED: getsCorrectContentType("vnd.ms-powerpoint", docs/ppt/en.ppt)
java.lang.AssertionError: expected:<vnd.ms-powerpoint> but was:<x-tika-msoffice>
Gibt es eine Möglichkeit, um die konkreten Subtyp von mimetypes.xml ? Anstatt der x-tika-msoffice oder application/zip ?
Außerdem habe ich nie bekommen, application/x-tika-ooxml, aber application/zip für xlsx -, docx -, pptx-Dokumente.
InformationsquelleAutor lisak | 2011-08-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ursprünglich, Tika nur unterstützt Erkennung von Mime-Magie oder durch Datei-Endung (glob), da all dies die meisten mime-Erkennung vor Tika hat.
Wegen der Probleme mit Mime-Magie und Einheiten, wenn es um die Erkennung von container-Formate, es wurde beschlossen, einige neue Detektoren, um Tika zu behandeln. Die Container Bewusst Detektoren nahm die ganze Datei geöffnet und bearbeitet container, und arbeitete dann die genauen Datei-Typ, basierend auf dem Inhalt. Zunächst ist es nötig, Sie zu nennen explizit, aber dann waren Sie eingehüllt in
ContainerAwareDetector
wie Sie sehen werden, in einigen der Antworten.Seitdem Tika hat einen service loader Muster, das zunächst für den Parser. Dies erlaubt Klassen werden automatisch geladen, wenn vorhanden, mit einer Allgemeinen Art und Weise zu identifizieren, welche die richtigen seien und diese zu nutzen. Diese Unterstützung wurde dann ausgedehnt Detektoren auch an die Stelle der alten
ContainerAwareDetector
entfernt werden konnten, zugunsten von etwas cleaner.Wenn Sie auf Tika 1.2 oder später, und Sie wollen eine genaue Erfassung aller Formate, einschließlich container-Formate, die Sie wollen, etwas zu tun:
Wenn Sie diese nur mit der Core-Tika jar (tika-core-1.2-....), dann ist der einzige Detektor vorhanden, wird der mime-Magie ein, und Sie erhalten die alten Stil-Erkennung auf Basis magic + glob nur. Jedoch, wenn Sie dies sowohl mit der Kern-und Parser Tika Gläser (und deren Abhängigkeiten), oder von Tika-App (das enthält die Kern + Parser + Abhängigkeiten automatisch), dann die DefaultDetector nutzen alle die verschiedenen Container-Detektoren für die Bearbeitung Ihrer Datei. Wenn Sie Ihre Datei ist zip-basiert ist, dann-Erkennung zählen die Verarbeitung der zip-Struktur um die Datei zu identifizieren, basierend auf, was drin ist. Dies wird Ihnen die hohe Genauigkeit, die Sie anstreben, ohne Sie zu nennen, viele verschiedene Parser wiederum.
DefaultDetector
alle Detektoren verfügbar sind.Sie müssen sich Fragen, wie Sie eine neue Frage und/oder erhöhen eines enhancement request in den Tika issue-tracker
Was sind die Abhängigkeiten erforderlich, zusammen mit dem Parser-Glas? Sind Sie in einem separaten jar/s von Ihrer eigenen?
InformationsquelleAutor Gagravarr
Für jemand anderes mit einem ähnlichen problem, aber mit neueren Tika version dies sollte den trick tun:
ZipContainerDetector
da Sie keineContainerAwareDetector
mehr.TikaInputStream
zu dendetect()
Methode des Detektors zu gewährleisten tika analysieren können, den korrekten mime-Typ.Mein Beispiel-code sieht wie folgt aus:
Beachten Sie, dass die
Document
Klasse Teil meine domain Modell. So werden Sie sicher etwas ähnliches auf die Linie.Ich hoffe, dass jemand verwenden kann.
Ich konnte nicht erkennen, dass der mime-Typ von einem word 2010-Dokument mit dem Standard-Detektor. Mit meinem Ansatz kann ich. Aber ich habe es noch nicht getestet gegen andere Dokument-Typen.
DefaultDetector funktionieren sollte (es gibt eine Last von unit-tests, die zeigen, dass!). Stellen Sie sicher, dass der Parser Tika jar auf Ihrem classpath, zusammen mit den Abhängigkeiten, wenn es nicht
Ich hoffe, niemand wird code verwendet, der fängt
Throwable
und zurücknull
.InformationsquelleAutor Sebastian Götz
Den Standard byte-Muster-Erkennung Regeln im tika-core kann nur erkennen das generische OLE2-oder ZIP-format ist für alle MS Office-Dokument-Typen. Sie verwenden möchten ContainerAwareDetector für diese Art von Nachweis ist, soweit ich weiß. Und verwenden MimeTypes-Detektor als seine fallback-Detektor. Versuchen Sie dies :
Diese Weise sollten Ihre tests pass
InformationsquelleAutor lisak
Können Sie eine benutzerdefinierte tika config-Datei:
In das WEB-INF/classes gelegt "tika-custom-MimeTypes.xml" mit Ihren änderungen:
In meinem Fall:
InformationsquelleAutor Glaucio