0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 10
1

Нужно провести анализ текста. Сделать нужно для группового проекта! к числу 10 января

02.01.2013, 12:59. Показов 1697. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно провести анализ текста. Управление программой я должен осуществить с помощью системы консольных команд (загрузка из файла, сохранение результатов, поиск анаграмм слова, и т.д.).

В листинге приведена процедура, которая выполняет поставленную задачу. Она читает строки из файла, имя которого ввел пользователь во время работы программы, и выводит эти строки в поле Memo.
но я ни как не могу понять как это в программе записать, что мне не хватает для полной правильности кода ?
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
unit rd_;
 
interface
uses
  Windows, Messages, SysUtils, Variants, Classes,
  Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;
 
type
  TForm1 = class(TForm)
    Button2: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    procedure Button2Click(Sender: TObject);
    procedure ButtonlClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForml;
 
implementation
{$R *.dfm}
 
// щелчок на кнопке Открыть
procedure TForm1.Button1Click(Sender: TObject);
var
  f: TextFile; // файл
  fName: String[80]; // имя файла
  buf: string[80]; // буфер для чтения из файла
begin
  fName := Edit1.Text; AssignFile(f, fName);
  {$!-}
  Reset(f); // открыть для чтения
  {$I+}
 
  if IOResult <> 0 then
  begin
    MessageDlgt 'Ошибка доступа к файлу ' + fName,
      mtError, [mbOk], 0); exit;
  end;
 
  // чтение из файла
  while not EOF(f) do
  begin
    readln(f, buf); // прочитать строку из файла
    Memo1.Lines.Add(buf); // добавить строку в поле Memo1
  end;
 
  CloseFile(f); // закрыть файл
end;
 
 
// щелчок на кнопке Сохранить — запись в файл
procedure TForml.Button2Click(Sender: TObject);
var
  f: TextFile; // файл
  fName: string[80]; // имя файла
  i: integer;
begin
  fName := Edit1.Text;
  AssignFile(f, fName);
  Rewrite(f); // открыть для перезаписи
  // запись в файл
  for i := 0 to Memo1.Lines.Count do // строки нумеруются с нуля
    writeln(f, Memo1.Lines[i]);
  CloseFile(f); // закрыть файл
  MessageDlg('Данные записаны в файл ', mtlnformation, [mbOk], 0);
end;
 
end.
 Комментарий модератора 
Теги кода добавлены модератором. По правилам форума, код должен быть оформлен соответствующими тегами. Для оформления кода Delphi следует выделить этот код и на панели редактирования сообщения нажать кнопку: "DELPHI".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2013, 12:59
Ответы с готовыми решениями:

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

Нужно сделать меню для курсового проекта
Здесь все работает, но для полной готовности проекта нужно меню с кнопками. Я пытался кнопки...

Нужно решить такую задачку: "Анализ вводимого текста"
Очень нужно составить прогу, которая умела бы опознавать (различать), где какие слова в...

Нужно из проекта сделать компонент
Ни разу в жизни не делал компоненты. Вообщем нужно из проекта сделать компонент. Помогите...

19
13100 / 5881 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
02.01.2013, 14:21 2
Цитата Сообщение от saske Посмотреть сообщение
Она читает строки из файла, имя которого ввел пользователь во время работы программы, и выводит эти строки в поле Memo.
Загрузка текста из файла в Мемо выполняется одной командой:
Delphi
1
Memo1.Lines.LoadFromFile('<полное имя файла>');
Конечно перед этим надо проверить существует ли файл. Диалог открытия файла можно запрограммировать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var
  Od : TOpenDialog;
begin
  Od := OpenDialog1; //OpenDialog1 уже должен быть на форме.
  //Если начальная папка диалога не задана, то в качестве начальной берём ту папку,
  //в которой расположен исполняемый файл нашей программы.
  if Od.InitialDir = '' then Od.InitialDir := ExtractFilePath( ParamStr(0) );
  //Запуск диалога открытия файла.
  if not Od.Execute then Exit;
  //Если файла с заданным именем не существует - выходим.
  if not FileExists(Od.FileName) then begin
    MessageBox(0, 'Файл с заданным именем не найден. Действие отменено.',
      'Файл не найден!', MB_OK + MB_ICONWARNING + MB_APPLMODAL);
    Exit;
  end;
 
  //Загрузка файла в Мемо.
  Memo1.Lines.LoadFromFile(Od.FileName);
