Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для Hardalternative
3 / 3 / 0
Регистрация: 30.01.2018
Сообщений: 415

Перестановка слов. Немного исправить

30.01.2018, 17:07. Показов 630. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мужики, знатоки и все кто сможет помочь. Готовый код синонимайзера. Программа изменяет слова на случайные из словаря. Кто сможет подсказать как добавить функцианал. После того как софт обработал текст >

Функцию при нажатии на измененное слово оно выделялось цветом и можно выбрать из списка слов что в словаре. То бишь нажимаю на слово и появляеться список слов которые я могу выбрать для синонимизации слова.

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
unit Syn;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls, ToolWin, Menus;
 
type
  TVarStr = array of string;
  TWordType = (wtNoun, wtVerb, wtAdjective);
  TWord = record
   _type: TWordType;
   _word: shortstring;
  end;
  TFormMain = class(TForm)
    MainMenu1: TMainMenu;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    bt_Generate: TToolButton;
    memText: TMemo;
    memGen: TMemo;
    Splitter1: TSplitter;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    procedure bt_GenerateClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    GenText: TStrings;
 
    function FormulaAnalyse(Formula: string): TVarStr;
    function SentenceAnalyse(Sentence: string): TVarStr;
    function SynonimsAnalyse(Synonims: string): TVarStr;
 
    function InAlphabet(Symbol: char; upper: boolean): boolean;
    procedure TextAnalysis;
    procedure SentencesGenerate;
  public
    { Public declarations }
  end;
 
const
  Alphabet: array[0..32] of char = ('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж',
   'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц',
   'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я');
var
  FormMain: TFormMain;
  //Sentences: array of array of TWord;
  Sentences: array of string;
 
implementation
 
{$R *.dfm}
 
procedure TFormMain.bt_GenerateClick(Sender: TObject);
begin
 memGen.Clear;
 
 TextAnalysis;
 SentencesGenerate;
end;
 
procedure TFormMain.FormCreate(Sender: TObject);
begin
 Randomize;
end;
 
function TFormMain.FormulaAnalyse(Formula: string): TVarStr;
var i: integer;
begin
 SetLength(Result, 0);
 SetLength(Result, 1);
 
 for i := 1 to Length(Formula) do
 begin
  if Formula[i] = ' ' then
  begin
   SetLength(Result, Length(Result) + 1);
   Continue;
  end;
 
  Result[Length(Result)-1] := Result[Length(Result)-1] + Formula[i];
 end;
end;
 
function TFormMain.InAlphabet(Symbol: char; upper: boolean): boolean;
var i: integer;
begin
 Result := false;
 for i := 0 to 32 do
  if upper then
  begin
   if AnsiUpperCase(Alphabet[i]) = Symbol then
   begin
    Result := true; Exit;
   end;
  end else
  begin
   if Alphabet[i] = Symbol then
   begin
    Result := true; Exit;
   end;
  end;
end;
 
procedure TFormMain.SentencesGenerate;
var
 i, j, o, y, u: integer;
 AnalyseFile: TStrings;
 Formula: string;
 FormComp: TVarStr;     //FormulaComponents
 SentComp: TVarStr;     //SentenceComponents
 Synonims: TVarStr;
 s: string;
 c: char;
 n: integer;
 check_f: boolean;
label l;
begin
 AnalyseFile := TStringList.Create;
 try
  AnalyseFile.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Data\Syn_Words.txt');
  Formula := AnalyseFile[0];
 
  FormComp := FormulaAnalyse(Formula);
 
  for i := 0 to Length(Sentences) - 1 do
  begin
   SentComp := SentenceAnalyse(Sentences[i]);
 
   {check_f := false;
   j := 0;
   while FormComp[j] <> '--' do
   begin
    if FormComp[j] = '%' then begin check_f := true; continue; end;
 
 
 
    inc(j);
   end;          }
 
   for j := 0 to Length(FormComp) - 1 do
   begin
    if FormComp[j] = '%' then
    begin
     for o := 0 to Length(SentComp) - 1 do
     begin
      s := '';
 
      for y := 1 to AnalyseFile.Count - 1 do
      begin
       Synonims := SynonimsAnalyse(AnalyseFile[y]);
       for u := 0 to Length(Synonims) - 1 do
       begin
        if Synonims[u] = SentComp[o] then
        begin
         l: n := Random(Length(Synonims));
 
         if Synonims[n] = SentComp[o] then goto l
         else s := Synonims[n];
         Break;
        end;
       end;
      end;
 
      if s <> '' then memGen.Text := memGen.Text + ' ' + s
      else begin
       if Length(SentComp[o]) = 1 then
       begin
        c := SentComp[o][1];
        if (not InAlphabet(c, False)) and (not InAlphabet(c, true)) then
         memGen.Text := memGen.Text + SentComp[o]
        else memGen.Text := memGen.Text + ' ' + SentComp[o];
       end
       else memGen.Text := memGen.Text + ' ' + SentComp[o];
      end;
     end;
    end;
   end;
  end;
 
  memGen.Text := Trim(memGen.Text);
 finally
  AnalyseFile.Free;
  SetLength(FormComp, 0);
  SetLength(SentComp, 0);
  SetLength(Synonims, 0);
 end;
end;
 
