iNamePorog23, iTextPorog23, iKeyPorog23,
iFuzzyPorog: integer;
stWord, res: string;
function GetRes(NameCnt, TextCnt, KeyCnt: integer): String;
begin
if (NameCnt < iNamePorog12)
and (TextCnt < iTextPorog12)
and (KeyCnt < iKeyPorog12)
then result:= '-'
else
if (NameCnt >= iNamePorog23)
or (TextCnt >= iTextPorog23)
or (KeyCnt >= iKeyPorog23)
then result:= '+'
else result:= '?';
end;
begin
// Устанавливаемпорогисрабатывания
iNamePorog12:= frmClassifySettings.GetNamePorog(12);
iTextPorog12:= frmClassifySettings.GetTextPorog(12);
iKeyPorog12:= frmClassifySettings.GetKeyPorog(12);
iNamePorog23:= frmClassifySettings.GetNamePorog(23);
iTextPorog23:= frmClassifySettings.GetTextPorog(23);
iKeyPorog23:= frmClassifySettings.GetKeyPorog(23);
iFuzzyPorog:= frmClassifySettings.GetFuzzyPorog;
// Начинаем классификацию
dmIAS.aqDict.Close;
dmIAS.aqDict.Open;
dmIAS.TruncClassify;
pbClassify.Position:= 0;
pbClassify.Max:= dmIAS.atPublikatsii.RecordCount * (dmIAS.aqDict.RecordCount+1);
with dmIAS.atPublikatsii do
begin
First;
while not Eof do
begin
id_publ:= FieldByName('id_publ').AsInteger;
Name_cnt:= 0;
Text_cnt:= 0;
Key_cnt:= 0;
dmIAS.aqDict.First;
id_rubr:= dmIAS.aqDict.FieldByName('id').AsInteger;
level:= dmIAS.aqDict.FieldByName('level').AsInteger;
while not dmIAS.aqDict.Eof do
begin
// Классифицируем по словарю для каждой рубрики
if id_rubr <> dmIAS.aqDict.FieldByName('id').AsInteger
then
begin
res:= GetRes(Name_cnt, Text_cnt, Key_cnt);
dmIAS.InsertClassify(id_publ, id_rubr, level, Name_cnt,
Text_cnt, Key_cnt, res);
id_rubr:= dmIAS.aqDict.FieldByName('id').AsInteger;
level:= dmIAS.aqDict.FieldByName('level').AsInteger;
Name_cnt:= 0;
Text_cnt:= 0;
Key_cnt:= 0;
end;
stWord:= AnsiUpperCase(dmIAS.aqDict.FieldByName('Word').AsString);
// Классификацияпонаименованию
im:= IndistinctMatching(length(stWord),
stWord,
AnsiUpperCase(FieldByName('name_publ').AsString));
if im > iFuzzyPorog
then Inc(Name_cnt);
// Классификацияпотексту
im:= IndistinctMatching(length(stWord),
stWord,
AnsiUpperCase(FieldByName('text_publ').AsString));
if im > iFuzzyPorog
then Inc(Text_cnt);
// Классификацияпоключевымсловам
im:= IndistinctMatching(length(stWord),
stWord,
AnsiUpperCase(FieldByName('keywords').AsString));
if im > iFuzzyPorog
then Inc(Key_cnt);
dmIAS.aqDict.Next;
pbClassify.StepIt;
Application.ProcessMessages;
end;
res:= GetRes(Name_cnt, Text_cnt, Key_cnt);
dmIAS.InsertClassify(id_publ, id_rubr, level, Name_cnt,
Text_cnt, Key_cnt, res);
Next;
pbClassify.StepIt;
Application.ProcessMessages;
end;
end;
dmIAS.aqClassify.Close;
dmIAS.atPublikatsii.First;
dmIAS.aqClassify.Open;
Application.ProcessMessages;
ShowMessage('Классификацияуспешнозавершена.');
end;
procedure TfrmClassify.Button2Click(Sender: TObject);
var i, i_rubr, level: integer;
begin
if dbgClassify.SelectedRows.Count = 0
then
begin
ShowMessage('Не выбрано ни одной записи!');
exit;
end;
// Удалить все записи из Publ_Rubr для данной статьи
dmIAS.DeleteFromPublRubr(dmIAS.atPublikatsii.FieldByName('id_publ').AsInteger);
// Записать в Publ_Rubr все выбранные рубрики для данной статьи
for i:= 0 to dbgClassify.SelectedRows.Count-1 do
begin
dbgClassify.DataSource.DataSet.GotoBookmark(Pointer(dbgClassify.SelectedRows.Items[i]));
i_rubr:= dbgClassify.DataSource.DataSet.FieldByName('id').AsInteger;
level:= dbgClassify.DataSource.DataSet.FieldByName('level_r').AsInteger;
dmIAS.InsertIntoPublRubr(dmIAS.atPublikatsii.FieldByName('id_publ').AsInteger,
i_rubr,
level);
end;
dbgClassify.DataSource.DataSet.GotoBookmark(Pointer(dbgClassify.SelectedRows.Items[0]));
ShowMessage('Соответствующие статье рубрики сохранены.');
dmIAS.atObrPublikatsii.Close;
dmIAS.atObrPublikatsii.Open;
dmIAS.atCountObrPublikatsii.Close;
dmIAS.atCountObrPublikatsii.Open;
lblCountArticles.Caption:= 'Всеговбазе: '
+ IntToStr(dmIAS.atPublikatsii.RecordCount)
+ ' статей. '
+ ' Классифицировано '
+ IntToStr(dmIAS.atCountObrPublikatsii.RecordCount)
+ ' статей.';
end;
procedure TfrmClassify.FormCreate(Sender: TObject);
begin
frmClassifySettings.SetNamePorog(2, 12);
frmClassifySettings.SetTextPorog(3, 12);
frmClassifySettings.SetKeyPorog(2, 12);
frmClassifySettings.SetNamePorog(4, 23);
frmClassifySettings.SetTextPorog(6, 23);
frmClassifySettings.SetKeyPorog(4, 23);
frmClassifySettings.SetFuzzyPorog(50);
frmClassifySettings.SetflShowAll(true);
end;
procedure TfrmClassify.FormShow(Sender: TObject);
begin
{ if frmClassifySettings.GetflShowAll
then // Показыватьвсестатьи
with dmIAS.atPublikatsii do
begin
Close;
SQL.Text:= stSelectAllPubl;
Open;
end
else // Показыватьнеобработанныестатьи
with dmIAS.atPublikatsii do
begin
Close;
SQL.Text:= stSelectNeobrPubl;
Open;
end;}
lblCountArticles.Caption:= 'Всеговбазе: '
+ IntToStr(dmIAS.atPublikatsii.RecordCount)
+ ' статей. '
+ ' Классифицировано '
+ IntToStr(dmIAS.atCountObrPublikatsii.RecordCount)
+ ' статей.';
end;
procedure TfrmClassify.Button3Click(Sender: TObject);
var tmpl, Template, NewTemplate, ItemIndex: olevariant;
ARange: Range;
pars: Paragraphs;
par: Paragraph;
tbls: Tables;
tbl1: Table;
st: string;
vcol: OleVariant;
i: integer;
begin
try
wa.Connect;
wa.Visible := True;
except
MessageDlg('АуВас Word неустановлен :(', mtError, [mbOk], 0);
Abort;
end;
ItemIndex:= 1;
Template:= EmptyParam;
NewTemplate := False;
// Созданиедокумента
wa.Documents.Add(Template, NewTemplate, EmptyParam, EmptyParam) ;
wd.ConnectTo(wa.Documents.Item(ItemIndex));
wd.PageSetup.Set_Orientation(wdOrientLandscape);
wa.Options.CheckSpellingAsYouType := False;
wa.Options.CheckGrammarAsYouType := False;
ARange:= wd.Range(EmptyParam, EmptyParam);
pars:= wd.Paragraphs;
tmpl:= ARange;
par:= pars.Add(tmpl);
wf.ConnectTo(wd.Sentences.Get_Last.Font);
wd.Range.Paragraphs.Set_Alignment(wdAlignParagraphLeft);
wa.Selection.Font.Bold:= 1;
wa.Selection.Font.Size:= 16;
st:= 'Отчет по результатам классификации статьи ';
wa.Selection.InsertAfter(st+#13);
wa.Selection.InsertAfter(' '+#13);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
wa.Selection.Font.Bold:= 0;
wa.Selection.Font.Size:= 14;
st:= 'Датапубликации: ';
wa.Selection.InsertAfter(st);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
if (dmIAS.atPublikatsii.FieldByName('data').AsString = '30.12.1899')
then st:= ' '
else st:= dmIAS.atPublikatsii.FieldByName('data').AsString;
wa.Selection.InsertAfter(st+#13);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
st:= 'Файлпубликации: ';
wa.Selection.InsertAfter(st);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
st:= dmIAS.atPublikatsii.FieldByName('file').AsString;
wa.Selection.InsertAfter(st+#13);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
st:= 'Названиепубликации: ';
wa.Selection.InsertAfter(st);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
st:= dmIAS.atPublikatsii.FieldByName('name_publ').AsString;
wa.Selection.InsertAfter(st+#13);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
st:= 'Ключевыеслова: ';
wa.Selection.InsertAfter(st);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
st:= dmIAS.atPublikatsii.FieldByName('keywords').AsString;
wa.Selection.InsertAfter(st+#13);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
st:= 'Авторпубликации: ';
wa.Selection.InsertAfter(st);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
st:= dmIAS.atPublikatsii.FieldByName('author').AsString;
wa.Selection.InsertAfter(st+#13);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
st:= 'Текстпубликации: ';
wa.Selection.InsertAfter(st);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
st:= dmIAS.atPublikatsii.FieldByName('text_publ').AsString;
wa.Selection.InsertAfter(st+#13);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
wa.Selection.InsertAfter(' '+#13);
st:= 'Результатыклассификации:';
wa.Selection.InsertAfter(st);
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
ARange:= wd.Sentences.Last;
tbls:= ARange.Tables;
tbl1:= tbls.Add(ARange,
dmIAS.aqClassify.RecordCount+1, // числострок
6, // числостолбцов
EmptyParam,
EmptyParam);
tbl1.Cell(1, 1).Range.Text:= 'Код';
tbl1.Cell(1, 2).Range.Text:= 'Наименование';
tbl1.Cell(1, 3).Range.Text:= 'Поназв.';
tbl1.Cell(1, 4).Range.Text:= 'Потексту';
tbl1.Cell(1, 5).Range.Text:= 'Покл.сл.';
tbl1.Cell(1, 6).Range.Text:= 'Результат';
i:= 2;
dmIAS.aqClassify.First;
while not dmIAS.aqClassify.Eof do
begin
tbl1.Cell(i, 1).Range.Text:= dmIAS.aqClassify.FieldByName('indx').AsString;
tbl1.Cell(i, 2).Range.Text:= dmIAS.aqClassify.FieldByName('name_r').AsString;
tbl1.Cell(i, 3).Range.Text:= dmIAS.aqClassify.FieldByName('name_cnt').AsString;
tbl1.Cell(i, 4).Range.Text:= dmIAS.aqClassify.FieldByName('text_cnt').AsString;
tbl1.Cell(i, 5).Range.Text:= dmIAS.aqClassify.FieldByName('key_cnt').AsString;
tbl1.Cell(i, 6).Range.Text:= dmIAS.aqClassify.FieldByName('res').AsString;
dmIAS.aqClassify.Next;
Inc(i);
end;
vcol := wdCollapseEnd;
wa.Selection.Collapse(vcol);
wa.Disconnect;
dmIAS.aqClassify.First;
end;
end.