Как представить таблицы сопряжения в C #

Я проектирую лингвистический анализатор для французского текста. У меня есть словарь в формате XML, который выглядит так:



  
  
      
        
      
    
      
      
      
        
          
          
          
          
          
          
          
          
        
        
          
          
          
          
        
        
          
          
          
        
        
          
          
        
        
        
      
    
  

Извинитак долго, но этоНеобходимо точно показать, как моделируются данные (древовидная структура).

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

class Word
{
    public string word { get; set; }
    public bool aspirate { get; set; }
    public List forms { get; set; }

    struct GrammaticalForms
    {
        public string form { get; set; }
        public string definition { get; set; }
    }

    struct NounForms
    {
        public string gender { get; set; }
        public string masculinSingular { get; set; }
        public string femininSingular { get; set; }
        public string masculinPlural { get; set; }
        public string femininPlural { get; set; }
    }

    struct AdjectiveForms
    {
        public string masculinSingular { get; set; }
        public string femininSingular { get; set; }
        public string masculinPlural { get; set; }
        public string femininPlural { get; set; }
        public string nonAspirate { get; set; }
        public string location { get; set; }
    }

    struct VerbForms
    {
        public string group { get; set; }
        public string auxillary { get; set; }
        public string[] prepositions { get; set; }
        public bool transitive { get; set; }
        public string pronominalForm { get; set; }

        struct IndicativePresent
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct IndicativeSimplePast
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct IndicativePresentPerfect
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct IndicativePastPerfect
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct IndicativeImperfect
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct IndicativePluperfect
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct IndicativeFuture
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct IndicativePastFuture
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }

        struct SubjunctivePresent
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct SubjunctivePast
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct SubjunctiveImperfect
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct SubjunctivePluperfect
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }

        struct ConditionalPresent
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct ConditionalFirstPast
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }
        struct ConditionalSecondPast
        {
            public string firstPersonSingular { get; set; }
            public string secondPersonSingular { get; set; }
            public string thirdPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
            public string thirdPersonPlural { get; set; }
        }

        struct ImperativePresent
        {
            public string secondPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
        }
        struct ImperativePast
        {
            public string secondPersonSingular { get; set; }
            public string firstPersonPlural { get; set; }
            public string secondPersonPlural { get; set; }
        }

        struct Infinitive
        {
            public string present { get; set; }
            public string past { get; set; }
        }

        struct Participle
        {
            public string present { get; set; }
            public string past { get; set; }
        }
    }
}

я новичок в C #, и яЯ не слишком знаком со структурами данных. Основываясь на моих ограниченных знаниях C ++, я знаю, чтоstructs полезны, когда вы моделируете небольшие, тесно связанные между собой фрагменты данных, поэтому в настоящее время я использую их таким образом.

Все эти структуры могут быть реально превращены вConjugationTables classи будет иметь в высокой степени ту же структуру. Я'Я не уверен, следует ли превратить их в класс или использовать другую структуру данных, которая лучше подходит для этой проблемы. Чтобы дать больше информации о спецификациях проблемы, яскажу следующее:

Как только эти значения были загружены из файла XML, они будутне будет измененоЭти значения будутчитал / выбирал очень часто.Табличная структурадолжны быть сохранены - это значитIndicativePresent должны быть вложены вVerbForms; то же самое относится ко всем другим структурам, которые являются членамиVerbForms структура. Это спряжениетаблицы в конце концов!Пожалуй самое важное: Мне нужно организовать данные таким образом, чтобы, например,Word в файле XML нетGrammaticalForm изглагол, это неVerbForms Структура будет фактически создана для этой записи. Это в целях повышения эффективности - зачем создаватьVerbForms если слово на самом деле не глагол? Эта идея избежать ненужного создания этих "формы» таблицы (которые в настоящее время представлены какstruct XXXXXForms) абсолютно необходимо.

В соответствии с (прежде всего) пунктом# 4 выше, какие структуры данных лучше всего использовать при моделировании сопряжениятаблицы (небаза данных таблицы)? Нужно ли менять формат моих данных, чтобы соответствовать # 4? Если я создаюnew WordБудут ли структуры, в их текущем состоянии, также созданы и займут много места? Вот'какая-то математика ... после того, как погуглить и в конце концов найтиэтот вопрос...

Во всех таблицах спряжения (существительные, прилагательные, глаголы) есть общее количество (совпадение?)100 stringS выделены, и это пустые. Так100 х18 байт =1800 байт для каждогоWordКак минимум, если эти структуры данных созданы и остаются пустыми (всегда будут какие-то издержки для значений, которые фактически будут заполнены). Таким образом, предполагая (просто случайно, может быть более или менее)50000 WordЭто должно быть в памяти, это90 миллионов байтили примерно85,8307 мегабайт.

Тот'много накладных расходов только на пустые таблицы. Так как же я могу собрать эти данные, чтобы позволить мне создаватьтолько определенные таблицы (существительное, прилагательное, глагол) в зависимости откакиеGrammaticalForms Word на самом деле имеет (в файле XML).

Я хочу, чтобы эти таблицы были членамиWord класс, но только создавать экземпляры таблиц, которые мне нужны. Я могу'не думаю об этом, и теперь, когда я сделал математику наstructs Я знаю, что этоне очень хорошее решение. Моя первая мысль состоит в том, чтобы сделать класс для каждого типа,NounFormsAdjectiveForms, а такжеVerbFormsи создать экземпляр класса, если форма появляется в файле XML. Я'я не уверен, что это правильно, хотя ...

Какие-либо предложения?

Ответы на вопрос(3)

Ваш ответ на вопрос