end;
Диалог сохранения файла:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var
  Res : Integer;
  Sd : TSaveDialog;
begin
  Sd := SaveDialog1; //SaveDialog1 уже должен быть на форме.
  //Если начальная папка диалога не задана, то в качестве начальной берём ту папку,
  //в которой расположен исполняемый файл нашей программы.
  if Sd.InitialDir = '' then Sd.InitialDir := ExtractFilePath( ParamStr(0) );
  //Запуск диалога сохранения файла.
  if not Sd.Execute then Exit;
  //Если файл с заданным именем уже существует - спрашиваем пользователя, можно ли его перезаписать.
  if FileExists(Sd.FileName) then begin
    Res := MessageBox(0, 'Файл с заданным именем уже существует. Перезаписать?',
      'Перезаписать файл?', MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL);
    if Res <> IDYES then Exit;
  end;
 
  //Сохранение текста из Мемо в файл.
  Memo1.Lines.SaveToFile(Sd.FileName);
end;
Надо иметь в виду, что в Мемо нельзя загружать большие файлы, потому что он начинает очень сильно тормозить. Если файл около 700 Кбайт - 1 Мегабайт, то Мемо, по сути, зависает.
0
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 10
02.01.2013, 18:26  [ТС] 3
А не могли бы вы написать код программы полностью от начала до конца? я всю неделю сидел ту по интернету разные документации читал, но в кучу собрать код так по нормальному и не смог, не могли бы вы подробно объяснить как нужно было сделать анализ теста для вывода анаграмм, в заранее спасибо !!!!
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
02.01.2013, 18:33 4
Сейчас занимаюсь твоей программой. Выложу сегодня - как сделаю.
Только ответь - одинаковые слова считаются анаграммами этого же слова, или их не считать?
0
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 10
02.01.2013, 18:43  [ТС] 5
Нет их нужно считать тоже, абсолютно все слова анаграммы, в задании написано что (Частотным анализом в данном случае будет подсчет количества всех анаграмм для каждого слова в тексте.)
0
Эксперт Pascal/Delphi
4902 / 2772 / 851
Регистрация: 04.10.2012
Сообщений: 10,104
02.01.2013, 18:54 6
saske, можно было еще сюда посмотреть Являются ли два слова анаграммами. Ладно..
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
02.01.2013, 18:58 7
Ещё вопрс. Слова с одинаковой анаграммой не нужно выводить? А то получится типа:
Код
как                 =  0.56%
как                 =  0.56%
как                 =  0.56%
его                 =  0.54%
его                 =  0.54%
его                 =  0.54%
его                 =  0.54%
если                =  0.47%
если                =  0.47%
если                =  0.47%
лисе                =  0.47%
сели                =  0.47%
droider: Там нужно целый массив обрабатывать. Я немного по другому пути пошел.
0
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 10
02.01.2013, 19:05  [ТС] 8
Нет не нужно, пусть будет без повтора одного и того же слова что бы вот так выглядела, думаю не придерутся ко мне за это
как = 0.56%
его = 0.54%
если = 0.47%
Мне дали групповой проект, я на первом курсе учусь в институте, у нас программирование ведет молодой парень, который в том году только учится закончил, он нам только массивы объяснил, за весь семестр, и сказал (кому надо сами разбирайтесь с задачами, но я у вас их потребую), я сам разобрался с задачами, решил их ему, а в моей группе из 4 человек, ни кто ему задачи кроме меня не сдал, и я не могу сообразить один как программу за программировать, если можете и я у вас время не занимаю, вы бы не могли ещё и объяснить как нужно было её делать?
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
02.01.2013, 19:10 9
вы бы не могли ещё и объяснить как нужно было её делать?
Суть вкратце расскажу. Когда выложу.
Потом по комментариям разберёшься. Что будет не понятно - спросишь.
0
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 10
02.01.2013, 19:14  [ТС] 10
Спасибо большое )) Вы очень меня выручаете.
0
Эксперт Pascal/Delphi
4902 / 2772 / 851
Регистрация: 04.10.2012
Сообщений: 10,104
02.01.2013, 19:46 11
Одиночка, Ок
1
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
02.01.2013, 20:22 12
Вот что получилось. Сделана на базе программы подсчёта слов, поэтому может не совсем оптимально. При запуске обработки, если файл большой - обработка идёт довольно длительное время, поэтому не думай, что зависла. Например текст "Деньги.txt" обрабатывается порядка одной минуты.
Суть простая. Использую начальную анаграмму слов. Фактически это слово, буквы в котором отсортированы в порядке возрастания их кодов.
Находятся все слова в тексте. Перед каждым словом вставляется его начальная анаграмма и этот текст вставляется в компонент StringList, в котором заранее установлена сортировка строк. Т.е. в результате в компоненте StringList1 все слова будут отсортированы по их анаграммах.

