cloud_text 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 983b4f884b5029e10005ae1e89c31d2c97f16ace
4
- data.tar.gz: 88cea0d72ea1fde97fb59cc552552c3efebb8adf
3
+ metadata.gz: 454fff55b372f0cf569dd85ff4d0628a61979447
4
+ data.tar.gz: 80c4881f8c853eda28307f1af69d2994eac2d62d
5
5
  SHA512:
6
- metadata.gz: 4e9f961744d2d31dd61a075029c53746161c723e588199995a2dbd8a36b9f80abb19c50b3fe0345a0d118310a82c27ccbd8a32662487910cab9c8eec5590ab65
7
- data.tar.gz: 064e0468f37ebc8ba528f2f27d6fafcba6b102bfda2b42823ccd17b1bee3020f1899f674e561a0cd46e3d03755517e397617082ff88873b335194df215b77732
6
+ metadata.gz: 1fd69e11aaeba4d3169482cb09c6ccdd56d36883176e499550c11fa3b9012591cba269757d206a2de39a428c55fded3c53bdcedd14c2f51c1a3f255c29887418
7
+ data.tar.gz: e74a99f08e16dcecc363fabd286b49253fd8042e367efd00598f17b87652505dec960ac1e146e532edf311edd5e8304aceb0362b32a94b7a8788861cedb134a1
data/.gitignore CHANGED
@@ -6,6 +6,6 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
-
9
+ *.gem
10
10
  # rspec failure tracking
11
11
  .rspec_status
data/Gemfile CHANGED
@@ -4,6 +4,3 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in cloud_text.gemspec
6
6
  gemspec
7
- gem 'unicode_utils'
8
- gem 'stopwords-filter'
9
- gem 'ruby-stemmer'
data/Gemfile.lock ADDED
@@ -0,0 +1,41 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ cloud_text (0.1.1)
5
+ ruby-stemmer (~> 0.9.6)
6
+ stopwords-filter (~> 0.4.1)
7
+ unicode_utils (~> 1.4)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ diff-lcs (1.3)
13
+ rake (10.5.0)
14
+ rspec (3.7.0)
15
+ rspec-core (~> 3.7.0)
16
+ rspec-expectations (~> 3.7.0)
17
+ rspec-mocks (~> 3.7.0)
18
+ rspec-core (3.7.1)
19
+ rspec-support (~> 3.7.0)
20
+ rspec-expectations (3.7.0)
21
+ diff-lcs (>= 1.2.0, < 2.0)
22
+ rspec-support (~> 3.7.0)
23
+ rspec-mocks (3.7.0)
24
+ diff-lcs (>= 1.2.0, < 2.0)
25
+ rspec-support (~> 3.7.0)
26
+ rspec-support (3.7.1)
27
+ ruby-stemmer (0.9.6)
28
+ stopwords-filter (0.4.1)
29
+ unicode_utils (1.4.0)
30
+
31
+ PLATFORMS
32
+ ruby
33
+
34
+ DEPENDENCIES
35
+ bundler (~> 1.16)
36
+ cloud_text!
37
+ rake (~> 10.0)
38
+ rspec (~> 3.0)
39
+
40
+ BUNDLED WITH
41
+ 1.16.1
data/README.md CHANGED
@@ -28,9 +28,9 @@ require 'cloud_text'
28
28
  # language => "en"
29
29
  # stemming => false
30
30
 
