Как разработать классы для иерархических текстовых данных? - PullRequest
0 голосов
/ 10 февраля 2019

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

Стенограммы документов представлены в следующей (упрощенной) форме:

++ Заголовок с названием компании, отраслью, годом, кварталом, датой и временем ++

Speaker1- Положение говорящего1: некоторый текст.

Динамик2 - Положение говорящего2: некоторый текст.

(...)

++ Конец файла ++

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

  • Master
    • хранит все имена файлов документов для обработки
    • создает и сохраняет Document объекты для всех документов
  • Document
    • анализирует и сохраняет информацию документа из HTML-кода
    • разбивает HTML-код на отдельные параграфы
    • создает и сохраняет Paragraph объекты для всех абзацев
  • Paragraph
    • анализирует и сохраняет динамик, положение динамика и текст из абзаца
class Master():
    def __init__(self):
        ''' Initialize the master object '''
        self.filenames = []     # List of filenames
        self.documents = []     # List of documents

    def process_documents(self, filenames):
        ''' Create document object for each document '''
        self.filenames.append(filenames)
        for filename in filenames:
            with open(filename, 'r') as f:
                html = f.read()
            document = Document(html)
            document.process_paragraphs()
            self.documents.append(document)

class Document():
    def __init__(self, html):
        ''' Initialize the document object '''
        self.html = html                        # Html code of complete file
        self.cname = self.parse_cname()         # Company name
        self.industry = self.parse_industry()   # Industry
        self.quartal = self.parse_quartal()     # Quartal
        self.year = self.parse_year()           # Year
        self.dtime = self.parse_dtime()         # Datetime
        self.paragraphs = []                    # List of paragraphs

    def parse_cname(self):
        ''' Extract company name from html '''
        pass

    def parse_industry(self):
        ''' Extract industry from html '''
        pass

    def parse_quartal(self):
        ''' Extract quartal from html '''
        pass

    def parse_year(self):
        ''' Extract year from html '''
        pass

    def process_paragraphs(self):
        ''' Create paragraph object for each paragraph '''
        for portion in self.html:
            paragraph = Paragraph(portion)
            self.paragraphs.append(paragraph)

class Paragraph():
    def __init__(self, html):
        ''' Initialize the paragraph object '''
        self.html = html                        # Html code of paragraph
        self.speaker = parse_speaker()          # Speaker
        self.position = parse_position()        # Position of speaker
        self.text = parse_text()                # Text

    def parse_speaker(self):
        ''' Extract speaker from paragraph html '''
        pass

    def parse_position(self):
        ''' Extract position from paragraph html '''
        pass

    def parse_text(self):
        ''' Extract text from paragraph html '''
        pass

С этой настройкой я надеюсь упростить следующие этапы анализа:

  • Фильтрация документов по отраслям, годам и кварталам
  • Фильтрация документов, содержащих конкретные ключевые слова
  • Фильтрация абзацев, содержащих конкретные ключевые слова
  • Удаление знаков препинания и стоп-слов из абзацев
  • Расчет настроения абзацев
  • (...)

Это прессНастроил ли подход подходящий подход к данной проблеме?

Меня беспокоит то, что уровни Master, Document и Paragraph тесно связаны с точки зрения проблем.Но классы в моем программном коде не имеют реального отношения, за исключением того, что они хранят объекты друг друга.Например, если я захочу реализовать метод класса Document, который возвращает список Paragraph объектов, я потеряю информацию, к которой относится документ Paragraph объектов.

Есть ли возможность зафиксировать иерархическое отношение объектов в моей настройке?

...