Posted By

ozkriff on 05/25/09


Tagged


Versions (?)

count


 / Published in: Pascal
 

  1. {
  2. тема Юлиного курсовика по трпп:
  3. частотный анализ текста(по предложениям)
  4.  
  5. (подсчитывается относительная частота встречаемости в тексте
  6. предложений различной длины(1,2,3...слова).
  7. Границами слов яв-ся символы:
  8. /* точка,запятая, двоеточие, пробел, точка с запятой,
  9. скобки, тире, вопр. и воскл. знаки */
  10. . , " ' ; ( ) - ? !
  11. границами предложения-
  12. /* точка, вопр. и воскл. знаки */
  13. . ? !
  14. Текст вводится по выбору пользователя с клавиатуры
  15. (при этом должна быть возможность записи его в файл),
  16. либо из текстового файла;
  17. вывод результатов- на экран, принтер или в файл по желанию пользователя.
  18. }
  19. { -------------------------------------------------------------------------- }
  20.  
  21. program count; { Название программы }
  22.  
  23. uses crt; { Использовать модуль для рисования псевдографики }
  24.  
  25. type { секция обьявления новых типов данных }
  26. plist = ^tlist; { указатель }
  27. tlist = record { запись }
  28. words : integer; { количество слов }
  29. sentences : integer; { количество предложений }
  30. next : plist { указатель на следующий узел }
  31. end; { конец записи }
  32.  
  33. var { секция обьявления переменных }
  34. list, start : plist; { бегающий и начальный указатели на список }
  35. buffer : string; { буффер для обработки текста }
  36. { переменные для хранения информации о количестве слов и предложений }
  37. words_all, sentences_all, ii, words_count, sentences_count : integer;
  38. input_file : text; { указатель на входной файл }
  39. state : integer;
  40. result : integer;
  41. mbuffer : char;
  42.  
  43. { -------------------------------------------------------------------------- }
  44. { процедура ищет узел в списке по количеству }
  45. procedure Search (words : integer); { принимает количество слов }
  46. begin { начало тела процедуры }
  47. list := start; { перемотать указатель }
  48.  
  49. while list <> nil do { пока не конец списка }
  50. begin
  51. if words = list^.words then { если совпадает то }
  52. break { закончить цикл }
  53. else
  54. list := list^.next; { иначе продолжить }
  55. end
  56. end; { конец процедуры Search }
  57.  
  58.  
  59. { -------------------------------------------------------------------------- }
  60. procedure Add ( words : integer ); { }
  61. var { }
  62. l : plist; { }
  63. begin { }
  64. sentences_count := sentences_count + 1; { }
  65. New (l); { }
  66. l^.sentences := 1; { }
  67. l^.words := words; { }
  68. l^.next := nil; { }
  69.  
  70. if start <> nil then { }
  71. begin
  72. list := start; { }
  73.  
  74. while list^.next <> nil do { }
  75. list := list^.next; { }
  76. list^.next := l { }
  77. end
  78. else
  79. start := l; { }
  80. list := l { }
  81. end; { }
  82.  
  83. { -------------------------------------------------------------------------- }
  84. procedure Display; { }
  85. begin { }
  86. if start = nil then { }
  87. begin
  88. textcolor (red); { }
  89. writeLn ('no sentences were analised');
  90. textcolor (yellow); { }
  91. exit { }
  92. end;
  93.  
  94. list := start; { }
  95. textcolor (red); { }
  96. write;
  97. writeln ( '========================' ); { }
  98. textcolor (yellow); { }
  99. while list <> nil do { }
  100. begin
  101. { }
  102. writeln ( ' ', list^.words:3, ' (',
  103. (list^.words * 100)/words_all:2:2, '%) words in ',
  104. list^.sentences:2, ' (',
  105. ( list^.sentences * 100)/sentences_all :2:2 ,
  106. '%) sentences.' );
  107.  
  108. list := list^.next { }
  109. end;
  110. textcolor (red); { }
  111. writeln ( '========================' ); { }
  112. textcolor (yellow); { }
  113. writeln ( 'sentences in file: ', sentences_all ); { }
  114. writeln ( 'words in file: ', words_all ); { }
  115. end;
  116.  
  117. { -------------------------------------------------------------------------- }
  118. procedure sentence_done ( words : integer ); { }
  119. begin
  120. sentences_all := sentences_all + 1; { }
  121. search (words); { }
  122. if list = nil then { }
  123. add(words) { }
  124. else
  125. list^.sentences := list^.sentences + 1; { }
  126. end;
  127.  
  128. { -------------------------------------------------------------------------- }
  129. procedure feed_char ( some_char : char ); { }
  130. begin
  131. case some_char of { }
  132. ',', { запятая }
  133. ' ', { пробел }
  134. ';', { точка с запятой }
  135. '(', { открывающая скобка }
  136. ')', { закрывающая скобка }
  137. '-': { тире }
  138. begin
  139. { увеличить счетчик слов }
  140. words_count := words_count + 1;
  141. words_all := words_all + 1;
  142. end;
  143.  
  144. '.', { точка }
  145. '?', { вопр. знак }
  146. '!': { воскл. знак }
  147. begin
  148. { }
  149. { }
  150. words_count := words_count + 1;
  151. sentence_done ( words_count );
  152. words_all := words_all + 1;
  153. words_count := 0;
  154. end;
  155. end;
  156. end;
  157.  
  158. { -------------------------------------------------------------------------- }
  159. { -------------------------------------------------------------------------- }
  160. { -------------------------------------------------------------------------- }
  161.  
  162. begin
  163. sentences_all := 0; { }
  164. words_all := 0; { }
  165. sentences_count := 0; { }
  166. words_count := 0; { }
  167.  
  168. textbackground (blue); { Установить синий цвет фона }
  169. textcolor (white); { Установить желтый цвет текста }
  170. clrscr;
  171.  
  172. state := 0;
  173. while state = 0 do
  174. begin
  175. writeln('From where?');
  176. writeln(' 1-file;');
  177. writeln(' 2-keyboard');
  178. writeln(' 3-keyboard + write text to file');
  179. read(state);
  180. end;
  181. clrscr;
  182.  
  183. result := 0;
  184. while result = 0 do
  185. begin
  186. writeln('Where to display results?');
  187. writeln(' 1-screen;');
  188. writeln(' 2-printer;');
  189. writeln(' 3-file;');
  190. read(result);
  191. end;
  192. clrscr;
  193.  
  194. if state = 1 then
  195. begin
  196. assign ( input_file, 'text_en.txt' ); { }
  197. reset ( input_file ); { }
  198.  
  199. while not EOF ( input_file ) do { }
  200. begin
  201. readln ( input_file, buffer ); { }
  202. writeln ( buffer ); { }
  203. for ii := 1 to ord(buffer[0]) do { }
  204. feed_char( buffer[ii] );
  205. end;
  206. display();
  207. end
  208. else if state = 2 then
  209. begin
  210. mbuffer := #0;
  211. while mbuffer <> #27 do
  212. begin
  213. mbuffer := readKey;
  214. feed_char( mbuffer );
  215. write(mbuffer);
  216. end;
  217. display();
  218. end;
  219.  
  220.  
  221.  
  222. textcolor (white); { }
  223. writeln('press ENTER'); { }
  224. readln { }
  225.  
  226. end. { }

Report this snippet  

You need to login to post a comment.