Что лучший способ состоит в том, чтобы проанализировать Microsoft Office и документы в формате PDF?

Предполагая, что файлы сценариев не нужно использовать по отдельности, то есть: generate_json.py самостоятельно из командной строки.

Я думаю, что более чистый подход заключался бы в том, чтобы обернуть generate_json.py функции и поместить их в класс.


В этом случае я переименовал generate_json.py в ConfigurationHandling.py

import os
import json
from functions import read_config

class ConfigurationHandler(object):
    def __init__(self, new_parameter_file, new_export_data_file, new_export_date):
        self._parameter_file = new_parameter_file
        self._export_data_file = new_export_data_file
        self._export_date = new_export_date
        self._parsed_configuration = self.read_configuration()

        self._perform_some_action1()
        self._perform_some_action2()

    def _read_configuration(self):
        """Uses lower level function `read_config` in function.py file to read configuration file"""
        parsed_configuration = read_config(self.export_data_file)
        return parsed_configuration

    def _perform_some_action1(self):
        pass

    def _perform_some_action2(self):
    #     Logic code for parsing goes here.
        pass

    def get_config(self):
        """Returns configuration"""
        return [self.parameter_file, self.parsed_configuration, self.export_date]


    def json_work(self):
        cfg = self.get_config()[0]  # json location
        data = self.get_config()[1]  # export_agent_core_agent.yaml
        date = self.get_config()[2]  # synthetic data folder - YYYY-MM-DD

        if not date:
            date = ""
        else:
            date = date + "/"

        json_location = cfg  # json data path
        json_database = data["config"]["database"]
        json_collection = data["config"]["collection"]
        json_path = "{0}/{1}{2}/{3}/{3}.json".format(json_location, date, json_database, json_collection)
        json_base_name = json_database + "/" + json_collection + "/" + os.path.basename(json_path)  # prints json filename
        current_day = date


        with open('dates/' + current_day + '.json', 'a') as file:
            data = {}


            if os.path.exists(json_path):
                json_file_size = str(os.path.getsize(json_path))  # prints json file size
                print("File Name:" " " + json_base_name + " " "Exists " + "\n")
                print("File Size:" " " + json_file_size + " " "Bytes " "\n")
                print("Writing to file")
                # if json_path is not False:
                data['File Size'] = int(json_file_size)
                data['File Name'] = json_base_name
                json.dump(data, file, sort_keys=True)
                file.write('\n')

            else:
                print(json_base_name + " " "does not exist")
                print("Writing to file")
                data['File Name'] = json_base_name
                data['File Size'] = None
                json.dump(data, file, sort_keys=True)
                file.write('\n')

        file.close()

Затем в main.py

from ConfigurationHandler import ConfigurationHandler

def main():
    #Drive the program from here and add the functionality together.
    #Routine to do some work here and get the required variables
    parameter_file = "some_parameter"
    export_data_file = "some_file.yaml"
    new_export_date = "iso_8601_date_etc"

    conf_handl = ConfigurationHandler(parameter_file, export_data_file, new_export_date)
    configuration = conf_handl.get_config()
    conf_handl.json_work()


if __name__ == '__main__':
    main()

В проекте вы должны стремиться иметь только одну основную функцию и соответственно разделить ее.
Будет гораздо легче изменить части программы позже, когда все разделится равномерно.

7
задан user57175 21 January 2009 в 13:33
поделиться

3 ответа

Как Windows Desktop Search, можно использовать компоненты, реализовывая интерфейс IFilter.

6
ответ дан 7 December 2019 в 01:27
поделиться

Я могу только говорить о документах MS Office здесь. Существует несколько способов сделать это:

  • Используя автоматизацию COM
  • Используя преобразователи, которые производят документ в более доступном формате
  • Пользование сторонними библиотеками
  • Использование OpenXML SDK Microsoft

Автоматизация COM имеет недостаток того, чтобы не всегда быть надежным, главным образом потому что приложения имеют тенденцию зависать из-за модальных раскрывающихся диалоговых окон.

Преобразователи доступны для Word. Вы могли проверить текстовый Преобразователь SDK, доступный от Microsoft, которая позволит Вам использовать преобразователи документа, идущие с Word в автономном приложении. Требует некоторого кодирования C, но так как Вы используете те же механизмы преобразования в качестве Office, Вы получите высокочастотные результаты. SDK может быть получен из http://support.microsoft.com/kb/111716.

Для третьей опции, пользующейся сторонними библиотеками, Вы могли бы хотеть взглянуть на ПОИ Apache или b2xtranslator проект на SourceForge. Последний обеспечивает библиотеку C#, которая позволяет Вам извлекать текст из документов двоичного слова. Разработка PowerPoint находится все еще на раннем стадионе, но извлечение текста должно уже работать.

Последняя опция состояла бы в том, чтобы использовать OpenXML SDK Microsoft. Это могло бы быть предпочтительным/самым легким путем. Поисковый Google для образцов. Вы могли также обработать двоичные документы первым преобразованием их использующий Пакет Совместимости Office (загрузка и установка от Microsoft):

Word:

"C:\Program Files\Microsoft Office\Office12\wordconv.exe" -oice -nme <input file> <output file>

Excel:

"C:\Program Files\Microsoft Office\Office12\excelcnv.exe" -oice <input file> <output file>

PowerPoint:

"C:\Program Files\Microsoft Office\Office12\ppcnvcom.exe" -oice <input file> <output file>
2
ответ дан 7 December 2019 в 01:27
поделиться

Для PDF можно использовать.NET моей компании компонент Читателя PDF то извлечение текста функций.

Это - точно код, который Вы пишете для извлечения текста из PDF:

public String ReadTextFromPages(Stream s)
{
    using (PdfTextDocument doc = new PdfTextDocument(s))
    {
        PdfTextReader rdr = doc.GetPdfTextReader();
        return rdr.ReadToEnd();
     }
}
2
ответ дан 7 December 2019 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: