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

Получить 10 наиболее часто встречающихся слов

06.02.2010, 11:25. Показов 2798. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан символьный файл f, содержащий произвольный текст длиной более 50 слов. Слова в тексте разделены пробелами и знаками препинания. Получить 10 наиболее часто встречающихся слов
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2010, 11:25
Ответы с готовыми решениями:

Получить 100 наиболее часто встречающихся слов и число их появлений
Дан символьный файл f, содержащий произвольный текст длиной более 5000 слов. Слова в тексте...

Составить программу получения наиболее часто встречающихся ответов и их долей
Японская радиокомпания провела опрос N радиослушателей по вопросу: "Какое животное вы связываете с...

Найти частоту появления каждого из наиболее часто встречающихся элементов
Помогите решить задачу на Pascal: В целочисленном массиве K(n) много повторяющихся элементов....

Дан символьный файл, содержащий произвольный текст длиной более 5000 слов. Слова разделены пробелами и знаками препинания. Получить 100 наиболее часто
НАРОД срочно нужно написать на паскале : Дан символьный файл, содержащий произвольный текст...

3
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
08.02.2010, 12:44 2
Цитата Сообщение от UnFam0uS Посмотреть сообщение
текст длиной более 50 слов. Слова в тексте разделены пробелами и знаками препинания. Получить 10 наиболее часто встречающихся слов
И ты все еще думаешь, что кому-то хочется придумывать и вводить этот текст и искать в нем 10 слов?
0
4 / 4 / 0
Регистрация: 26.09.2009
Сообщений: 45
08.02.2010, 13:48  [ТС] 3
я так подумал...Вы, правы..
тагда, можно всё немножко урезать.
ввести хотяб 10 слов, и найти 2-3 часто встречающихся.
0
13100 / 5881 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
09.02.2010, 19:52 4
Предлагаю такое решение:
Pascal
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
program Project1;
 
type
  (*Статистика по отдельному слову.*)
  TWord = record
    (*Само слово.*)
    StrWord : String;
    (*Количество вхождений данного слова в анализируемую строку.*)
    Count : Integer;
  end;
  (*Массив, содержащий статистику по словам.*)
  TArrWord = array[1..50] of TWord;
 
 
(*Эта процедура составляет список (т. е. массив) различающихся слов, найденных в строке aStr.
aAmount - количество слов, добавленных в массив aArr.
Каждый элемент массива aArr содержит само слово и сведения о количестве вхождений
этого слова в строку aStr.*)
procedure GetArrWord(const aStr : String; var aArr : TArrWord; var aAmount : Integer);
const
  (*Множество разделителей слов. Char(9) - это символ горизонтальной табуляции.*)
  Delims = [' ', '.', ',', ':', ';', '!', '?', '-', Char(9)];
var
  StrTmp : String;
  i, j, k : Integer;
  Pos1, Pos2 : Integer;
  IsFound : Boolean;
begin
  (*Обнуляем массив слов.*)
  for j := 1 to High(aArr) do begin
    aArr[j].StrWord := '';
    aArr[j].Count := 0;
  end;
  (*Выделяем из строки слова и помещаем их в массив.*)
  Pos2 := 0;
  j := 1; (*Т. е. j := Low(aArr);*)
  for i := 1 to Length(aStr) do begin
    (*Отслеживаем начало слова.*)
    if i = 1 then begin
      if not ( aStr[i] in Delims ) then begin
        Pos1 := i;
      end;
    end else begin
      if ( aStr[i - 1] in Delims ) and ( not ( aStr[i] in Delims ) ) then begin
        Pos1 := i;
      end;
    end;
    (*Отслеживаем конец слова.*)
    if i = Length(aStr) then begin
      if not ( aStr[i] in Delims ) then begin
        Pos2 := i;
      end;
    end else begin
      if ( not ( aStr[i] in Delims ) ) and ( aStr[i + 1] in Delims ) then begin
        Pos2 := i;
      end;
    end;
 
    (*Если конец слова обнаружен - обрабатываем это слово.*)
    if Pos2 > 0 then begin
      (*Найденное слово.*)
      StrTmp := Copy(aStr, Pos1, Pos2 - Pos1 + 1);
      (*Проверяем есть ли уже такое слово в массиве.
      Если есть - тогда увеличиваем счётчик этого слова на единицу.*)
      IsFound := False;
      for k := 1 to j - 1 do begin
        if aArr[k].StrWord = StrTmp then begin
          Inc(aArr[k].Count);
          IsFound := True;
          Break;
        end;
      end;
      (*Если слово не найдено в массиве, то добавляем его и устанавливаем
      для этого слова счётчик = 1.*)
      if not IsFound then begin
        aArr[j].StrWord := StrTmp;
        aArr[j].Count := 1; (*Либо: Inc(aArr[j].Count); Т. к. все счётчики вначале проинициализированы нулём.*)
        (*Индекс следующего элемента массива.*)
        Inc(j);
      end;
      (*Устанавливаем флаг - "конец слова не найден".*)
      Pos2 := 0;
    end;
  end;
  (*Количество слов, добавленных в массив.*)
  aAmount := j - 1;
end;
 
const
  (*Анализируемая строка.*)
  StrText = '1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 10, 9, 8';
var
  (*Массив, содержащий статистику по словам.*)
  ArrWord : TArrWord;
  (*Сведения об отдельном слове.*)
  WordTmp : TWord;
  (*Строка для промежуточных вычислений.*)
  StrTmp : String;
  (*Индекс, применяемый в циклах.*)
  i : Integer;
  (*Для промежуточных вычислений.*)
  IntTmp : Integer;
  (*Количество слов в массиве ArrWord.*)
  Amount : Integer;
  (*Флаг, применяемый в алгоритме сортировки.
  IsExchange = True - в текущем проходе была хотябы одна перестановка.
  Иначе - перестановок не было.*)
  IsExchange : Boolean;
begin
  repeat
    (*Пользователь может ввести строку для анализа.
    Если строка не введена - т. е. пользователь нажал ENTER без
    ввода строки - тогда в качестве анализируемой строки берётся строка StrText.*)
    Writeln('Gotoviy shablon - Enter. Vvesti noviy shablon - vvod stroki + ENTER.');
    Readln(StrTmp);
    if StrTmp = '' then begin
      StrTmp := StrText;
    end;
 
    (*Получаем по заданному тексту статистику употребления слов.*)
    GetArrWord(StrTmp, ArrWord, Amount);
 
    (*Сортируем массив ArrWord по убыванию значений в счётчиках слов.
    Т. е.  - по убыванию значений в ArrWord[i].Count.
    Метод сортировки - пузырьковая сортировка.*)
    repeat
      IsExchange := False;
      for i := 1 to Amount - 1 do begin
        if ArrWord[i].Count < ArrWord[i + 1].Count then begin
          WordTmp := ArrWord[i];
          ArrWord[i] := ArrWord[i + 1];
          ArrWord[i + 1] := WordTmp;
          IsExchange := True;
        end;
      end;
    until not IsExchange;
 
    (*Распечатка 10 наиболее употребительных слов.*)
    Writeln('10 naibolee upotrebitelnih slov:');
    IntTmp := 10;
    if Amount < 10 then begin
      IntTmp := Amount;
    end;
    for i := 1 to IntTmp do begin
      Writeln('Slovo: "', ArrWord[i].StrWord, '", Statistika: ', ArrWord[i].Count);
    end;
 
    Writeln('-----');
    Writeln('Vihod - luboi simvol + ENTER. Povtorit - ENTER.');
    Readln(StrTmp);
  until StrTmp <> '';
end.
1
09.02.2010, 19:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2010, 19:52
Помогаю со студенческими работами здесь

Дан символьный файл f, содержащий произвольный текст. Получить 10 наиболее часто встречающихся букв и число их появления
помогите, пожалуйста :'(

Получить 100 наиболее часто встречающихся слов файла и частоту их появления
Даны символьный файл f, содержащий произвольный текст длиной более 5000 слов. Слова в тексте...

Получить два наиболее часто встречающихся слова в файле
напишите пожалуйста программу,очень нужно: дан символьный фaйл f. получить два наиболее часто...

Вывести 3 наиболее часто встречающихся в файле числа
Здравствуйте, застрял на задаче, несколько дней ломаю голову и не сргу найти ошибку. Условие...


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

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

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