SlideShare a Scribd company logo
Томита-парсер
инструмент для извлечения фактов

Дмитрий Панкратов , Наталья Остапук



NLPseminar, Санкт-Петербург, 15 декабря 2012 года
Вступление
Томита-парсер
Инструмент для извлечения фактов
• В основе парсера лежит алгоритм GLR – парсинга
  (http://ru.wikipedia.org/wiki/GLR-парсер)

• Автор алгоритма - Масару Томита, мы назвали
  парсер в его честь.

• Извлечение фактов - извлечение структурированных
  данных из текста на естественном языке.

• Извлечение фактов происходит при помощи
  контекстно-свободных грамматик и словарей
  ключевых слов.
Как писать грамматики?
Что делает томита-парсер?
                                    Томита-парсер



Тяжёлый труд
облагораживает                                      тяжёлый | труд
                       tomitaparser.exe
                                                    хороший | человек
хорошего человека


      Исходный текст                                   Факты



                          словари
                       и грамматики
Наша задача
Заполнение «карточки фильма»
информацией, извлеченной из
текста на естественном языке
 название
 жанр


 год


 оригинальное название


 режиссер
Откуда берется исходный текст?
• из одного текстового файла
• из нескольких текстовых файлов
  •   папка
  •   .tar архив
• из STDIN
Исходный текст input.txt
Фильм Оливера Стоуна "Александр" основан на
реальной жизни одного из самых выдающихся людей в
истории.
«Титаник» (Titanic) — фильм-катастрофа 1997 года,
снятый Джеймсом Кэмероном, в котором показана
гибель легендарного лайнера «Титаник». Главные роли
в фильме исполнили Кейт Уинслет (Роза Дьюитт
Бьюкейтер) и Леонардо Ди Каприо (Джек Доусон).
«Неприкасаемые» (Intouchables) — трагикомедийный
фильм 2011 года, основанный на реальных событиях.
Главные роли исполняют Франсуа Клюзе и Омар Си,
удостоенный за эту актёрскую работу национальной
премии «Сезар».
Правила в Томите

Грамматика состоит из правил, которые
описывают цепочки
В правиле есть левая и правая часть,
разделенные символом ->
В левой части стоит один нетерминал, правая
состоит из терминалов и нетерминалов.
                  S -> Noun;
Превращаем правила в
грамматику
Грамматика film.cxx

#encoding "utf-8"
#GRAMMAR_ROOT S


S -> Noun;
Корневой словарь mydic.gzt

encoding "utf8";
import "base.proto";             всегда
import "articles_base.proto";    копируем

TAuxDicArticle "фильм"         эту статью будем
{                                 запускать
key = { "tomita:film.cxx" type=CUSTOM }
}
Конфигурация парсера
●   Откуда читать текст? - секция Input (File, ...)
●   В какой кодировке? - Input.Encoding
●   Куда записывать факты? - секция Output
●   В каком формате и кодировке? - там же
                        +
●   Какие грамматики запускать? - Articles
●   Какие факты записывать? - Facts
Файл конфигурации config.proto
encoding "utf8";
TTextMinerConfig {
  Dictionary = "mydic.gzt";      корневой словарь
                         (обязательный параметр)

 Input = {File = "input.txt";}   входной файл
   Output = {File = "output.txt"; сюда записываем
              Format = text;}        результат
   Articles = [                   ссылка на статью
     { Name = "фильм" }             из словаря
   ]
}
Запускаем!

Windows:
tomitaparser.exe config.proto
Linux / *BSD (bash)
./tomitaparser config.proto
Результат output.txt
Фильм Оливера Стоуна "Александр" основан на реальной
жизни одного из самых выдающихся людей в истории .
"Титаник" ( Titanic ) — фильм-катастрофа 1997 года ,
снятый Джеймсом Кэмероном , в котором показана
гибель легендарного лайнера "Титаник" .
Главные роли в фильме исполнили Кейт Уинслет ( Роза
Дьюитт Бьюкейтер ) и Леонардо Ди Каприо ( Джек Доусон
).
«Неприкасаемые" ( Intouchables ) — трагикомедийный
фильм 2011 года , основанный на реальных событиях .
Главные роли исполняют Франсуа Клюзе и Омар Си ,
удостоенный за эту актёрскую работу национальной
премии "Сезар" .
Но если мы добавим
отладочный вывод…
Файл конфигурации config.proto
encoding "utf8";
TTextMinerConfig {
  Dictionary = "mydic.gzt";
    PrettyOutput = "pretty.html";
    Input = {File = "input.txt";}
    Output = {File = "output.txt";
               Format = text}

    Articles = [ { Name = "фильм" } ]
}
Подробный результат pretty.html
Пометы-ограничения

Регистр: h-reg1, h-reg2, h-reg3, l-reg
Многословная сущность: mw
Первое слово в предложении: fw
Вершина синтаксической группы: rt
И другие
Теперь мы можем выделять
имена собственные
Грамматика film.cxx
#encoding "utf-8"
#GRAMMAR_ROOT S

Name -> Word<h-reg1, ~fw>;
Name -> Word<h-reg1, ~fw> Word<h-reg1>;
Name -> Word<h-reg1, ~fw> Word<h-reg1>
Word<h-reg1>;

S -> Name;
Не обязательно писать одно и
то же несколько раз
Операторы
Позволяют получить более удобную сокращенную
запись правил грамматики
* — символ повторяется 0 или более раз


                 S -> Adj* Noun;
                       =
                 S -> Noun;
                 S -> Adj Noun;
                 S -> Adj Adj Noun;
                 …
Операторы

+ — символ повторяется 1 или более раз


                  S -> Adj+ Noun;
                        =
                  S -> Adj Noun;
                  S -> Adj Adj Noun;
                  S -> Adj Adj Adj Noun;
                  …
Операторы

() — символ входит в правило 0 или 1 раз



                  S -> (Adj) Noun;
                        =
                  S -> Noun;
                  S -> Adj Noun;
Грамматика film.cxx

#encoding "utf-8"
#GRAMMAR_ROOT S

Name -> Word<h-reg1, ~fw> Word<h-reg1>*;

S -> Name;
Имена собственные уже не
стыдно интерпретировать в
факты
Описание фактов
facttypes.proto
import "base.proto";              всегда
import "facttypes_base.proto";   копируем

message Film: NFactType.TFact    имя факта
{
  required string Name = 1;      поля факта
}
Корневой словарь mydic.gzt
encoding "utf8";
import "base.proto";
import "articles_base.proto";

import "facttypes.proto";

TAuxDicArticle "фильм"
{
key = { "tomita:film.cxx" type=CUSTOM }
}
Файл конфигурации config.proto
encoding "utf8";
TTextMinerConfig {
  Dictionary = "mydic.gzt";
 PrettyOutput = "pretty.html";

    Input = {File = "input.txt";}
    Output = {File = "output.txt"; Format = text;}

    Articles = [ { Name = "фильм" } ]
    Facts = [ { Name = "Film" } ]
}
Грамматика film.cxx

#encoding "utf-8"
#GRAMMAR_ROOT S

Name -> Word<h-reg1, ~fw> Word<h-reg1>*;

S -> Name interp (Film.Name);
Результат output.txt
Фильм Оливера Стоуна "Александр" основан на реальной жизни одного из
самых выдающихся людей в истории .
         Film
         {
                    Name = Оливер Стоуна "Александр“
         }
"Титаник" ( Titanic ) — фильм-катастрофа 1997 года , снятый Джеймсом
Кэмероном , в котором показана гибель легендарного лайнера "Титаник" .
         Film
         {
                    Name = Titanic
         }
         Film
         {
                    Name = 1997
         }
         Film
         {
                    Name = Джеймс Кэмероном
         }
Результат output.txt
Главные роли в фильме исполнили Кейт Уинслет (
Роза Дьюитт Бьюкейтер ) и Леонардо Ди Каприо (
Джек Доусон ) .

Film { Name = Кейт Уинслет}

Film { Name = Роза Дьюитт Бьюкейтер}

Film { Name = Леонардо Ди Каприо}

Film { Name = Джек Доусон}
Результат pretty.html
Что это?



             ?
           ?,,
Согласование
Согласование

По роду, числу и падежу: gnc-agr

По числу и падежу: nc-agr

По роду и числу: gc-agr

По падежу: n-agr

И другие
Грамматика film.cxx
#encoding "utf-8"

#GRAMMAR_ROOT S

Name -> Word<h-reg1, ~fw, nc-agr[1]> Word<h-reg1, nc-
agr[1]>*;

S -> Name interp (Film.Name);
Результат pretty.html
Переходим к делу
Выделяем название фильма
Файл film.cxx
#encoding "utf-8"

#GRAMMAR_ROOT S

//Name -> Word<h-reg1, ~fw, nc-agr[1]> Word<h-reg1,
nc-agr[1]>*;

FilmName -> Word<h-reg1, quoted>;
FilmName -> Word<h-reg1, l-quoted> Word* Word<r-
quoted>;

S -> FilmName interp (Film.Name);
Результат pretty.html
Что нам не нравится?

1. «Неприкасаемые» нормализовались
2. В качестве названия фильма
   выделилось название судна и
   название премии
Решаем проблему нормализации
Файл film.cxx
#encoding "utf-8"

#GRAMMAR_ROOT S

//Name -> Word<h-reg1, ~fw, nc-agr[1]> Word<h-reg1,
nc-agr[1]>*;

FilmName -> Word<h-reg1, quoted>;
FilmName -> Word<h-reg1, l-quoted> Word* Word<r-
quoted>;

S -> FilmName interp (Film.Name::not_norm);
Результаты pretty.html
Решаем проблему лишних
срабатываний
Нужно, чтобы перед или после названия фильма
стоял дескриптор.

Для дескрипторов удобнее всего создать словарь.
Словари
Словарь genre.gzt
encoding "utf8";

TAuxDicArticle "жанр"
{
  key = "комедия"
  key = "комедийный фильм"
  key = "трагикомедийный фильм"
  key = "фильм ужасов"
  key = "фильм-катастрофа"
  key = "триллер"
}
Корневой словарь mydic.gzt
encoding "utf8";

import "base.proto";
import "articles_base.proto";

import "facttypes.proto";

import "genre.gzt";

TAuxDicArticle "фильм"
{
key = { "tomita:film.cxx" type=CUSTOM }
}
Посмотрим еще раз на входной
файл
Фильм Оливера Стоуна "Александр" основан на реальной
жизни одного из самых выдающихся людей в истории.

"Титаник" (Titanic) — фильм-катастрофа 1997 года, снятый
Джеймсом Кэмероном, в котором показана гибель
легендарного лайнера «Титаник». Главные роли в фильме
исполнили Кейт Уинслет (Роза Дьюитт Бьюкейтер) и
Леонардо Ди Каприо (Джек Доусон).

«Неприкасаемые»(Intouchables) — трагикомедийный
фильм 2011 года, основанный на реальных событиях.
Главные роли исполняют Франсуа Клюзе и Омар Си,
удостоенный за эту актёрскую работу национальной
премии «Сезар».
Надо учесть:

1. После названия фильма на русском может идти
   оригинальное название в скобках. А может и не
   идти

2. Между названием и дескриптором может стоять
   тире

3. Дескриптор может быть как после, так и перед
   названием
Грамматика film.cxx
#encoding "utf-8"
#GRAMMAR_ROOT S
//Name -> Word<h-reg1, ~fw, nc-agr[1]> Word<h-reg1, nc-agr[1]>*;
FilmName -> Word<h-reg1, quoted>;
FilmName -> Word<h-reg1, l-quoted> Word* Word<r-quoted>;
OriginalName -> Word<h-reg1, lat> Word<lat>*;

Genre -> Word<kwtype="жанр">;
Film -> 'фильм';
Descr -> Genre | Film;

S -> Descr FilmName interp (Film.Name::not_norm) (LBracket)
(OriginalName) (RBracket);
S -> FilmName interp (Film.Name::not_norm) (LBracket) (OriginalName)
(RBracket) (Hyphen) Descr;
Результат pretty.html
Кстати, оригинальное
название и жанр — тоже
полезная информация!
Описание фактов
facttypes.proto
import "base.proto";
import "facttypes_base.proto";

message Film: NFactType.TFact
{
  required string Name = 1;
  optional string Genre = 2;
  optional string OriginalName = 3;
}
Грамматика film.cxx
Genre -> Word<kwtype="жанр"> interp
(Film.Genre);
Film -> 'фильм';
Descr -> Genre | Film;

S -> Descr FilmName interp (Film.Name::not_norm)
(LBracket) (OriginalName interp (Film.OriginalName))
(RBracket);
S -> FilmName interp (Film.Name::not_norm)
(LBracket) (OriginalName interp (Film.OriginalName))
(RBracket) (Hyphen) Descr;
Результат pretty.output
Извлекаем режиссера
Конструкции:

1. Родительный падеж после дескриптора

2. Дескриптор + снятый + ФИО в творительном
   падеже



             Нужна морфология
Пометы gram
Проверяет значения грамматических характеристик

<gram> = "им, муж, ед"

<gram> = "прич"

<gram> = "brev"
Описание фактов
facttypes.proto
import "base.proto";
import "facttypes_base.proto";

message Film: NFactType.TFact
{
  required string Name = 1;
  optional string Genre = 2;
  optional string OriginalName = 3;
  optional string Director = 4;
}
Грамматика film.cxx
Name -> Word<h-reg1, ~fw, nc-agr[1]> Word<h-reg1, nc-agr[1]>*;
….
Director -> Name<gram="род"> interp (Film.Director);
Director -> Comma 'снять'<gram="прич"> Name<gram="твор">
interp (Film.Director);

DescrDirector -> Descr (Director); //дескриптор фильма+имя режиссёра

S -> DescrDirector FilmName interp (Film.Name::not_norm)
(LBracket) (OriginalName interp (Film.OriginalName)) (RBracket);
S -> FilmName interp (Film.Name::not_norm) (LBracket)
(OriginalName interp (Film.OriginalName)) (RBracket) (Hyphen)
DescrDirector;
Результат pretty.html
Даты
Включение грамматик

Правила, которые могут использоваться во многих
грамматиках, целесообразно выделять в отдельную
грамматику.

Например, грамматика дат.
Грамматика date.cxx
#encoding "utf-8"
#GRAMMAR_ROOT S

Date -> Word<wff="(19[0-9]{2})|(20[0-1][0-9])">;
Descr -> 'год';

S -> Date Descr<gram='род'>;
Корневой словарь mydic.gzt
TAuxDicArticle "фильм"
{
key = { "tomita:film.cxx" type=CUSTOM }
}

TAuxDicArticle "даты"
{
key = { "tomita:date.cxx" type=CUSTOM }
}
facttypes.proto

optional string Date = 5;
Грамматика film.cxx
Date -> AnyWord<kwtype="даты">;

Director -> Name<gram="род"> interp (Film.Director);
Director -> Comma 'снять'<gram="прич">
Name<gram="твор"> interp (Film.Director);
DescrDirector -> Descr (Date interp (Film.Date)) (Director);
Результат pretty.output
Ура, получилось!
Подробнее тут:



http://api.yandex.ru/tomita/
Томита-парсер
Что можно извлечь?
Объекты в тексте:       Связи между этими объектами:
- даты                  - События
- адреса
- телефоны              - Мнения и отзывы
- ФИО
- название товара       - Контактные данные
- действие
- тональность…          - Объявления
 Объект 1           Объект 2        Тип связи
 Яндекс             Аркадий Волож   директор
Извлечение фактов в Яндексе
В проекте Яндекс.Новости
                        для извлечения адресов




               для геопривязки
                  сюжетов


                для выделения
              компаний и персон
Извлечение фактов в Яндексе
В проекте Яндекс.Работа




     для пополнения фильтров
даты рождения и смерти




                             свободные определения


                               место работы и должность




http://news.yandex.ru/people/el1tsin_boris.html
Томита-парсер: Аналоги
JAPE (Java Annotation Patterns Engine)
    • Конечный автомат над множеством регулярок
    • Часть GATE – фреймворка для лингвистических задач
    • http://gate.ac.uk/
AGFL (Affix Grammars Over a Finite Lattice)
    • Контекстно-свободные грамматики ограничены набором
        предопределенных значений категорий
    • http://www.agfl.cs.ru.nl/
LSPL (LexicoSyntactic Pattern Language)
    • язык, на котором можно записывать лексико-синтаксические
        шаблоны
    • http://www.lspl.ru/index.php
AIRE (Artificial Intelligence Information Retrieval Engine)
    • универсальный базовый компонент систем информационного
        поиска и автоматического перевода
    • http://clck.ru/4JKhe
Вопросы?
Дмитрий Панкратов, Наталья Остапук

Группа извлечения фактов
Отдел лингвистических технологий




tomita@yandex-team.ru

More Related Content

What's hot

Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверами
Maxim Kulsha
 
Работа с ошибками. Как ловить исключения и что потом с ними делать (Григорий ...
Работа с ошибками. Как ловить исключения и что потом с ними делать (Григорий ...Работа с ошибками. Как ловить исключения и что потом с ними делать (Григорий ...
Работа с ошибками. Как ловить исключения и что потом с ними делать (Григорий ...
IT-Доминанта
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгирование
Python Meetup
 
Groovy jug-moscow-part 1
Groovy jug-moscow-part 1Groovy jug-moscow-part 1
Groovy jug-moscow-part 1
Evgeny Borisov
 
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST""Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
PyNSK
 
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...
Ontico
 
РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)
Dmitry Evteev
 
Язык программирования GO
Язык программирования GOЯзык программирования GO
Язык программирования GO
Python Meetup
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
Badoo Development
 
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 Practical Python Packaging / Стас Рудаков / Web Developer Wargaming Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Python Meetup
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Ontico
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
larhat
 
Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?
PyNSK
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего внимания
Michael Pankov
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Ontico
 
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
DefconRussia
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Stas Vyschepan
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
PyNSK
 

What's hot (20)

php frameworks
php frameworksphp frameworks
php frameworks
 
Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверами
 
Работа с ошибками. Как ловить исключения и что потом с ними делать (Григорий ...
Работа с ошибками. Как ловить исключения и что потом с ними делать (Григорий ...Работа с ошибками. Как ловить исключения и что потом с ними делать (Григорий ...
Работа с ошибками. Как ловить исключения и что потом с ними делать (Григорий ...
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгирование
 
Groovy jug-moscow-part 1
Groovy jug-moscow-part 1Groovy jug-moscow-part 1
Groovy jug-moscow-part 1
 
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST""Модифицируй это!" или "Больше магии Python с помощью изменения AST"
"Модифицируй это!" или "Больше магии Python с помощью изменения AST"
 
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...
 
РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)
 
Язык программирования GO
Язык программирования GOЯзык программирования GO
Язык программирования GO
 
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
"Почему язык Lua — это интересно?", Ник Заварицкий, (Mail.ru Group)
 
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 Practical Python Packaging / Стас Рудаков / Web Developer Wargaming Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
 
Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего внимания
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
 
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
 
Chanbot
ChanbotChanbot
Chanbot
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
 

Similar to Tomita 4марта

Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
Infinity
 
20100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-0320100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-03Computer Science Club
 
20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliaminComputer Science Club
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Yandex
 
Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11
Yandex
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
Vasil Remeniuk
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
Tatyanazaxarova
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Mail.ru Group
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
corehard_by
 

Similar to Tomita 4марта (15)

Tomita
TomitaTomita
Tomita
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
L10N
L10NL10N
L10N
 
20100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-0320100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-03
 
20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11Дмитрий Прокопцев — R-ссылки в С++11
Дмитрий Прокопцев — R-ссылки в С++11
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 

More from Natalia Ostapuk

Nlp seminar.kolomiyets.dec.2013
Nlp seminar.kolomiyets.dec.2013Nlp seminar.kolomiyets.dec.2013
Nlp seminar.kolomiyets.dec.2013Natalia Ostapuk
 
Mt engine on nlp semniar
Mt engine on nlp semniarMt engine on nlp semniar
Mt engine on nlp semniarNatalia Ostapuk
 
Клышинский 8.12
Клышинский 8.12Клышинский 8.12
Клышинский 8.12Natalia Ostapuk
 
место онтологий в современной инженерии на примере Iso 15926 v1
место онтологий в современной инженерии на примере Iso 15926 v1место онтологий в современной инженерии на примере Iso 15926 v1
место онтологий в современной инженерии на примере Iso 15926 v1Natalia Ostapuk
 
2011 04 troussov_graph_basedmethods-weakknowledge
2011 04 troussov_graph_basedmethods-weakknowledge2011 04 troussov_graph_basedmethods-weakknowledge
2011 04 troussov_graph_basedmethods-weakknowledgeNatalia Ostapuk
 
2011 04 troussov_graph_basedmethods-weakknowledge
2011 04 troussov_graph_basedmethods-weakknowledge2011 04 troussov_graph_basedmethods-weakknowledge
2011 04 troussov_graph_basedmethods-weakknowledgeNatalia Ostapuk
 

More from Natalia Ostapuk (20)

Gromov
GromovGromov
Gromov
 
Aist academic writing
Aist academic writingAist academic writing
Aist academic writing
 
Aist academic writing
Aist academic writingAist academic writing
Aist academic writing
 
Ponomareva
PonomarevaPonomareva
Ponomareva
 
Nlp seminar.kolomiyets.dec.2013
Nlp seminar.kolomiyets.dec.2013Nlp seminar.kolomiyets.dec.2013
Nlp seminar.kolomiyets.dec.2013
 
Mt engine on nlp semniar
Mt engine on nlp semniarMt engine on nlp semniar
Mt engine on nlp semniar
 
Konyushkova
KonyushkovaKonyushkova
Konyushkova
 
Braslavsky 13.12.12
Braslavsky 13.12.12Braslavsky 13.12.12
Braslavsky 13.12.12
 
Клышинский 8.12
Клышинский 8.12Клышинский 8.12
Клышинский 8.12
 
Zizka synasc 2012
Zizka synasc 2012Zizka synasc 2012
Zizka synasc 2012
 
Zizka immm 2012
Zizka immm 2012Zizka immm 2012
Zizka immm 2012
 
Zizka aimsa 2012
Zizka aimsa 2012Zizka aimsa 2012
Zizka aimsa 2012
 
Analysis by-variants
Analysis by-variantsAnalysis by-variants
Analysis by-variants
 
место онтологий в современной инженерии на примере Iso 15926 v1
место онтологий в современной инженерии на примере Iso 15926 v1место онтологий в современной инженерии на примере Iso 15926 v1
место онтологий в современной инженерии на примере Iso 15926 v1
 
Text mining
Text miningText mining
Text mining
 
Additional2
Additional2Additional2
Additional2
 
Additional1
Additional1Additional1
Additional1
 
Seminar1
Seminar1Seminar1
Seminar1
 
2011 04 troussov_graph_basedmethods-weakknowledge
2011 04 troussov_graph_basedmethods-weakknowledge2011 04 troussov_graph_basedmethods-weakknowledge
2011 04 troussov_graph_basedmethods-weakknowledge
 
2011 04 troussov_graph_basedmethods-weakknowledge
2011 04 troussov_graph_basedmethods-weakknowledge2011 04 troussov_graph_basedmethods-weakknowledge
2011 04 troussov_graph_basedmethods-weakknowledge
 

Tomita 4марта

  • 1. Томита-парсер инструмент для извлечения фактов Дмитрий Панкратов , Наталья Остапук NLPseminar, Санкт-Петербург, 15 декабря 2012 года
  • 3. Томита-парсер Инструмент для извлечения фактов • В основе парсера лежит алгоритм GLR – парсинга (http://ru.wikipedia.org/wiki/GLR-парсер) • Автор алгоритма - Масару Томита, мы назвали парсер в его честь. • Извлечение фактов - извлечение структурированных данных из текста на естественном языке. • Извлечение фактов происходит при помощи контекстно-свободных грамматик и словарей ключевых слов.
  • 5. Что делает томита-парсер? Томита-парсер Тяжёлый труд облагораживает тяжёлый | труд tomitaparser.exe хороший | человек хорошего человека Исходный текст Факты словари и грамматики
  • 6. Наша задача Заполнение «карточки фильма» информацией, извлеченной из текста на естественном языке название жанр год оригинальное название режиссер
  • 7. Откуда берется исходный текст? • из одного текстового файла • из нескольких текстовых файлов • папка • .tar архив • из STDIN
  • 8. Исходный текст input.txt Фильм Оливера Стоуна "Александр" основан на реальной жизни одного из самых выдающихся людей в истории. «Титаник» (Titanic) — фильм-катастрофа 1997 года, снятый Джеймсом Кэмероном, в котором показана гибель легендарного лайнера «Титаник». Главные роли в фильме исполнили Кейт Уинслет (Роза Дьюитт Бьюкейтер) и Леонардо Ди Каприо (Джек Доусон). «Неприкасаемые» (Intouchables) — трагикомедийный фильм 2011 года, основанный на реальных событиях. Главные роли исполняют Франсуа Клюзе и Омар Си, удостоенный за эту актёрскую работу национальной премии «Сезар».
  • 9. Правила в Томите Грамматика состоит из правил, которые описывают цепочки В правиле есть левая и правая часть, разделенные символом -> В левой части стоит один нетерминал, правая состоит из терминалов и нетерминалов. S -> Noun;
  • 12. Корневой словарь mydic.gzt encoding "utf8"; import "base.proto"; всегда import "articles_base.proto"; копируем TAuxDicArticle "фильм" эту статью будем { запускать key = { "tomita:film.cxx" type=CUSTOM } }
  • 13. Конфигурация парсера ● Откуда читать текст? - секция Input (File, ...) ● В какой кодировке? - Input.Encoding ● Куда записывать факты? - секция Output ● В каком формате и кодировке? - там же + ● Какие грамматики запускать? - Articles ● Какие факты записывать? - Facts
  • 14. Файл конфигурации config.proto encoding "utf8"; TTextMinerConfig { Dictionary = "mydic.gzt"; корневой словарь (обязательный параметр) Input = {File = "input.txt";} входной файл Output = {File = "output.txt"; сюда записываем Format = text;} результат Articles = [ ссылка на статью { Name = "фильм" } из словаря ] }
  • 16. Результат output.txt Фильм Оливера Стоуна "Александр" основан на реальной жизни одного из самых выдающихся людей в истории . "Титаник" ( Titanic ) — фильм-катастрофа 1997 года , снятый Джеймсом Кэмероном , в котором показана гибель легендарного лайнера "Титаник" . Главные роли в фильме исполнили Кейт Уинслет ( Роза Дьюитт Бьюкейтер ) и Леонардо Ди Каприо ( Джек Доусон ). «Неприкасаемые" ( Intouchables ) — трагикомедийный фильм 2011 года , основанный на реальных событиях . Главные роли исполняют Франсуа Клюзе и Омар Си , удостоенный за эту актёрскую работу национальной премии "Сезар" .
  • 17. Но если мы добавим отладочный вывод…
  • 18. Файл конфигурации config.proto encoding "utf8"; TTextMinerConfig { Dictionary = "mydic.gzt"; PrettyOutput = "pretty.html"; Input = {File = "input.txt";} Output = {File = "output.txt"; Format = text} Articles = [ { Name = "фильм" } ] }
  • 20. Пометы-ограничения Регистр: h-reg1, h-reg2, h-reg3, l-reg Многословная сущность: mw Первое слово в предложении: fw Вершина синтаксической группы: rt И другие
  • 21. Теперь мы можем выделять имена собственные
  • 22. Грамматика film.cxx #encoding "utf-8" #GRAMMAR_ROOT S Name -> Word<h-reg1, ~fw>; Name -> Word<h-reg1, ~fw> Word<h-reg1>; Name -> Word<h-reg1, ~fw> Word<h-reg1> Word<h-reg1>; S -> Name;
  • 23. Не обязательно писать одно и то же несколько раз
  • 24. Операторы Позволяют получить более удобную сокращенную запись правил грамматики * — символ повторяется 0 или более раз S -> Adj* Noun; = S -> Noun; S -> Adj Noun; S -> Adj Adj Noun; …
  • 25. Операторы + — символ повторяется 1 или более раз S -> Adj+ Noun; = S -> Adj Noun; S -> Adj Adj Noun; S -> Adj Adj Adj Noun; …
  • 26. Операторы () — символ входит в правило 0 или 1 раз S -> (Adj) Noun; = S -> Noun; S -> Adj Noun;
  • 27. Грамматика film.cxx #encoding "utf-8" #GRAMMAR_ROOT S Name -> Word<h-reg1, ~fw> Word<h-reg1>*; S -> Name;
  • 28. Имена собственные уже не стыдно интерпретировать в факты
  • 29. Описание фактов facttypes.proto import "base.proto"; всегда import "facttypes_base.proto"; копируем message Film: NFactType.TFact имя факта { required string Name = 1; поля факта }
  • 30. Корневой словарь mydic.gzt encoding "utf8"; import "base.proto"; import "articles_base.proto"; import "facttypes.proto"; TAuxDicArticle "фильм" { key = { "tomita:film.cxx" type=CUSTOM } }
  • 31. Файл конфигурации config.proto encoding "utf8"; TTextMinerConfig { Dictionary = "mydic.gzt"; PrettyOutput = "pretty.html"; Input = {File = "input.txt";} Output = {File = "output.txt"; Format = text;} Articles = [ { Name = "фильм" } ] Facts = [ { Name = "Film" } ] }
  • 32. Грамматика film.cxx #encoding "utf-8" #GRAMMAR_ROOT S Name -> Word<h-reg1, ~fw> Word<h-reg1>*; S -> Name interp (Film.Name);
  • 33. Результат output.txt Фильм Оливера Стоуна "Александр" основан на реальной жизни одного из самых выдающихся людей в истории . Film { Name = Оливер Стоуна "Александр“ } "Титаник" ( Titanic ) — фильм-катастрофа 1997 года , снятый Джеймсом Кэмероном , в котором показана гибель легендарного лайнера "Титаник" . Film { Name = Titanic } Film { Name = 1997 } Film { Name = Джеймс Кэмероном }
  • 34. Результат output.txt Главные роли в фильме исполнили Кейт Уинслет ( Роза Дьюитт Бьюкейтер ) и Леонардо Ди Каприо ( Джек Доусон ) . Film { Name = Кейт Уинслет} Film { Name = Роза Дьюитт Бьюкейтер} Film { Name = Леонардо Ди Каприо} Film { Name = Джек Доусон}
  • 36. Что это? ? ?,,
  • 38. Согласование По роду, числу и падежу: gnc-agr По числу и падежу: nc-agr По роду и числу: gc-agr По падежу: n-agr И другие
  • 39. Грамматика film.cxx #encoding "utf-8" #GRAMMAR_ROOT S Name -> Word<h-reg1, ~fw, nc-agr[1]> Word<h-reg1, nc- agr[1]>*; S -> Name interp (Film.Name);
  • 42. Выделяем название фильма Файл film.cxx #encoding "utf-8" #GRAMMAR_ROOT S //Name -> Word<h-reg1, ~fw, nc-agr[1]> Word<h-reg1, nc-agr[1]>*; FilmName -> Word<h-reg1, quoted>; FilmName -> Word<h-reg1, l-quoted> Word* Word<r- quoted>; S -> FilmName interp (Film.Name);
  • 44. Что нам не нравится? 1. «Неприкасаемые» нормализовались 2. В качестве названия фильма выделилось название судна и название премии
  • 45. Решаем проблему нормализации Файл film.cxx #encoding "utf-8" #GRAMMAR_ROOT S //Name -> Word<h-reg1, ~fw, nc-agr[1]> Word<h-reg1, nc-agr[1]>*; FilmName -> Word<h-reg1, quoted>; FilmName -> Word<h-reg1, l-quoted> Word* Word<r- quoted>; S -> FilmName interp (Film.Name::not_norm);
  • 47. Решаем проблему лишних срабатываний Нужно, чтобы перед или после названия фильма стоял дескриптор. Для дескрипторов удобнее всего создать словарь.
  • 49. Словарь genre.gzt encoding "utf8"; TAuxDicArticle "жанр" { key = "комедия" key = "комедийный фильм" key = "трагикомедийный фильм" key = "фильм ужасов" key = "фильм-катастрофа" key = "триллер" }
  • 50. Корневой словарь mydic.gzt encoding "utf8"; import "base.proto"; import "articles_base.proto"; import "facttypes.proto"; import "genre.gzt"; TAuxDicArticle "фильм" { key = { "tomita:film.cxx" type=CUSTOM } }
  • 51. Посмотрим еще раз на входной файл Фильм Оливера Стоуна "Александр" основан на реальной жизни одного из самых выдающихся людей в истории. "Титаник" (Titanic) — фильм-катастрофа 1997 года, снятый Джеймсом Кэмероном, в котором показана гибель легендарного лайнера «Титаник». Главные роли в фильме исполнили Кейт Уинслет (Роза Дьюитт Бьюкейтер) и Леонардо Ди Каприо (Джек Доусон). «Неприкасаемые»(Intouchables) — трагикомедийный фильм 2011 года, основанный на реальных событиях. Главные роли исполняют Франсуа Клюзе и Омар Си, удостоенный за эту актёрскую работу национальной премии «Сезар».
  • 52. Надо учесть: 1. После названия фильма на русском может идти оригинальное название в скобках. А может и не идти 2. Между названием и дескриптором может стоять тире 3. Дескриптор может быть как после, так и перед названием
  • 53. Грамматика film.cxx #encoding "utf-8" #GRAMMAR_ROOT S //Name -> Word<h-reg1, ~fw, nc-agr[1]> Word<h-reg1, nc-agr[1]>*; FilmName -> Word<h-reg1, quoted>; FilmName -> Word<h-reg1, l-quoted> Word* Word<r-quoted>; OriginalName -> Word<h-reg1, lat> Word<lat>*; Genre -> Word<kwtype="жанр">; Film -> 'фильм'; Descr -> Genre | Film; S -> Descr FilmName interp (Film.Name::not_norm) (LBracket) (OriginalName) (RBracket); S -> FilmName interp (Film.Name::not_norm) (LBracket) (OriginalName) (RBracket) (Hyphen) Descr;
  • 55. Кстати, оригинальное название и жанр — тоже полезная информация!
  • 56. Описание фактов facttypes.proto import "base.proto"; import "facttypes_base.proto"; message Film: NFactType.TFact { required string Name = 1; optional string Genre = 2; optional string OriginalName = 3; }
  • 57. Грамматика film.cxx Genre -> Word<kwtype="жанр"> interp (Film.Genre); Film -> 'фильм'; Descr -> Genre | Film; S -> Descr FilmName interp (Film.Name::not_norm) (LBracket) (OriginalName interp (Film.OriginalName)) (RBracket); S -> FilmName interp (Film.Name::not_norm) (LBracket) (OriginalName interp (Film.OriginalName)) (RBracket) (Hyphen) Descr;
  • 60. Конструкции: 1. Родительный падеж после дескриптора 2. Дескриптор + снятый + ФИО в творительном падеже Нужна морфология
  • 61. Пометы gram Проверяет значения грамматических характеристик <gram> = "им, муж, ед" <gram> = "прич" <gram> = "brev"
  • 62. Описание фактов facttypes.proto import "base.proto"; import "facttypes_base.proto"; message Film: NFactType.TFact { required string Name = 1; optional string Genre = 2; optional string OriginalName = 3; optional string Director = 4; }
  • 63. Грамматика film.cxx Name -> Word<h-reg1, ~fw, nc-agr[1]> Word<h-reg1, nc-agr[1]>*; …. Director -> Name<gram="род"> interp (Film.Director); Director -> Comma 'снять'<gram="прич"> Name<gram="твор"> interp (Film.Director); DescrDirector -> Descr (Director); //дескриптор фильма+имя режиссёра S -> DescrDirector FilmName interp (Film.Name::not_norm) (LBracket) (OriginalName interp (Film.OriginalName)) (RBracket); S -> FilmName interp (Film.Name::not_norm) (LBracket) (OriginalName interp (Film.OriginalName)) (RBracket) (Hyphen) DescrDirector;
  • 66. Включение грамматик Правила, которые могут использоваться во многих грамматиках, целесообразно выделять в отдельную грамматику. Например, грамматика дат.
  • 67. Грамматика date.cxx #encoding "utf-8" #GRAMMAR_ROOT S Date -> Word<wff="(19[0-9]{2})|(20[0-1][0-9])">; Descr -> 'год'; S -> Date Descr<gram='род'>;
  • 68. Корневой словарь mydic.gzt TAuxDicArticle "фильм" { key = { "tomita:film.cxx" type=CUSTOM } } TAuxDicArticle "даты" { key = { "tomita:date.cxx" type=CUSTOM } }
  • 70. Грамматика film.cxx Date -> AnyWord<kwtype="даты">; Director -> Name<gram="род"> interp (Film.Director); Director -> Comma 'снять'<gram="прич"> Name<gram="твор"> interp (Film.Director); DescrDirector -> Descr (Date interp (Film.Date)) (Director);
  • 74. Томита-парсер Что можно извлечь? Объекты в тексте: Связи между этими объектами: - даты - События - адреса - телефоны - Мнения и отзывы - ФИО - название товара - Контактные данные - действие - тональность… - Объявления Объект 1 Объект 2 Тип связи Яндекс Аркадий Волож директор
  • 75. Извлечение фактов в Яндексе В проекте Яндекс.Новости для извлечения адресов для геопривязки сюжетов для выделения компаний и персон
  • 76. Извлечение фактов в Яндексе В проекте Яндекс.Работа для пополнения фильтров
  • 77. даты рождения и смерти свободные определения место работы и должность http://news.yandex.ru/people/el1tsin_boris.html
  • 78. Томита-парсер: Аналоги JAPE (Java Annotation Patterns Engine) • Конечный автомат над множеством регулярок • Часть GATE – фреймворка для лингвистических задач • http://gate.ac.uk/ AGFL (Affix Grammars Over a Finite Lattice) • Контекстно-свободные грамматики ограничены набором предопределенных значений категорий • http://www.agfl.cs.ru.nl/ LSPL (LexicoSyntactic Pattern Language) • язык, на котором можно записывать лексико-синтаксические шаблоны • http://www.lspl.ru/index.php AIRE (Artificial Intelligence Information Retrieval Engine) • универсальный базовый компонент систем информационного поиска и автоматического перевода • http://clck.ru/4JKhe
  • 80. Дмитрий Панкратов, Наталья Остапук Группа извлечения фактов Отдел лингвистических технологий tomita@yandex-team.ru