Почему приложение Tika 2.1 игнорирует текст в файле .txt?

#apache-tika

Вопрос:

Я обрабатываю файл с помощью Tika 2.1 из командной строки в Ubuntu 20.04, используя следующую команду:

 java -jar tika-app-2.1.0.jar -t test.txt
 

Файл представляет собой чистый текстовый файл ANSI (все символы от 0x0 до 0x7f). Как ни трудно в это поверить, приложение Tika 2.1 игнорирует все символы, когда в текстовом файле присутствует определенная строка.

Вот текстовый файл:

 From:
Sent:
text

this is a test
testing 

next
last
 

И вот результат:

 this is a test
testing

next
last
 

Чтобы показать, что это чистый текстовый файл ANSI без форматирования, без 2-байтовых последовательностей Юникода и т. Д., Вот вывод команды «od»:

 0000000 7246 6d6f 0d3a 530a 6e65 3a74 0a0d 6574
0000020 7478 0a0d 0a0d 6874 7369 6920 2073 2061
0000040 6574 7473 0a0d 6574 7473 6e69 2067 0a0d
0000060 0a0d 656e 7478 0a0d 616c 7473
 

Однако, если я просто изменю «Отправлено:» на «отправлено:», вывод будет:

 From:
sent:
text

this is a test
testing

next
last
 

Я устранял эту проблему и не вижу подключения. Если я добавлю «Отправлено:» в первую строку:

 From: Sent:
Sent:
text

this is a test
testing 

next
last
 

Результаты таковы:

 this is a test
testing

next
last
 

Но если я изменю «Отправлено:» на «Отправлено» во второй строке, я получу этот вывод:

 From: Sent:
Sent:
text

this is a test
testing

next
last
 

И этот файл:

 From: Sent:
Sent:
Sent:
text

this is a test
testing 

next
last
 

Результаты в этом выводе:

 this is a test
testing

next
last
 

Но если я помещу «Отправлено:» в первую строку или простое (0d 0a) в качестве первых двух байтов, вывод будет в порядке. Почему начало второй строки, по-видимому, имеет значение, а также прописные или строчные буквы, работающие, но не «Отправлено:»? Почему предыдущее «Отправлено» с «» заставляет его работать? Я также пробовал это на разных машинах — на одной под управлением Ubuntu 18.04 и на jar в системе Windows 10 — оба с одинаковыми результатами.

Что происходит с базовым ответом Tika на очень простой текстовый файл? Я никоим образом не изменил банку. Это файл jar, загруженный с сайта Apache Tika. Чего мне не хватает?

Любая информация очень ценится.

Комментарии:

1. Похоже, Тика может интерпретировать это как электронное письмо — если вы получите метаданные, найдете ли вы там остальную информацию?

2. @Gagravarr: Когда я запускаю обнаружение, оно показывает, что это электронное письмо типа сообщение/rfc822. Но все файлы, которые у меня есть, — это текстовые файлы, содержащие содержимое операции распознавания. Я хочу работать только с текстом и хранить метаданные отдельно. Поэтому я хочу, чтобы ТИКА предоставила только текст из файлов, после чего я смогу его перевести и проанализировать. Если Tika допускает только свою собственную интерпретацию вместо использования расширения .txt, это не будет работать для моего приложения. Есть ли способ принудительно указать расширение файла (т. е. txt)?

3. Это интересно, потому что, если я добавлю 0d 0a в начало файла, он обнаружит текстовый файл и будет работать нормально.

4. Если вы знаете, что это текстовый файл, вы можете пропустить AutoDetectParser и напрямую вызвать анализатор текста. В качестве альтернативы установите свойство типа содержимого в метаданных, а затем вызовите DefaultParser , и он вызовет для вас анализатор текста

5. @Gagravarr — Звучит неплохо. Я использую режим сервера и буду следовать вашим советам по использованию API. Спасибо за помощь.

Ответ №1:

Тика интерпретирует текст как электронное письмо. Этот конкретный пример представлял собой извлечение текста из электронного письма и включал определенные ключевые слова (например, «От:» и «Отправлено:» в определенных позициях). Вот почему, когда в начале файла добавляются другие символы, по умолчанию он интерпретируется как чистый текстовый файл.

Я думал, что порядок интерпретации сначала основан на расширении «.txt», а затем на анализе содержимого (которое в данном случае не содержит метаданных с этим текстовым файлом). Но здесь, по-видимому, это не так. Похоже, что анализ-это первый порядок, прежде чем он рассмотрит расширение «.txt».

Пример был запущен через Tika, работающий в качестве сервера. В дальнейшем я буду использовать API Tika и следовать предложениям,предоставленным комментатором (@Gagravarr), пропустив вызов AutoDetectParser, установив свойство типа содержимого в метаданных и вызовите DefaultParser через API.

Отправьте сообщение @Gagravarr для поиска решения.

Комментарии:

1. Вы также можете сделать это через сервер Tika, добавив тип контента в HTTP-запрос для достижения того же результата: curl -T test.txt http://localhost:9998/tika --header "Content-Type: text/plain"