АОТ   Автоматическая Обработка Текста

главная о нас продукты скачать  демо технологии   ^

Графематика

1. Общее описание

2. Входные и выходные данные

3. Графематические дескрипторы

4. Деление на предложения

5. Описание COM-Interface

 

1. Общее описание ^

Графематический анализ (ГрафАн) - это программа начального анализа естественного текста, представленного в виде цепочки ASCII символов, вырабатывающая информацию, необходимую для дальнейшей обработки Морфологическим  и Синтаксическим процессорами. В задачу графематического анализа входят:

  1. Разделение входного текста на слова, разделители и т.д.
  2. Сборка слов, написанных в разрядку;
  3. Выделение устойчивых оборотов, не имеющих словоизменительных вариантов;
  4. Выделение ФИО (фамилия, имя, отчество), когда имя и отчество написаны инициалами;
  5. Выделение электронных адресов и имен файлов;
  6. Выделение предложений из входного текста;
  7. Выделение абзацев, заголовков, примечаний.

 Графематический анализ оформлен как СОM-объект, для которого создано описание на языке idl.

 

2. Входные и выходные данные ^

На вход графематике подается файл плайн-текста в Windows-кодировке. На выходе графематика строит таблицу, состоящую из двух столбцов. В первом столбце стоит некоторый кусок входного текста (выделенный по правилам, о которых мы скажем ниже), во втором столбце стоят графематические дескрипторы, характеризующие этот кусок текста. Например, из текста "Иван спал" будет построена таблица из трех строк

Кусок входного текста Графематические дескрипторы
Иван RLE Aa NAM?
спал RLE aa SENT_END

В первый столбец всегда помещается часть входного текста. Если входные символы являются последовательностью из мягких разделителей (пробел, табуляция, возврат каретки), тогда используются другие символы, номера которых включены в описание на языке idl.

 

3. Графематические дескрипторы ^

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

Название Русское название Объяснение Примеры
RLE ЛЕ русская лексема, присваивается последовательностям, состоящим из кириллицы Иван
LLE ИЛЕ иностранная лексема, присваивается последовательностям из латиницы John
DEL РЗД разделитель. "*', '=', '_'
PUN ЗПР знак препинания, присваивается последовательностям, состоящим из одинаковых знаков препинания ".", '[', ']', '(', ')', '-', ':', ';'
DC ЦК цифровой комплекс, присваивается последовательностям, состоящим из цифр 1234
DSC ЦБК цифро-буквенный комплекс, присваивается последовательностям, состоящим из цифр и букв 34h
GRAUNK сложный узел, присваивается последовательностям, не обладающим вышеперечисленными признаками  

Разновидности дескриптора DEL

SPC ПРБ строка пробелов или табуляций
EOLN КСТ признак конца строки
PAR_SYM символ параграфа
EMSYM нулевой символ

Разновидности дескриптора PUN:

OPN открывающая скобка '{', '[', '('
CLS закрывающая скобка '}', ']', ')'
HYP дефис -

Разновидности дескриптора ЗПР и РЗД:

DPUN последовательность одинаковых символов, длина которой больше 20
PLP последовательность одинаковых символов, длина которой больше 1

Разновидности дескриптора ЛЕ и ИЛЕ:

aa признак того, что все символы лексемы - малые мама
Aa признак того, что первый символ лексемы - большой; Мама
AA признак того, что все символы лексемы - большие МАМА

Теперь опишем дескрипторы, которые появляются на строке в зависимости от контекста, т.е. они вычисляются не только из текущей строки, но и из номера текущей строки и строк, которые находятся выше и ниже вычисляемой.

Контекстные дескрипторы:

