Создание исследовательского прототипа системы идентификации табличных данныхРефераты >> Программирование и компьютеры >> Создание исследовательского прототипа системы идентификации табличных данных
3.1 Блок Предварительной обработки.
Блок предварительной обработки производит фильтрацию данных, исправление некоторых ошибок и выполняет разбиение на потенциальные признаки.
Он включает в себя фильтр неинформативных символов, и символов несущих неоднозначный смысл. Это все символы кроме кириллицы, латиницы, цифр и в некоторых случаях точки или запятой (разделитель десятичной части, разделитель дней, месяцев, лет в дате), а также кроме символов определяемых экспертом предметной области (например – «%»). Слова вида XxxXxxxx разбиваются на пару слов. Здесь же осуществляется перевод строки в нижний регистр.
Далее проверка на ошибки раскладки клавиатуры. Если в слове встречаются и латинские и кириллические символы, то те, которых меньше заменяются по таблице соответствия. В таблице соответствия латинский символ соответствует символу кириллицы, если они схожи по написанию или звучанию, например («k» и «к»). Такого рода ошибки, оказывается, могут возникать при наборе документов.
Транскрипция латинских слов. Если в родном языке встречаются иностранные слова, то чаще всего это слова которые либо непереводятся, либо их перевод неуместен (имена собственные, названия, торговые марки и т.д.). В другом описании объекта эти же имена могут встретиться в русской транскрипции. Транскриптор не имеет словаря, работает по матрице транскрипции, с небольшим набором правил. Неточно, но на данном этапе его достаточно, а дальше будет дорабатываться, возможно, будет необходим словарь.
В позиции ищутся и выделяются конструкции типа «Число - Единица Измерения». Единицы Измерения (Е.И.) для этого берутся из справочника единиц измерения, который создается экспертом предметной области по следующему принципу: Е.И. заносится в справочник, если соответствующий числовой признак играет роль при идентификации. Предусматривается несколько аббревиатур для некоторых специальных Е.И Также возможна пустая Е.И Конструкции «Число - Единица Измерения», образуют числовые признаки.
Если после выбора всех конструкций «Число - Единица Измерения» содержимое поля не пусто, оно является строковым признаком. Теперь имеем ряд числовых признаков и один строковый.
3.2 Блок Идентификации.
Рассмотрим сначала общую схему алгоритма вычисления меры похожести двух описаний. Непосредственно говорить о мере похожести можно только для строковых данных. Для сравнения числовых признаков естественно просто задать относительную погрешность. Значит, результатом сравнения двух числовых признаков является булевое значение. Допустим, в двух описаниях присутствует i-ый числовой признак тогда, если результатом сравнения явилось «ЛОЖЬ» легко вынести решение о несовпадении этих описаний. Сложнее когда в одной из них есть этот признак, а в другой нет. Как показал анализ, это могут быть описания одного объекта. Возможно, стоит ввести вес числового признака. Этот вопрос остается открытым в работе.
В Иерархическом идентификаторе выполняется в первую очередь идентификация групп объектов, а лишь потом идентификация соответствующих объектов. Алгоритм идентификации в обоих случаях один. Лишь во втором случае сужается область поиска.
Идея сравнения двух строковых признаков следующая. Каждый строковый признак может быть представлен списком слов, разделителем слов считаетя пробел. Слова сравниваются друг с другом поочередно
4. Алгоритм сравнения двух слов.
Даже в достаточно формализованных предметных областях часто невозможно прямое сравнение слов строковых признаков только из-за различных морфологических конструкций и принятых сокращений.
В ситуации, когда во многих базах данных средства ввода информации не имеют орфрграфического контроля, когда некоторые иностранные слова (например, торговые марки) имеют свободную неустоявшуюся транскрипцию в родном языке возможны ошибки и разнописания.
Сравнивние начала двух слов также может не давать полного эффекта в некоторых случаях. Поэтому отчасти оттого, что сравнение строковых данных одно из слабых звеньев системы, отчасти из-за неизбежных погрешностей транскриптора решено было уделить алгоритму сравнивания слов больше внимания и построить алгоритм, который бы учитывал многие факторы.
Если теперь сдвигать матрицы друг относительно друга по вертикали на k элементов, то синий участок единиц совпадет при k=0, красный и зеленый при k=2.
Программная реализация этого алгоритма может быть очень простой. Если составить массив
6. Программная реализация.
6.1 Основные объекты программирования.
В листингах приложения идентификаторы соответствуют следующим обозначениям :
Описание основных классов приложения
classTPositions{
void SaveTo(FILE *f);
void LoadFrom(FILE *f);
int LastIn(AnsiString SourceString,AnsiString SubStr);
AnsiString Replace(AnsiString SourceString,AnsiString Replacer,AnsiString Displacer);
AnsiString TransCrypt(AnsiString LatString);
AnsiString MisPrint(AnsiString MisPrinted);
AnsiString GoodString(AnsiString BadString);
void Init(AnsiString Sentence);
AnsiString Sentence(int fl=-1);
void Clear();
};
TMDIBaseClass = class(TMDIChild)
procedure SetGraphParms;
procedure draw; // функция рисования
procedure AddMinMax( first: boolean;//определяет экстремумы
value : real);//функции
function toy(yy: real): integer;//Функции переводят объектные
function tox(xx: real): integer;// координаты в экранные
function tox1(x: integer): real;//и наоборот
function toy1(y: integer): real;
TMDITimeFunc = class(TMDIBaseClass)
// обеспечивают изменение опорных точек спроса
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure GetSplineParms;
procedure SelectedPoint(var no,side:Integer;X, Y: Integer);
TSpline = class
procedure InitHorizont(aSDPoints:integer;
aDPoints:integer;aSDLevelDef:real);
procedure Interpolation;//интерполяция на всем временном интервале
Интерполяция сплайна со свободными границами
procedure InterpolationSplineFree(
var startNo:integer;