Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 59

Не могу найти ошибку в коде

06.05.2015, 21:03. Показов 2965. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть текст обычный. Провели его через морфологический анализатор русского языка. Теперь 2 файла: первый оригинал текста, второй размеченный.
слева обычный
справа размеченный
Есть БД (со столбцами: объект1, объект 2, экземпляр, тип отношения). Загружаем Текст первый в RichEdit. а второй в RichEdit2.
из БД берутся слова(они хранятся в массиве). И эти слова нужно сначала найти в тексте слева. То есть. Если наше слова из БД находится между { и = то, слово стоящее перед { надо закрасить, но в тексте который срава)
ПРоцесс работы программы:Загрузить тексты в ричэдиты. Извлекаем слова из БД в массив,по запросу. Затем Эти слова ищем в тексте размеченном(ричэдит1). если в указанный промежуток { и = попадает, значит это же слово закрашиваем его в тексте обычном(ричэдит2).
Видимость RichEdit1=false
он для работы только с ним
После раскраски: если в пределах одного предложения есть два закрашенных слова существительных (в размеченном тексте они =S и падеж: им, а также есть любое не закрашенное слово =V то эту тройку нужно изъять)
и выдать пользователю.
он говорит отменить или добавить в бд


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function SearchForText(RichEdit: TRichEdit): Boolean;
var
StartPos, Position, Endpos: Integer;
begin
for i:=1 to count do
begin
StartPos := 0;
with RichEdit do
begin
Endpos := Length(RichEdit.Text);
Lines.BeginUpdate;
while FindText(slova[i], StartPos, Endpos, [stMatchCase])<>-1 do
begin
Endpos := Length(RichEdit.Text) - startpos;
Position := FindText(slova[i]+' ', StartPos, EndPos, []); //stMatchCase
Inc(StartPos, Length(slova[i]+' '));
SetFocus;
SelStart := Position;
SelLength := Length(slova[i]);
SelAttributes.Style:=[fsBold];
SelAttributes.Color:=clYellow;
 
end;
Lines.EndUpdate;
end;
end;
end;
 
procedure TForm1.btn1Click(Sender: TObject);
begin
try
i:=1;
ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM Predikat WHERE TipOtn = "'+ DBComboBox1.Text+'"');
ADOQuery1.Active:=True;
while(ADOQuery1.Eof <> true) do
begin
slova[i]:= ADOQuery1.Fields[1].AsString;
i:=i+1;
slova[i]:= ADOQuery1.Fields[2].AsString;
i:=i+1;
slova[i]:= ADOQuery1.Fields[3].AsString;
count:=i;
i:=i+1;
ADOQuery1.Next;
end;
 
end;
end;
Пример. вот одно предложение в оригинале такое: 
1. Процессор есть центральное устройство компьютера.
в размеченном такое:
Процессор{процессор=S,муж,неод=им,ед|=S,муж,неод=вин,ед}
есть{есть=V,несов=инф,пе|есть=S,сред,неод=им,ед|=V,нп=наст,ед,изъяв,2-л,несов|=V,нп=наст,ед,изъяв,3-л,несов }
центральное{центральный=A=им,ед,полн,сред|=A=вин,ед,полн,сред}
устройство{устройство=S,сред,неод=им,ед|=S,сред,неод=вин,ед}
компьютера{компьютер=S,муж,неод=род,ед}
Пример. вот одно предложение в оригинале такое:
1. Процессор есть центральное устройство компьютера.
в размеченном такое:
Процессор{процессор=S,муж,неод=им,ед|=S, муж,неод=вин,ед}
есть{есть=V,несов=инф,пе|есть=S,сред,нео д=им,ед|=V,нп=наст,ед,изъяв,2-л,несов|=V,нп=наст,ед,изъяв,3-л,несов }
центральное{центральный=A=им,ед,полн,сре д|=A=вин,ед,полн,сред}
устройство{устройство=S,сред,неод=им,ед| =S,сред,неод=вин,ед}
компьютера{компьютер=S,муж,неод=род,ед}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2015, 21:03
Ответы с готовыми решениями:

Не могу найти ошибку в коде
Нужно, чтобы программа показывала количество нечётных элементов массива. А у меня оно всё время выдаёт 1. program Project2; uses ...

Не могу найти ошибку в коде
Сформировать текстовый файл d из файла f, включая в него строки, которые начинаются на гласную букву. При компиляции он выдает все...

Не могу найти ошибку в коде
uses SysUtils; const t=5; type t1=array of integer; var n,m,max1,max2,l:integer; mas:t1; ...

43
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 59
08.05.2015, 01:30  [ТС]
Студворк — интернет-сервис помощи студентам
VladWH,
Ошибок не выдает, но не ищет...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
procedure TForm1.btn1Click(Sender: TObject);
var i, StartPos, Position, Endpos: Integer;
begin
try
i:=0; 
while(ADOQuery1.Eof <> true) do
begin
SetLength(words,i+3);
words[i]:= ADOQuery1.Fields[1].AsString;
Inc(i);
words[i]:= ADOQuery1.Fields[2].AsString;
Inc(i) ;
words[i]:= ADOQuery1.Fields[3].AsString;
count:=i;
Inc(i) ;
ADOQuery1.Next;
end;
 
for i:=0 to High(words) do
begin
StartPos := 0;
with TextRichEdit do
begin
Endpos := Length(TextRichEdit.Text);
Lines.BeginUpdate;
while FindText(words[i],
StartPos, Endpos, [stMatchCase])<>-1 do
begin
Position := FindText(words[i]+' ',
StartPos, EndPos, [stMatchCase]);
Endpos := Length(TextRichEdit.Text) - startpos;
Inc(StartPos, Position+Length(words[i]));
SetFocus;
SelStart := Position;
SelLength := Length(words[i]);
SelAttributes.Style:=[fsBold];
SelAttributes.Color:=clYellow;
if Position<>-1 then
AddSelWord(Position, Words[i]);
end;
Lines.EndUpdate;
end;
end;
except
on e:Exception do
end;
end;
Добавлено через 12 минут
VladWH, код вроде, работает. Мой недочет был.
А вот процесс обратный, после получения триплета их как записать в бд?
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
08.05.2015, 01:32
А это весь твой код? всмысле что ты создаешь массив глаголов и начинаешь парсить текст? или ты имеешь ввиду что не закрашивает даже?

Добавлено через 46 секунд
Теперь вижу, что заработало
0
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 59
08.05.2015, 01:33  [ТС]
VladWH, Закрашивание слов из бд теперь выполняется.Нозакрашиваются только слова из 2 и 3 столбца...
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
08.05.2015, 01:36
Цитата Сообщение от vladellec Посмотреть сообщение
после получения триплета их как записать в бд?
триплеты?

Добавлено через 2 минуты
Цитата Сообщение от vladellec Посмотреть сообщение
закрашиваются только слова из 2 и 3 столбца
не забывай, что в данном коде слова "Процессор", "процессор", "процессор." это все разные слова... поэтому тебе и написал что тебе есть что дорабатывать...
0
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 59
08.05.2015, 01:45  [ТС]
VladWH, А доработки с какого места нужно делать?
1.Сейчас у меня он закрашивает слова. некоторые из бд. первый столбец таблицы не воспринимает вообще.
А почему она по разному воспринимаются?
2. Кнопка триплета поиска ничего не выводит. Это так же связано со словами из бд?
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
08.05.2015, 01:56
Цитата Сообщение от vladellec Посмотреть сообщение
А почему она по разному воспринимаются?
нижний и верхний регистр букв + например, "процессор", ",процессор","процессор,",".Процессо р" это тоже будет разное даже после того как с регистром разберешься.
Цитата Сообщение от vladellec Посмотреть сообщение
доработки с какого места нужно делать?
Посмотри по коду... ну или Step by Step по факту появления недочетов)
Цитата Сообщение от vladellec Посмотреть сообщение
Кнопка триплета поиска ничего не выводит
Конечно ты же не создал список глаголов... CreateVWords...

Добавлено через 44 секунды
CreateVWords тоже надо исправлять под забор глаголов из БД
0
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 59
08.05.2015, 02:05  [ТС]
VladWH,
это в процедуре?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.CreateVWords;
var i,p,p2: integer; s: string;
begin
{ ТУТ ТОЖЕ ТОЛЬКО НАБРОСОК ПРОЦЕДУРЫ ДЛЯ ПРИМЕРА...
допишешь если надо будет}
for i:=0 to RichEdit1.Lines.Count-1 do
begin
s := RichEdit1.Lines.Strings[i];
p := pos('=',s);
if copy(s,p+1,1)='V' then
begin
p2 := pos('{',s);
s := copy(s,p2+1,p-p2-1);
SetLength(VWords, Length(VWords)+1);
VWords[High(VWords)] := s;
end;
end;
end;
А что в нем под мою бд нужно изменить?
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
08.05.2015, 10:33
Цитата Сообщение от vladellec Посмотреть сообщение
это в процедуре?
Да... но тут правда я не правильно сказал не под забор из БД, а под свои нужны...
0
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 59
08.05.2015, 13:51  [ТС]
VladWH,
1. А вот какую комбинацию по коду выдает триплет?
Он должен в пределах одного предложения найти закрашенные слова существительные (которые в размеченном равны S) и если еще есть слово не закрашенное, которое =V, тогда эти два закрашенных слова и это новое слово должны выдаваться пользователю. Как их добавить в БД? 1 существительное в Obj1, второе в Obj2 и новое слово в Otn )