Второй этап - подсчет слов с одинаковыми начальными анаграммами. В уже отсортированном массиве последовательно сравниваем анаграммы каждой следующей строки. Если они одинаковы - считаем, если разные - запоминаем количество анаграмм предыдущего слова, обнуляем счётчик и начинаем считать для следующей анаграммы. Подсчитанные данные заносим ещё в один StringList, вставляя в начало каждого слова количество такой анаграммы. Там они тоже сортируются, но только в порядке возрастания количества повторений.

Третий этап: Выбираем из второго StrinList-а слова, начиная с конца (в конце находятся с самым большим количеством), и заносим слово и рассчитанный процент анаграммы в тексте в Memo. Процент считается как количество вхождений анаграммы слова, делённое на общее количество разных анаграмм в тексте. Если процент становится меньше 0,005 - выходим из цикла - все остальные проценты будут ноли.

Поиск анаграмм в тексте по заданному слову осуществляется аналогично. Определяется начальная анаграмма заданного слова. Потом в тексте поочерёдно выделяются слова, определяется их начальная анаграмма и сравнивается с эталоном. Найденные слова выводятся в Memo.
Вложения
Тип файла: rar Частотный анализ анаграмм в тексте_.rar (338.1 Кб, 19 просмотров)
2
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 10
02.01.2013, 20:42  [ТС] 13
Спасибо огромное!!!! Вы очень мне помогли, я посмотрел, то что пытался сделать я, и то что делали вы, как и говорил, я нашёл в сё это в разных программах и форумах, а соединить не смог ))) тупой я видимо очень, расматривая ваш код там написанно в начале
type
TForm1 = class(TForm) <<--это знаю
Button1: TButton; <<--это знаю
Memo1: TMemo; <<--это знаю
OpenDialog1: TOpenDialog; <<--это не знаю что ( а это что бы открыть фаил да ? )
Label1: TLabel;<<--это не знаю что ( а это совсем не знаю что, даже догадок нет )
Label2: TLabel;<<--это не знаю что
Label3: TLabel;<<--это не знаю что
Label4: TLabel;<<--это не знаю что
Label5: TLabel;<<--это не знаю что
Label6: TLabel;<<--это не знаю что
Label7: TLabel;<<--это не знаю что
Label8: TLabel;<<--это не знаю что
XPManifest1: TXPManifest;<<--это не знаю что
Button2: TButton;<<--это знаю
Label9: TLabel;<<--это не знаю что
Memo2: TMemo;<<--это знаю
Button3: TButton;<<--это знаю
SaveDialog1: TSaveDialog;<<--это не знаю что ( это как бы код для сохранения диолога ? или нет )
Edit1: TEdit;<<--это знаю
Button4: TButton;<<--это знаю
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
02.01.2013, 21:00 14
OpenDialog1: TOpenDialog; - компонент для отображения стандартного диалога открытия файла. Когда в коде пишется OpenDialog1.Execute - открывается стандартное окно, в котором пользователь выбирает файл и нажимает OK. В этом случае на выходе этой функции будет True - диалог завершился выбором файла. Если пользователь нажмёт "Отмена" - на выходе этой функции будет False. Что мы и контролируем в программе. После диалога в свойстве OpenDialog1.FileName - будет имя выбранного файла. Всё это относится и к компоненту: SaveDialog1: TSaveDialog; Только будет диалог сохранения файла.

