-
Notifications
You must be signed in to change notification settings - Fork 2
/
tfIdfTermCount.m
167 lines (146 loc) · 6.78 KB
/
tfIdfTermCount.m
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
function [resultTFIDF, resultDFmap, resultDFpositive, resultDFnegative, resultTermCountInPos, resultTermCountInNeg, pos_word_count, neg_word_count] = tfIdfTermCount( )
training = fopen('training.txt','r');
dfMap = containers.Map('KeyType','char','ValueType','int32');
tf_map = containers.Map('KeyType','char','ValueType','any');
%IG hesaplerken kullanýlacak pozitif file için df
df_positive = containers.Map('KeyType','char','ValueType','int32');
%IG hesaplerken kullanýlacak negatif file için df
df_negative = containers.Map('KeyType','char','ValueType','int32');
%Probability hesaplerken kullanýlacak positive file içindeki bir
%kelimenin toplam kaç kere geçtiði
termCountInPos_map = containers.Map('KeyType','char','ValueType','int32');
termCountInNeg_map = containers.Map('KeyType','char','ValueType','int32');
pos_word_count=0;
neg_word_count=0;
comment = fgetl(training);
commentCount=1;
%createTrainingSet fonksiyonu çaðrýldýktan sonra oluþturulan training
%file içindeki her yorum tek tek iþleniyor.
while ischar(comment)
%nümerik karakterleri kaldýr
%her bir kelime arasý noktalama iþaretlerini kaldýr
%boþluk koy
comment = regexprep(comment,'[^A-Za-z_ðüþýöçÐÜÞÝÖÇ]',' ');
%tüm kelimeler küçük harfe dönüþüyor
comment=lower(comment);
%Tokenization = boþluklara göre comment içindeki her bir kelimeyi
%ayýrdýk ve tekrar comment deðiþkenine atadýk
comment = strsplit(comment);
%comment içindeki her bir kelime kontrol edilip commentWords
%mapine insert ediliyor
commentWords = containers.Map('KeyType','char','ValueType','int32');
for i=1:length(comment)
word = char(comment(1,i));
%Stop Words ~ 3 harften kýsa kelimeler ele alýnmýyor.
if(length(word)<3)
continue;
end
%Stemming = Fixed-Prefix n=5
if(length(word)>5)
word = word(1:5);
end
if(~commentWords.isKey(word))
commentWords(word) = 1;
%comment içindeki her bir kelimenin df deðerleri
%hesaplanarak dfMap'ine key value þeklinde ekleniyor.
if dfMap.isKey(word)
val = dfMap(word);
dfMap(word) = val + 1;
else
dfMap(word) = 1;
end
%her bir kelimenin positive classýna göre df'ini
%hesaplýyoruz
%bu df deðeri df_positive'de tutuluyor.
%bu deðerler information gain hesaplarken yardýmcý
%olacak
if commentCount<512
pos_word_count=pos_word_count+1; %pozitif dökümanda geçen toplam kelime sayýsý
if df_positive.isKey(word) % o ara df i de aradan çýkaralým
val = df_positive(word);
df_positive(word) = val + 1;
else
df_positive(word) = 1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%bir kelimenin pozitif fileda toplam kaç kere
%geçtiði
if ~termCountInPos_map.isKey(word)
termCountInPos_map(word)=1;
else
val = termCountInPos_map(word);
termCountInPos_map(word)=val+1;
end
%her bir kelimenin negative classýna göre df'ini
%hesaplýyoruz
%bu df deðeri df_negative'de tutuluyor.
else
neg_word_count=neg_word_count+1; %negatif dökümanda geçen toplam kelime sayýsý
if df_negative.isKey(word) % o ara df i de aradan çýkaralým
val = df_negative(word);
df_negative(word) = val + 1;
else
df_negative(word) = 1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%bir kelimenin negatif fileda toplam kaç kere
%geçtiði
if ~termCountInNeg_map.isKey(word)
termCountInNeg_map(word)=1;
else
val = termCountInNeg_map(word);
termCountInNeg_map(word)=val+1;
end
end
%commentWords içindeki wordlerin tf deðerleri hesaplanýyor.
else
val = commentWords(word);
commentWords(word) = val + 1;
end
end
commentWordsKeys = commentWords.keys;
for j = 1:commentWords.length
tfTable = cell(1);
word = char(commentWordsKeys(1,j));
if(tf_map.isKey(word))
tfTable = tf_map(word);
tf = commentWords(word);
tfTable{1,commentCount} = tf;
tf_map(word) = tfTable;
else
tf = commentWords(word);
tfTable{1,commentCount} = tf;
tf_map(word) = tfTable;
end
end
comment=fgetl(training);
commentCount=commentCount+1;
end
%tfTable içinde TF deðerleri bulunuyor.
tfTable = cell(1);
tfMapKeys = tf_map.keys();
for i=1:length(tfMapKeys)
word = char(tfMapKeys(1,i));
tfTable{i,1} = word;
%tempArray = wordun tf deðerlerini tutuyor
tempArray = tf_map(char(word));
for j = 1 : length(tempArray)
if(~isempty(tempArray{1,j}))
tf = tempArray{1,j};
df = dfMap(word);
tfIdf = double(double(tf) * log(double(commentCount/df)));
tfTable{i,j+1} = tfIdf;
else
%tfIdf deðeri yoksa 0
tfTable{i,j+1} = 0;
end
end
end
fclose(training);
resultTermCountInPos = termCountInPos_map;
resultTermCountInNeg = termCountInNeg_map;
resultTFIDF = tfTable;
resultDFmap = dfMap;
resultDFpositive = df_positive;
resultDFnegative = df_negative;
end