31
- options = { remove_digits: false, language: "en", stemming: true }
32
- cleaner = CloudText.clean_text("Your text to be cleaned, will come here1!1", options)
33
- # => [["come", 1], ["will", 1], ["clean", 1], ["text", 1]]
31
+ options = { remove_digits: true, language: "en", stemming: true }
32
+ cleaner = CloudText.clean_text("Your text to be cleaned, will come come come here1!1", options)
33
+ # => [["come", 3], ["will", 1], ["clean", 1], ["text", 1]]
34
34
  ```
35
35
 
36
36
  ## Contributing
data/cloud_text.gemspec CHANGED
@@ -24,4 +24,8 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "bundler", "~> 1.16"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
+
28
+ spec.add_runtime_dependency 'unicode_utils', '~> 1.4'
29
+ spec.add_runtime_dependency 'stopwords-filter', '~> 0.4.1'
30
+ spec.add_runtime_dependency 'ruby-stemmer', '~> 0.9.6'
27
31
  end
data/lib/cloud_text.rb CHANGED
@@ -9,48 +9,65 @@ module CloudText
9
9
  @input = input
10
10
  @options = options
11
11
 
12
- # Remove punctuation and/or digits
12
+ # Get feature on/off switches
13
13
  remove_digits = @options.fetch(:remove_digits, false)
14
- if remove_digits
15
- @input = input.gsub(/[^A-Za-z0-9^şŞıİçÇöÖüÜĞğ\s]|_|\d/, ' ')
16
- else
17
- @input = input.gsub(/[^A-Za-z0-9^şŞıİçÇöÖüÜĞğ\s]|_/, ' ')
18
- end
19
- # Reduce multiple whitespaces into single whitespace
20
- @input = @input.gsub(/\s+/, ' ')
14
+ stemming_enabled = @options.fetch(:stemming, false)
21
15
 
22
- # Lowercase all tokens
16
+ # Get variables
23
17
  @language = @options.fetch(:language, "en")
24
- @input = UnicodeUtils.downcase(@input, @language.to_sym)
25
-
26
- # Filter stopwords
27
- @cutsom_stopwords = @options.fetch(:stopwords, [])
28
- if @language == "tr"
29
- stopword_filter = Stopwords::Filter.new tr_stopwords
30
- else
31
- stopword_filter = Stopwords::Snowball::Filter.new @language
32
- end
18
+ @custom_stopwords = @options.fetch(:stopwords, [])
19
+
20
+ @input = process_text(@input, stemming_enabled, remove_digits, @language, @custom_stopwords)
21
+ count_words(@input)
22
+ end
23
+
24
+ private
25
+
26
+ def self.process_text(input, stemming_enabled, remove_digits, language, custom_stopwords)
27
+ input = remove_punctuation(input, remove_digits)
28
+ input = reduce_whitespaces(input)
29
+ input = lowercase_words(input, language)
30
+ input = filter_stopwords(input, language, custom_stopwords) # Get custom_stopwords from user and filter words
31
+ input = stemming(input, language) if stemming_enabled
32
+ end
33
+
34
+ def self.remove_punctuation(input, remove_digits)
35
+ regex = remove_digits ? /[^A-Za-z0-9^şŞıİçÇöÖüÜĞğ\s]|_|\d/ : /[^A-Za-z0-9^şŞıİçÇöÖüÜĞğ\s]|_/
36
+ input.gsub(regex, ' ')
37
+ end
33
38
 
34
- # Here we intentionally do not downcase custom_stopwords
39
+ # Reduce multiple whitespaces into single whitespace
40
+ def self.reduce_whitespaces(input)
41
+ input.gsub(/\s+/, ' ')
42
+ end
43
+
44
+ def self.lowercase_words(input, language)
45
+ UnicodeUtils.downcase(input, language.to_sym)
46
+ end
47
+
48
+ # Remove stopwords for given language and also given custom stopwords
49
+ def self.filter_stopwords(input, language, custom_stopwords = nil)
50
+ stopword_filter = language == "tr" ? Stopwords::Filter.new(tr_stopwords) : stopword_filter = Stopwords::Snowball::Filter.new(language)
51
+
52
+ # Here we intentionally do not downcase custom_stopwords
35
53
  # since we want to filter only capitalized version of a word
36
- stopword_filter.stopwords << @cutsom_stopwords
37
- @input = stopword_filter.filter(@input.split)
38
-
39
- # Stemming
40
- stemming_enabled = @options.fetch(:stemming, false)
41
- if stemming_enabled
42
- stemmer = Lingua::Stemmer.new(language: @language)
43
- @input = @input.map do |word|
44
- stemmer.stem(word)
45
- end
54
+ stopword_filter.stopwords << custom_stopwords if custom_stopwords
55
+ stopword_filter.filter(input.split)
56
+ end
57
+
58
+ def self.stemming(input, language)
59
+ stemmer = Lingua::Stemmer.new(language: language)
60
+ input.map do |word|
61
+ stemmer.stem(word)
46
62
  end
63
+ end
47
64
 
48
- # Counting the words, generate array for each element like => [word, frequency]
49
- @result = @input.each_with_object(Hash.new(0)) { |token, hash| hash[token] += 1 }.sort_by {|k,v| v}.reverse
65
+ # Counting the words, generate array for each element like => [word, frequency]
66
+ def self.count_words(input)
67
+ input.each_with_object(Hash.new(0)) { |token, hash| hash[token] += 1 }.sort_by(&:last).reverse
50
68
  end
51
69
 
52
- private
53
70
  def self.tr_stopwords
54
- ['a','acaba','altı','altmış','ama','ancak','arada','artık','asla','aslında','aslında','ayrıca','az','bana','bazen','bazı','bazıları','belki','ben','benden','beni','benim','beri','beş','bile','bilhassa','bin','bir','biraz','birçoğu','birçok','biri','birisi','birkaç','birşey','biz','bizden','bize','bizi','bizim','böyle','böylece','bu','buna','bunda','bundan','bunlar','bunları','bunların','bunu','bunun','burada','bütün','çoğu','çoğunu','çok','çünkü','da','daha','dahi','dan','de','defa','değil','diğer','diğeri','diğerleri','diye','doksan','dokuz','dolayı','dolayısıyla','dört','e','edecek','eden','ederek','edilecek','ediliyor','edilmesi','ediyor','eğer','elbette','elli','en','etmesi','etti','ettiği','ettiğini','fakat','falan','filan','gene','gereği','gerek','gibi','göre','hala','halde','halen','hangi','hangisi','hani','hatta','hem','henüz','hep','hepsi','her','herhangi','herkes','herkese','herkesi','herkesin','hiç','hiçbir','hiçbiri','i','ı','için','içinde','iki','ile','ilgili','ise','işte','itibaren','itibariyle','kaç','kadar','karşın','kendi','kendilerine','kendine','kendini','kendisi','kendisine','kendisini','kez','ki','kim','kime','kimi','kimin','kimisi','kimse','kırk','madem','mi','mı','milyar','milyon','mu','mü','nasıl','ne','neden','nedenle','nerde','nerede','nereye','neyse','niçin','nin','nın','niye','nun','nün','o','öbür','olan','olarak','oldu','olduğu','olduğunu','olduklarını','olmadı','olmadığı','olmak','olması','olmayan','olmaz','olsa','olsun','olup','olur','olur','olursa','oluyor','on','ön','ona','önce','ondan','onlar','onlara','onlardan','onları','onların','onu','onun','orada','öte','ötürü','otuz','öyle','oysa','pek','rağmen','sana','sanki','sanki','şayet','şekilde','sekiz','seksen','sen','senden','seni','senin','şey','şeyden','şeye','şeyi','şeyler','şimdi','siz','siz','sizden','sizden','size','sizi','sizi','sizin','sizin','sonra','şöyle','şu','şuna','şunları','şunu','ta','tabii','tam','tamam','tamamen','tarafından','trilyon','tüm','tümü','u','ü','üç','un','ün','üzere','var','vardı','ve','veya','ya','yani','yapacak','yapılan','yapılması','yapıyor','yapmak','yaptı','yaptığı','yaptığını','yaptıkları','ye','yedi','yerine','yetmiş','yi','yı','yine','yirmi','yoksa','yu','yüz','zaten','zira']
71
+ File.readlines('tr_stopwords_dict').each(&:chomp!)
55
72
  end
56
73
  end
@@ -1,3 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module CloudText
2
- VERSION = "0.1.0"
4
+ MAJOR = 0
5
+ MINOR = 1
6
+ TINY = 1
7
+ # PRE = nil
8
+
9
+ VERSION = [MAJOR, MINOR, TINY].compact.join('.')
3
10
  end
@@ -0,0 +1,283 @@
1
+ a
2
+ acaba
3
+ altı
4
+ altmış
5
+ ama
6
+ ancak
7
+ arada
8
+ artık
9
+ asla
10
+ aslında
11
+ aslında
12
+ ayrıca
13
+ az
14
+ bana
15
+ bazen
16
+ bazı
17
+ bazıları
18
+ belki
19
+ ben
20
+ benden
21
+ beni
22
+ benim
23
+ beri
24
+ beş
25
+ bile
26
+ bilhassa
27
+ bin
28
+ bir
29
+ biraz
30
+ birçoğu
31
+ birçok
32
+ biri
33
+ birisi
34
+ birkaç
35
+ birşey
36
+ biz
37
+ bizden
38
+ bize
39
+ bizi
40
+ bizim
41
+ böyle
42
+ böylece
43
+ bu
44
+ buna
45
+ bunda
46
+ bundan
47
+ bunlar
48
+ bunları
49
+ bunların
50
+ bunu
51
+ bunun
52
+ burada
53
+ bütün
54
+ çoğu
55
+ çoğunu
56
+ çok
57
+ çünkü
58
+ da
59
+ daha
60
+ dahi
61
+ dan
62
+ de
63
+ defa
64
+ değil
65
+ diğer
66
+ diğeri
67
+ diğerleri
68
+ diye
69
+ doksan
70
+ dokuz
71
+ dolayı
72
+ dolayısıyla
73
+ dört
74
+ e
75
+ edecek
76
+ eden
77
+ ederek
78
+ edilecek
79
+ ediliyor
80
+ edilmesi
81
+ ediyor
82
+ eğer
83
+ elbette
84
+ elli
85
+ en
86
+ etmesi
87
+ etti
88
+ ettiği
89
+ ettiğini
90
+ fakat
91
+ falan
92
+ filan
93
+ gene
94
+ gereği
95
+ gerek
96
+ gibi
97
+ göre
98
+ hala
99
+ halde
100
+ halen
101
+ hangi
102
+ hangisi
103
+ hani
104
+ hatta
105
+ hem
106
+ henüz
107
+ hep
108
+ hepsi
109
+ her
110
+ herhangi
111
+ herkes
112
+ herkese
113
+ herkesi
114
+ herkesin
115
+ hiç
116
+ hiçbir
117
+ hiçbiri
118
+ i
119
+ ı
120
+ için
121
+ içinde
122
+ iki
123
+ ile
124
+ ise
125
+ işte
126
+ itibaren
127
+ itibariyle
128
+ kaç
129
+ kadar
130
+ karşın
131
+ kendi
132
+ kendilerine
133
+ kendine
134
+ kendini
135
+ kendisi
136
+ kendisine
137
+ kendisini
138
+ kez
139
+ ki
140
+ kim
141
+ kime
142
+ kimi
143
+ kimin
144
+ kimisi
145
+ kimse
146
+ kırk
147
+ madem
148
+ mi
149
+
150
+ milyar
151
+ milyon
152
+ mu
153
+
154
+ nasıl
155
+ ne
156
+ neden
157
+ nedenle
158
+ nerde
159
+ nerede
160
+ nereye
161
+ neyse
162
+ niçin
163
+ nin
164
+ nın
165
+ niye
166
+ nun
167
+ nün
168
+ o
169
+ öbür
170
+ olan
171
+ olarak
172
+ oldu
173
+ olduğu
174
+ olduğunu
175
+ olduklarını
176
+ olmadı
177
+ olmadığı
178
+ olmak
179
+ olması
180
+ olmayan
181
+ olmaz
182
+ olsa
183
+ olsun
184
+ olup
185
+ olur
186
+ olur
187
+ olursa
188
+ oluyor
189
+ on
190
+ ön
191
+ ona
192
+ önce
193
+ ondan
194
+ onlar
195
+ onlara
196
+ onlardan
197
+ onları
198
+ onların
199
+ onu
200
+ onun
201
+ orada
202
+ öte
203
+ ötürü
204
+ otuz
205
+ öyle
206
+ oysa
207
+ pek
208
+ rağmen
209
+ sana
210
+ sanki
211
+ sanki
212
+ şayet
213
+ şekilde
214
+ sekiz
215
+ seksen
216
+ sen
217
+ senden
218
+ seni
219
+ senin
220
+ şey
221
+ şeyden
222
+ şeye
223
+ şeyi
224
+ şeyler
225
+ şimdi
226
+ siz
227
+ siz
228
+ sizden
229
+ sizden
230
+ size
231
+ sizi
232
+ sizi
233
+ sizin
234
+ sizin
235
+ sonra
236
+ şöyle
237
+ şu
238
+ şuna
239
+ şunları
240
+ şunu
241
+ ta
242
+ tabii
243
+ tam
244
+ tamam
245
+ tamamen
246
+ tarafından
247
+ trilyon
248
+ tüm
249
+ tümü
250
+ u
251
+ ü
252
+ üç
253
+ un
254
+ ün
255
+ üzere
256
+ var
257
+ vardı
258
+ ve
259
+ veya
260
+ ya
261
+ yani
262
+ yapacak
263
+ yapılan
264
+ yapılması
265
+ yapıyor
266
+ yapmak
267
+ yaptı
268
+ yaptığı
269
+ yaptığını
270
+ yaptıkları
271
+ ye
272
+ yedi
273
+ yerine
274
+ yetmiş
275
+ yi
276
+
277
+ yine
278
+ yirmi
279
+ yoksa
280
+ yu
281
+ yüz
282
+ zaten
283
+ zira
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloud_text
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - recepinanc
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-30 00:00:00.000000000 Z
11
+ date: 2018-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,48 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: unicode_utils
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: stopwords-filter
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.4.1
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.4.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: ruby-stemmer
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.9.6
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.9.6
55
97
  description: This gem removes punctuation and digits(optional), filters stopwords
56
98
  for the chosen language ('tr', 'en' or 'fr'), does stemming on the words and outputs
57
99
  an array of words with their frequencies.
@@ -66,6 +108,7 @@ files:
66
108
  - ".travis.yml"
67
109
  - CODE_OF_CONDUCT.md
68
110
  - Gemfile
111
+ - Gemfile.lock
69
112
  - LICENSE
70
113
  - README.md
71
114
  - Rakefile
@@ -74,7 +117,7 @@ files:
74
117
  - cloud_text.gemspec
75
118
  - lib/cloud_text.rb
76
119
  - lib/cloud_text/version.rb
77
- - lib/tr_stopwords.txt
120
+ - lib/tr_stopwords_dict
78
121
  homepage: https://github.com/twentify/cloud_text
79
122
  licenses:
80
123
  - MIT
@@ -95,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
138
  version: '0'
96
139
  requirements: []
97
140
  rubyforge_project:
98
- rubygems_version: 2.6.8
141
+ rubygems_version: 2.5.2
99
142
  signing_key:
100
143
  specification_version: 4
101
144
  summary: Cleans the given text for the given language.
data/lib/tr_stopwords.txt DELETED
@@ -1 +0,0 @@
1
- ['a','acaba','altı','altmış','ama','ancak','arada','artık','asla','aslında','aslında','ayrıca','az','bana','bazen','bazı','bazıları','belki','ben','benden','beni','benim','beri','beş','bile','bilhassa','bin','bir','biraz','birçoğu','birçok','biri','birisi','birkaç','birşey','biz','bizden','bize','bizi','bizim','böyle','böylece','bu','buna','bunda','bundan','bunlar','bunları','bunların','bunu','bunun','burada','bütün','çoğu','çoğunu','çok','çünkü','da','daha','dahi','dan','de','defa','değil','diğer','diğeri','diğerleri','diye','doksan','dokuz','dolayı','dolayısıyla','dört','e','edecek','eden','ederek','edilecek','ediliyor','edilmesi','ediyor','eğer','elbette','elli','en','etmesi','etti','ettiği','ettiğini','fakat','falan','filan','gene','gereği','gerek','gibi','göre','hala','halde','halen','hangi','hangisi','hani','hatta','hem','henüz','hep','hepsi','her','herhangi','herkes','herkese','herkesi','herkesin','hiç','hiçbir','hiçbiri','i','ı','için','içinde','iki','ile','ise','işte','itibaren','itibariyle','kaç','kadar','karşın','kendi','kendilerine','kendine','kendini','kendisi','kendisine','kendisini','kez','ki','kim','kime','kimi','kimin','kimisi','kimse','kırk','madem','mi','mı','milyar','milyon','mu','mü','nasıl','ne','neden','nedenle','nerde','nerede','nereye','neyse','niçin','nin','nın','niye','nun','nün','o','öbür','olan','olarak','oldu','olduğu','olduğunu','olduklarını','olmadı','olmadığı','olmak','olması','olmayan','olmaz','olsa','olsun','olup','olur','olur','olursa','oluyor','on','ön','ona','önce','ondan','onlar','onlara','onlardan','onları','onların','onu','onun','orada','öte','ötürü','otuz','öyle','oysa','pek','rağmen','sana','sanki','sanki','şayet','şekilde','sekiz','seksen','sen','senden','seni','senin','şey','şeyden','şeye','şeyi','şeyler','şimdi','siz','siz','sizden','sizden','size','sizi','sizi','sizin','sizin','sonra','şöyle','şu','şuna','şunları','şunu','ta','tabii','tam','tamam','tamamen','tarafından','trilyon','tüm','tümü','u','ü','üç','un','ün','üzere','var','vardı','ve','veya','ya','yani','yapacak','yapılan','yapılması','yapıyor','yapmak','yaptı','yaptığı','yaptığını','yaptıkları','ye','yedi','yerine','yetmiş','yi','yı','yine','yirmi','yoksa','yu','yüz','zaten',zira]