function TFormMain.SentenceAnalyse(Sentence: string): TVarStr;
var i: integer;
begin
 SetLength(Result, 0);
 SetLength(Result, 1);
 
 for i := 1 to Length(Sentence) do
 begin
  if Sentence[i] = ' ' then
  begin
   SetLength(Result, Length(Result) + 1);
   Continue;
  end;
 
  if (not InAlphabet(Sentence[i], false)) and (not InAlphabet(Sentence[i], true)) then
  begin
   SetLength(Result, Length(Result) + 1);
   Result[Length(Result)-1] := Sentence[i];
   SetLength(Result, Length(Result) + 1);
   Continue;
  end;
 
  Result[Length(Result)-1] := Result[Length(Result)-1] + Sentence[i];
 end;
end;
 
function TFormMain.SynonimsAnalyse(Synonims: string): TVarStr;
var i: integer;
begin
 SetLength(Result, 0);
 SetLength(Result, 1);
 for i := 1 to Length(Synonims) do
 begin
  if Synonims[i] = '|' then
  begin
   SetLength(Result, Length(Result) + 1);
   Continue;
  end;
 
  Result[Length(Result)-1] := Result[Length(Result)-1] + Synonims[i];
 end;
end;
 
procedure TFormMain.TextAnalysis;
var
 i: integer;
 NewSentence: boolean;
begin
 memText.Text := Trim(memText.Text);
 
 NewSentence := true;
 SetLength(Sentences, 0);
 for i := 1 to Length(memText.Text) do
 begin
  if NewSentence then SetLength(Sentences, Length(Sentences) + 1);
  Sentences[Length(Sentences)-1] := Sentences[Length(Sentences)-1] + memText.Text[i];
  if (memText.Text[i] = '.') and ((i = Length(memText.Text)) or (InAlphabet(memText.Text[i+2], true))) then
   NewSentence := true
  else NewSentence := false;
 end;
end;
 
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.01.2018, 17:07
Ответы с готовыми решениями:

Определение углов треугольника α, β, γ по заданным значениям сторон A, B, C, используя теорему косинусов
Здравствуйте! Прошу немного исправить программу. Почему то не хочет корректно считать + сообщения &quot;might not have been...

Немного исправить задачу
нужно так, а у меня получилось что он начинает заполнять с правой стороны,а мне нужно с левой unit Unit1; interface uses ...

Delphi, Application немного исправить программу
Условие:Дан текстовый файл. Максимальная длина слова в этом файле равна пяти символам. Создайте пять файлов. Каждой строке входного файла...

6
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,405
Записей в блоге: 3
30.01.2018, 17:24
Цитата Сообщение от Hardalternative Посмотреть сообщение
Программа изменяет слова на случайные из словаря
Это как понять? Т.е. слово "бред" может, соответствуя случайному выбору, замениться на слово "круто"?
0
 Аватар для Hardalternative
3 / 3 / 0
Регистрация: 30.01.2018
Сообщений: 415
30.01.2018, 17:38  [ТС]
D1973 Здравствуй.
Сейчас рограмма автоматиески подсктавляет слова. Есть два memo, в первое memo ввожу текст потом нажимаю кнопку и во втором memo программа выводит текст уже с подстановкой слов из словаря. Это уже готово и работает.

А нужно еще добавить функцию > Что бы все измененные слова в memo 2 выделялись и при нажатии на них можно было выбрать из списка слов замену. При нажатии выбрать и изменить слово.
Миниатюры
Перестановка слов. Немного исправить  
0
 Аватар для Hardalternative
3 / 3 / 0
Регистрация: 30.01.2018
Сообщений: 415
30.01.2018, 17:48  [ТС]
Из списка слов замену > Имееться в виду из тех слов что забиты в словаре к этому слову.
К примеру
В словаре Syn_Words.txt
на слово Игра идут замены - Супер игра|Отличная игра|Новая игра и так далее.
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,405
Записей в блоге: 3
31.01.2018, 04:54
Цитата Сообщение от Hardalternative Посмотреть сообщение
Что бы все измененные слова в memo 2 выделялись
В мемо это сделать нельзя, не предназначен компонент для этого... В ричэдит - может быть.
1
 Аватар для Hardalternative
3 / 3 / 0
Регистрация: 30.01.2018
Сообщений: 415
31.01.2018, 11:10  [ТС]
D1973
А как сделать в ричэдит ?. По возможности немного можно наставить меня на путь истинный.
0
15 / 14 / 3
Регистрация: 14.12.2017
Сообщений: 240
31.01.2018, 11:26
Hardalternative, я бы делал так - отлавливал выделенное слово,и уже в комбобокс подгружал бы его синонимы и заменял его по выбору пользователя
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.01.2018, 11:26
Помогаю со студенческими работами здесь

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

Исправить немного
#include &lt;iostream&gt; using std::cout; using std::cin; using std::endl; int Len(char *s) { char *p; int i; for(i=0,...

Немного исправить
Всем привет, недавно создавал тему https://www.cyberforum.ru/windows-forms/thread1140186.html Все работает большое спасибо, но нужно...

Исправить немного. Записи.
Создать файл, содержащий сведения о наличии билетов и рейсов Аэрофлота. Структура записи: -Номер рейса; -Пункт назначения; -Время...

Немного исправить регулярное выражение
Вообщем написал(без изучения, по примерам): ({1})({1,20})({0,1}{0,1})({1,20})({1})({1})({2,20})({1})({1})({2,20}) Это для ввода ФИО....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru