Запуск парсера и файл конфигурации

Имя конфигурационного файла — единственный аргумент программы tomitaparser. Т.е. запускать надо вот так:

В Linux, FreeBSD и прочих *nix системах:
./tomitaparser config.proto
В Windows:
tomitaparser.exe config.proto

В конфигурационном файле указывается:

  • где находятся тексты, которые нужно обработать;

  • путь к корневому словарю;

  • какие статьи корневого словаря запускать;

  • какие факты нужно сохранить и в каком формате;

  • куда сохранять факты;

  • несколько вспомогательных параметров.

Описание формата конфигурационного файла

message TTextMinerConfig {
  message TInputParams {
    enum SourceFormat {
      plain = 0;
      html = 1;
    }
    enum SourceType {
      no = 0;
      dpl = 1;
      mapreduce = 2;
      arcview = 3;
      tar = 4;
      som = 5;
      yarchive = 6;
    }
    optional string File = 1 [default = ""];            // Если File пропущено — то STDIN
    optional string Dir = 2 [default = ""];             // Если читаем файлы из папки
    optional SourceFormat Format = 3 [default = plain]; // Если Format пропущено — то plain

    optional SourceType Type = 4;                       // Если Type пропущено — то читаем обычный файл (то же, что "no")
    optional string Encoding = 5 [default = "utf8"];    // Кодировка входных данных (если не задано — utf8)
    optional string SubKey = 6;                         // Для mapreduce
    optional int32 FirstDocNum = 7 [default = -1];      // Для arcview: первый документ, который надо анализировать
                                                        // (если не задано — с начала архива)
    optional int32 LastDocDum = 8 [default = -1];       // Для arcview: последний документ, который надо анализировать
                                                        // (если не задано — до конца архива)
    optional string Url2Fio = 9;                        // Таблица url2fio для interview
    optional string Date = 10;                          // Дата для форматов кроме arcview
  }
  message TOutputParams {
    enum OutputMode {
      append = 0;
      overwrite = 1;
    }
    enum OutputFormat {
      xml = 0;
      text = 1;
      proto = 2;
      mapreduce = 3;
    }
    optional string File = 1 [default = ""];            // Если не задано — то STDOUT
    optional OutputMode Mode = 2 [default = append];    // Если не задано явно, но файл существует — ошибка
    optional OutputFormat Format = 3 [default = xml];   // Если не задано — то xml
    optional string Encoding = 4 [default = "utf8"];    // Кодировка выходных данных, по умолчанию — utf8
    optional bool SaveLeads = 5 [default = false];      // Сохранять ли лиды
    optional bool SaveEquals = 6 [default = false];     // Сохранять ли equals facts
  }
  message TArticleRef {
    required string Name = 1;
  }
  message TFactTypeRef {
    required string Name = 1;
    optional bool NonEquality = 2 [default = false];
  }
  required string Dictionary = 1;                       // Может быть папкой, тогда парсер будет работать
                                                        // в режиме совместимости со старыми путями
  optional string PrettyOutput = 2;                     // Имя файла, куда будет писаться отладочный HTML файл
  optional uint32 NumThreads = 3 [default = 1];         // кол-во потоков (по умолчанию — один)
  optional string Language = 4 [default = "ru"];        // Язык (по умолчанию — русский)
  optional string PrintTree = 5;                        // см. parsedoc
  optional string PrintRules = 6;                       // см. parsedoc
  optional TInputParams Input = 7;
  optional TOutputParams Output = 8;
  repeated TArticleRef Articles = 9;
  repeated TFactTypeRef Facts = 10;
  optional bool SavePartialFacts = 11 [default = true];                                         
  repeated TArticleRef ArticlesBeforeFragmentation = 12;
}

Отладочный вывод

Парсер может вывести на экран или сохранить в файл подробную информацию о ходе анализа текста. Формат вывода этой отладочной информации предназначен для удобства просмотра и не предназначен для автоматической обработки. Параметр PrintTree указывает файл, в который будет записаны деревья синтаксического разбора. Параметр PrintRules — применяемые правила. В качестве имени файла можно указать STDOUT или STDERR, чтобы вывести отладочную информацию в соответствующий поток.

Параметры PrintTree и PrintRules можно использовать одновременно.

Деревья синтаксического разбора (параметр PrintTree)

Параметр PrintTree позволяет указать файл, в который будут выведены синтаксические деревья, которые парсер строит в процессе разбора.

Пример

// грамматика
S -> Adj Noun;
// текст
Тяжелый труд облагораживает хорошего человека.
// фрагмент конфигурационного файла
PrintTree="tree.txt";

В результате работы парсера будет сформирован файл tree.txt, в который будут помещены все построенные парсером деревья.

tree.txt

=====================first.cxx======================
coverage: 2, weight: 0.36666666 
S  ->  Adj[*Тяжелый]  Noun[труд] :: 0.43333333
|
|__ Adj  ->  Тяжелый :: 1
|
|__ Noun  ->  труд :: 1
coverage: 2, weight: 0.34
S  ->  Adj[*хорошего]  Noun[человека] :: 0.43333333
| 
|__ Adj  ->  хорошего :: 1
|
|__ Noun  ->  человека :: 1
======================multiwords======================
Тяжелый_труд: TAuxDicArticle, 
              наша_первая_грамматика,
хорошего_человека: TAuxDicArticle,
              наша_первая_грамматика,

Срабатывание правил (параметр PrintRules)

Параметр PrintRules позволяет указать файл, в который будет выведен список сработавших правил.

Пример

// грамматика
S -> Adj Noun;
// текст
Тяжелый труд облагораживает хорошего человека.
// фрагмент конфигурационного файла
PrintRules="rules.txt";

rules.txt

============================processing first.cxx=============================


S  ->  Adj[*Тяжелый]  Noun[труд] ::


S  ->  Adj[*хорошего]  Noun[человека] ::


****************************finished first.cxx*******************************

Примеры

Важно: не забывать указывать кодировку самого конфига

encoding "utf8";
TTextMinerConfig {
  Dictionary = "../tomita-work/simple.gzt";
  Articles = [
    { Name = "_статья" }
  ]
  Facts = [
    { Name = "TFdo" }
  ]
}

Будет читать текст с консоли как один документ в кодировке utf8. Запустит статью «_статья» из корневого gzt-файла «../tomita-work/simple.gzt». Напечатает XML с фактами типа TFdo в консоль.

encoding "utf8";
TTextMinerConfig {
  Dictionary = "../tomita-work/simple.gzt";
  Input = {
    File = "fdo.txt";
    Encoding = "windows-1251";
  }
  Articles = [
    { Name = "_статья" }
  ]
  Facts = [
    { Name = "TFdo" }
  ]
}

Прочитает файл fdo.txt как один документ в кодировке Windows-1251 (надо явно указывать, т.к. по умолчанию — utf8). Запустит статью «_статья» из корневого gzt-файла «../tomita-work/simple.gzt». Напечатает XML с фактами типа TFdo в консоль.

encoding "utf8";
TTextMinerConfig {
  Dictionary = "../tomita-work/simple.gzt";
  Input = {
    File = "fdo.txt";
    Encoding = "windows-1251";
  }
  Output = {
    File = "facts.proto";
    Format = proto;
  }
  Articles = [
    { Name = "_статья" }
  ]
  Facts = [
    { Name = "TFdo" }
  ]
}

Сохранит файл с фактами типа TFdo в facts.proto.