BEG ставится на начале текста (входного файла), т.е. всегда стоит на нулевой строке таблице. Причем, важно сказать, что нулевая строка таблицы используется как служебная ( содержимое первого столбца нулевой строки не входит во входной текст)  
EOP ставится на конце фразы.Концом фразы считается только ";".  
SENT_END конец предложения  
NAM? признак того, что лексема, возможно, является частьюимени собственного. Присваивается лексеме, начинающейся с большой буквы и не имеющей перед собой символа конца предложения.  
BUL ставится на начале пункта перечисления  
INDENT ставится на начале абзаца  
EXPR1 ставится на начале оборота типа "во взаимодействии с"
EXPR2 ставится на конце оборота  
FAM1 ставится на начале ФИО типа "Иванов И.И."
FAM2 ставится на конце ФИО  
FILE1 начало имени файла c:\test.txt
FILE1 конец имени файла  
ABB1 начало сокращения и т.п.
ABB2 конец сокращение  
KEY1 начало последовательности обозначений клавиш  Ctrl-F
KEY2 начало последовательности обозначений клавиш
EA электронный адрес

www.aot.ru

sokirko@yandex.ru

Кроме этого, используются дескрипторы, относящиеся к макросинтаксическому анализу (анализу расположения абзацев, заголовков). В макросинтакксическом анализе[1] абзацы, заголовки и т.д. называются условно предложениями (УП). Макросинтаксические дескрипторы ставятся на конце УП в зависимости от типа УП.

CS? ставится на конце УП, тип которого не определен
CS ставится на конце простого УП
HDNG ставится на конце заголовка
CS_AUX ставится на конце УП, заключенного в скобки
CS_PRNT ставится на конце УП, заканчивающегося на двоеточие
DOC ставится на нулевой строке графематической таблицы

 

4. Деление на предложения ^

Этот алгоритм включен в модуль графематики, поскольку на результаты его работы опирается макросинтаксический анализ. На вход алгоритма подаются два числа StartPos и EndPos, которые обозначают первую и последнюю строки входного текста.

Программа ищет конец предложения, а потом после него ищет начало предложения. Алгоритм основывается на следующем постулатах:

  1. Начало текста совпадает с началом первого предложения, конец текста – с концом последнего.
  2. Предложение всегда начинается с большой буквы;
  3. Предложение не бывает больше одного абзаца.
  4. Предложение не может состоять только из знаков препинания.

Определим вспомогательный примитив IsSentenceEndMark. На вход подается номер строки. На выходе примитив возвращает истину, если эта строка содержит символ "?", "!", "." или многоточие

Определим вспомогательный примитив IsSentenceEndSeq. На вход подается номер строки. Примитив возвращает истину в двух следующих случаях:

  1. Если для этой строки верна функция IsSentenceEndMark и если контактно справа нет закрывающей кавычки (если предложение закавычено, закрывающая кавычка входит в это предложение);
  2. Если строка является закрывающей кавычкой, а контактно слева стоит строка, для которой верно IsSentenceEndMark.

Используя эти примитивы, программу поиска предложений можно грубо описать так:

  1. Пусть i – текущая строка между StartPos и EndPos.
  2. Если на строке i стоит помета начала абзаца, тогда нужно пройти назад все пробелы и длинные разделители (PLP) и дойти до конца предыдущего абзаца. Если в конце абзаца (до первого слова) стоит строка, которая удовлетворяет IsSentenceEndSeq, тогда нужно поставить SENT_END этой строке, иначе нужно поставить SENT_END на конец предыдущего абзаца.
  3. Если на строке i стоит помета макросинтаксическая помета УП, тогда нужно сделать то же самое, что и в пункте 2, только надо учесть, что помета УП ставится на конце абзаца, а не начале (как в пункте 2).
  4. Если до начала текущего предложений стояла открывающая скобка(кавычка), и текущая строка указывает на слово до соотв. закрывающей скобки(кавычки), тогда нужно поставить SENT_END на закрывающую скобку(кавычку), а i сместить на ближайшее после закрывающей кавычки(скобки) слово.
  5. Если текущая строка удовлетворяет функции IsSentenceEndSeq и не стоит внутри графематических групп (FIO1-FIO2 и т.д.), тогда проходим все знаки препинания от текущей строки. Проверяем, что знак препинания, который заканчивает предложения, не должен стоять в самом начале строки. Далее ищем первое слово от текущей строки и считаем его началом нового предложения. 

 

главная о нас продукты скачать  демо технологии   ^

 
Разработка DiP.
© 2003 АОТ. Все права защищены.