-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapplication.e
154 lines (146 loc) · 5 KB
/
application.e
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
note
description: "wordfreq application root class"
date: "$Date$"
revision: "$Revision$"
class
APPLICATION
inherit
ARGUMENTS_32
create
make
feature {NONE} -- Initialization
make
-- Run application.
local
word_dict: HASH_TABLE [INTEGER, STRING] -- Hash Table que relaciona uma palabra a sua frequência
extractor: WORD_EXTRACTOR
stop_remover: STOP_REMOVER
freq_counter: FREQ_COUNTER
sorter: SORTER -- Declarando as classes que serão utilizadas
temp_list: LINKED_LIST [STRING]
stop_words: LINKED_LIST [STRING] -- Lista de Stopwords
final_list: LINKED_LIST [STRING] -- Lista de Output
temp_string: STRING -- Armazenador temporário de string
path1: STRING
path2: STRING -- Os caminhos de arquivo do arquivo principal e o de stop words respectivamente
chk1: BOOLEAN -- Os cheques são usados paa corrigir exceções, sendo mudados pela opeação de rescue
chk2: BOOLEAN
chk3: BOOLEAN
chk4: BOOLEAN
chk5: BOOLEAN
n: INTEGER
i: INTEGER
handler: EXCEPTIONS
step: INTEGER -- Indica em que etapa da execução está para o abordador de exceções
do
create word_dict.make (100)
create extractor.make
create temp_list.make
create stop_words.make -- Inicializando algumas vaiáveis
path1 := "frankstein_chpt4.txt" -- Arquivo padrão caso o arquivo do usuário não seja valido
if not chk1 then
print("File path: ")
IO.read_line
path1 := IO.last_string
print("%N")
end
path2 := "stop-words.txt" -- Caminho para o arquivo de stop words
step := 0 -- Etapa da execução para propósito de corrigir exceções
print ("Step ")
print (step)
print (": Extracting Text %N")
temp_list := extractor.extract_words (path1) -- Retorna lista de palavras no arquivo
step := 1
print ("Step ")
print (step)
print (": Extracting Stop Words %N")
if not chk2 then
stop_words := extractor.extract_words (path2) -- Retorna lista de palavras no arquivo de stopwords
else -- Se teve exceção na ultima tentativa, utiliza o arquivo padrão stop
stop_words := extractor.extract_words ("stop.txt")
end
step := 2
print ("Step ")
print (step)
print (": Removing Stop Words from List %N")
create stop_remover.make
if not chk3 then
temp_list := stop_remover.remove_stops (temp_list, stop_words) -- Remove palavas presentes em stop_words de temp_list
else
temp_list := temp_list -- Caso de qualquer erro, retorne a lista não modificada
end
step := 3
print ("Step ")
print (step)
print (": Counting the Frequency of Words %N")
create freq_counter.make
create word_dict.make (100)
if not chk4 then -- Se de alguma forma deu erro na hoa de contar a frequencia, o dicionário é deixado vazio
word_dict := freq_counter.frequency (temp_list)
end
step := 4
print ("Step ")
print (step)
print (": Sorting List %N")
create final_list.make
from -- Criando final_list composta só de elementos únicos através do dicionário
word_dict.start
until
word_dict.after
loop
temp_string := word_dict.key_for_iteration -- Pegando a chave (palavra) na posição do dicionário atual
final_list.extend (temp_string) -- Adiciona a chave à lista
word_dict.forth -- Isso vai para a próxima posição do dicionário
end
create sorter.make
if not chk5 then -- Se tiver dado erro em ordena na última execução, não ordena a lista
final_list := sorter.mergesort_key (final_list, word_dict) -- Ordena a lista baseada na sua frequência no dicionário que acompanha
end
from
final_list.start; i := 0
until
final_list.exhausted or i >= 25
loop
print (final_list.item + " ")
n := 0
if word_dict.has (final_list.item) then -- Se de alguma foma um item da lista não estive no dicionário, sua frequência é 0
n := word_dict.at (final_list.item)
end
print (n)
print ("%N")
final_list.forth
i := i + 1
end
if final_list.is_empty then
print ("Nenhuma palavra valida encontrada")
end
rescue -- Trata exceções com base na etapa de execução do programa
if step = 0 then
print ("ERROR: The wordlist filepath '")
print (path1)
print ("' does not lead to a readable file" + "%N")
print ("Using default file: 'frankstein_chpt4.txt'" + "%N")
chk1 := TRUE
retry
elseif step = 1 then
print ("ERROR: The stopword filepath '")
print (path2)
print ("' does not lead to a readable file" + "%N")
print ("Using default file: 'stop.txt'" + "%N")
chk2 := TRUE
retry
elseif step = 2 then
print ("ERROR: Error in removing stop words, returning unchanged word list %N")
chk3 := TRUE
retry
elseif step = 3 then
print ("ERROR: Couldn't determine frequency, returning empty dictionary %N")
chk4 := TRUE
retry
elseif step = 4 then
print ("ERROR: Couldn't order frequency list, returning results unordered %N")
chk5 := TRUE
retry
end
end
end