Label1: TLabel - компонент позволяющий делать надписи на форме. Ставишь на форму и пишешь текст в свойство Caption.
XPManifest1: TXPManifest - компонент, который делает форму в виде окна Windows XP. Красивые кнопки, там и т.п. Его на форму поставил и больше не трогаешь.
А вообще это всё ты можешь найти в интернете. Есть много сайтов с подробным описанием компонентов.

Ты меня чпрашивай по сути работы программы. Остальное сам ищи в интернете. В поиске пиши например:
"Delphi TLabel описание". Ну, и т.п.
2
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 10
02.01.2013, 21:08  [ТС] 15
Ага ясно спасибо, буду так искать, тем более что это всё действительно есть в интернете, а вот последний вопрос, если бы вы задали мне написать такую программу, то когда бы я вам её принес, какие бы вы задавали вопросы по этой программе? или на все вопросы я смогу ответить, разобравшись со всем кодом например что такое Button или Label? и тем описанием которое вы скинули вместе с готовой программой в архиве WinRar
0
Эксперт Pascal/Delphi
4902 / 2772 / 851
Регистрация: 04.10.2012
Сообщений: 10,104
02.01.2013, 21:19 16
saske, заметка на будущее. Если любой посетитель форума (в данном случае Одиночка) помог Вам чем-то, поставьте ему +1 в знак благодарности.
1
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
02.01.2013, 21:25 17
Честно сказать, ты задаёшь такие вопросы, на которые чтобы ответить - нужно приличную часть Делфи изучить. Поэтому мой совет. Ищи в интернете описания по каждому компоненту в программе, который не знаешь. Читай. Смотри, там примеры приводятся обычно. По мне, так до 10-го числа всё это изучить практически с ноля - задача не реальная. А может я просто усложняю. Но, тебе и карты в руки.

Руслан, мне просто было интересно задачу решить.
2
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 10
02.01.2013, 21:37  [ТС] 18
Тут пока ждал ответ от вас, вопрос возник по самой программе, я её видимо не так понял, когда я открываю программу где окно ( Распределение слов в тексте ) там кнопка открыть файл, я открываю, там текст деньги а там рядом окошко в котором нужно написать что то, это если я правильно понял, можно текст открыть из файла, а можно свой текст писать в ручную в то окно и нажать на кнопку, найти анаграммы ?
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
02.01.2013, 21:46 19
Если ты имеешь в виду поле Memo под кнопкой "Открыть файл", то в нём можно и самому текст набрать. Потом просто нажать "Обработка".
Второе поле Memo (которое находится правее) - для вывода результатов. Туда ничего писать не нужно.
Файлы Деньги.txt и input.txt - это файлы на которых я отлаживал программу.
Грузи файл в Memo, нажимай "Обработка" и жди результатов.
Может ты имеешь в виду поле Edit возле кнопки "Найти анаграммы". Туда заносишь слово, нажимаешь "Найти анаграммы" и получаешь слова с такой анаграммой из текста.
2
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 10
02.01.2013, 21:48  [ТС] 20
Всё понял, спасибо ещё раз огромное!!! Больше у меня нет вопросов
0
02.01.2013, 21:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2013, 21:48
Помогаю со студенческими работами здесь

Нужно сделать увеличение ТИЦ с 20 до 50 и выполнить анализ сайта
Здравствуйте, мне нужен человек который сможет выполнить увеличение ТИЦ сайта автомобильной...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru