Разбор OneNote - как добраться до текстовых BLOB-объектов в документе?

16

Я создаю парсер для .oneрасширения файла, который по завершении я добавлю в проект Apache Tika.

Вот лицензионный проект с открытым исходным кодом APL 2.0, который я создаю: https://github.com/nddipiazza/onenote-parser-java

Я использовал документ спецификации здесь: https://docs.microsoft.com/en-us/openspecs/office_file_formats/ms-one/73d22548-a613-4350-8c23-07d15576be50

В качестве отправной точки я перенес код из этого проекта C ++ с открытым исходным кодом: https://github.com/dropbox/onenote-parser

Я проделал длинный путь в разборе документов, но я столкнулся с дорожным блоком.

Вот файл OneNote, который я использую для анализа: https://drive.google.com/file/d/1uROTEnKeBKU08CG_K5zdDTGHa178LgBK/view?usp=sharing

Вот раздел из этого документа

Я не могу просмотреть Section1TextArea1 и Section1TextArea2 в моих проанализированных результатах. Так что мне не хватает какого-то ключевого элемента анализа данных или чего-то еще.

Это определенно в самом файле OneNote. Я вижу это в Hex Viewer:

шестнадцатеричный редактор просмотра содержимого

Вот результат анализа JSON: https://gist.github.com/nddipiazza/02d2252d357b3b02a6b9ab1050474267

Мне кажется, что в техническом документе отсутствует очень важная информация, необходимая для анализа этого закрытого формата.

Какой основной элемент (элементы) я пропускаю, в результате чего я не получаю фактическое содержание текста?

Николас ДиПьяцца
источник

Ответы:

2

Я понял. Было важно понять, что значения свойств в OneNote могут иметь:

  • Двоичное содержимое
  • Ascii текстовое содержание
  • UTF-16LE содержание.

Существует множество их разбросанных по всему.

Также я просто пошел дальше и проанализировал все дерево корневых файлов. Это приведет к большому количеству дублированного текста, но мне все равно.

Проект дополнен тестовыми примерами и исправлением здесь: https://github.com/nddipiazza/onenote-parser-java/tree/master/src/main/java/org/apache/tika/onenote

ОБНОВИТЬ:

Только что создал Apache Tika PR: https://github.com/apache/tika/pull/300

Николас ДиПьяцца
источник