2. А почему при вводе от руки в поле Мемо слов базы данных он все находит. А если я загружаю их из файла, то нет?
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
08.05.2015, 14:23
Цитата Сообщение от vladellec Посмотреть сообщение
А если я загружаю их из файла, то нет
CreateVWords на OnChange стоит
Цитата Сообщение от vladellec Посмотреть сообщение
Как их добавить в БД?
Я не знаю... как тебе нужно, так и добавляй)

Добавлено через 1 минуту
Цитата Сообщение от vladellec Посмотреть сообщение
А вот какую комбинацию по коду выдает триплет?
у меня было полностью предложение, а ты можешь выбрать то, что тебе нужно...
0
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 59
08.05.2015, 20:35  [ТС]
VladWH,
Прокомментируй мне названия этих функций и процедур, а то я уже успел запутаться wall::
Delphi
1
2
3
4
5
6
procedure AddSelWord(pos: integer; word: string);
procedure CreateWordsBase;
function CheckType(word: string): byte;
procedure CheckOffers;
function CheckOfferForV(s: string): integer;
procedure CreateVWords;
Спасибо!
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
08.05.2015, 20:44
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
// Добавление слова в массив выделенных слов ( которые закрасили )
procedure AddSelWord(pos: integer; word: string);
// загрузка базы слов
procedure CreateWordsBase;
// проверка типа слова (существительное, глагол)
function CheckType(word: string): byte;
// проверка всего текста
procedure CheckOffers;
// проверка предложения на предмет нахождения в нем глагола
function CheckOfferForV(s: string): integer;
// создание массива глаголов
procedure CreateVWords;
1
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 59
08.05.2015, 23:57  [ТС]
VladWH,
А вот не совсем понятно Слова перед закрашиванием проверяются ведь? по условию: если слово из бд находится в промежутке { и =...это есть в коде. А что надо сделать, чтобы слово это затем полностью закрасилось в тексте оригинале? то есть вот есть такое: КОМПЬЮТЕРУ{КОМПЬЮТЕР = .Слово из бд: КОМПЬЮТЕР, проверил, подходит, а потом в оригинале закрасить уже слово КОМПЬЮТЕРУ?
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
09.05.2015, 00:03
vladellec, может и есть какие то функции, процедуры или готовые решения на такой случай, но я их не знаю. Поэтому я бы писал некий алгоритм того как закрашивать... ну например ищем через pos и закрашиваем до следующего пробела или точки или запятой
0
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 59
09.05.2015, 00:27  [ТС]
VladWH, Получается, что ты указал проверку эту, для триплета? или для чего?
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
09.05.2015, 00:38
Цитата Сообщение от vladellec Посмотреть сообщение
Получается, что ты указал проверку эту, для триплета? или для чего?
Какую проверку?)

Добавлено через 58 секунд
P.S. доделаю один проект потом смогу тебе помочь со всем. Пока отвечаю по возможности и как видишь не многословно...
0
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 59
09.05.2015, 03:25  [ТС]
VladWH,
Хорошо, мне, чтоб на месте не сидеть, пока и лаконичных ответов достаточно=) Насколько верно прокомментировано?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TTE_F.CreateVWords; // создание массива глаголов
var i,p,p2: integer; s: string;
begin
{ ТУТ ТОЖЕ ТОЛЬКО НАБРОСОК ПРОЦЕДУРЫ ДЛЯ ПРИМЕРА...
допишешь если надо будет}
for i:=0 to MASK_RE.Lines.Count-1 do
begin
s := Mask_RE.Lines.Strings[i]; 
p := pos('=',s); //в размеченном тексте находит =
if copy(s,p+1,1)='V' then // копирует в тексте ???
begin
p2 := pos('{',s); // поиск { в тексте
s := copy(s,p2+1,p-p2-1); // ? копирует....
SetLength(VWords, Length(VWords)+1);
VWords[High(VWords)] := s;
end;
end;
end;
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
09.05.2015, 11:16
Цитата Сообщение от vladellec Посмотреть сообщение
if copy(s,p+1,1)='V' then // копирует в тексте ???
если после знака равно идет буква V, то
Цитата Сообщение от vladellec Посмотреть сообщение
s := copy(s,p2+1,p-p2-1); // ? копирует....
копируем глагол
Цитата Сообщение от vladellec Посмотреть сообщение
SetLength(VWords, Length(VWords)+1);
VWords[High(VWords)] := s;
увеличение размера массива глаголов и занесение глагола в список
0
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 59
10.05.2015, 17:28  [ТС]
VladWH,
Подскажи, как в этой процедуре заполнить массив глаголами из БД?
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TTE_F.CreateVWords; // создание массива глаголов
Так как проверка пошаговая показывает, что при обращении этой процедуры к 
function TTE_F.CheckOfferForV(s: string): integer;
var i: integer;
begin
result := 0;
for i:=0 to High(VWords) do-----проверяет и всё, остальное не выполняется. 
if pos(AnsiUpperCase(VWords[i]), AnsiUpperCase(s))<>0
then Inc(result);
end;
Но ведь в процедуре создания БД вроде все совпадает. И не понятно что добавить или изменить чтобы он глаголы эти собрал?
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
10.05.2015, 19:27
Они берутся из размеченного текста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.05.2015, 19:27

Не могу найти ошибку в коде
Слова в тексте разделены пробелом. Подсчитать количество слов, длина которых не превышает 4-х букв. Код вроде верный, а программа выдает...

Не могу найти ошибку в коде
В общем сидел я делал програмку и тут столкнулся с не понятной вещью. Сидел около часа, но так и не понял в чем я ошибся. В...

Не могу найти ошибку в коде
Вот такая задачка: Какое давление на дно сосуда оказывает слой керосина высотой 0,6м? Пользователь может задать произвольное значение...

Не могу найти ошибку в коде
Здравствуйте. Очень нужна помощь. Есть форма 1, на ней расположены компонент RadioGroup c двумя вариантами ответа Да и Нет (RadioButton) и...

Не могу найти ошибку в коде Delphi
Текст Задачи: Описать класс «Обыкновенная дробь» с двумя полями: числитель и знаменатель, с двумя перегруженными конструкторами,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru