minimal_stemmer 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 05ce713c36de06617c3507310ee3ffd09e1a790d
4
+ data.tar.gz: 52db46c24a2c4f3903245593b140acbee77c7298
5
+ SHA512:
6
+ metadata.gz: bfc7b9bf4fbe4ae2bc8d67c2e2df80cf89327e0751186959f956440328c65e004ef7a1b8264d704dd1d77e7078fd417480a4eb27044c16482596c4752d5ad963
7
+ data.tar.gz: 2b93575a0f2524b327ea387aae0c9052493705489579fdf134473065f680df8f303cc8b7c1530e6fa83d7be8d09fcee3040fd2e112876d0437df0f19aabd55fa
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ # Simple implementation of the "S-Stemmer" (aka English minimal stemmer).
4
+ class MinimalStemmer
5
+ class << self
6
+ # Stem a word.
7
+ #
8
+ # @param [String] word the word to stem
9
+ # @return [String] the stemmed word
10
+ def stem(word)
11
+ if %w(aies eies aes ees oes ss us).any? { |s| word.end_with?(s) }
12
+ return word
13
+ end
14
+
15
+ word.sub(/ies\z/, 'y')
16
+ .sub(/es\z/, 'e')
17
+ .sub(/s\z/, '')
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ # @see String
2
+ class String
3
+ # @see MinimalStemmer.stem
4
+ def stem
5
+ MinimalStemmer.stem(self)
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ require_relative '../spec_helper'
2
+
3
+ require 'minimal_stemmer/core_ext/string'
4
+
5
+ describe String do
6
+ describe '#stem' do
7
+ it 'adds a #stem method to String that calls MinimalStemmer.stem' do
8
+ expect('words'.stem).to eq('word')
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,83 @@
1
+ require_relative './spec_helper'
2
+
3
+ describe MinimalStemmer do
4
+ describe '.stem' do
5
+ context 'word ending in "ies"' do
6
+ it 'stems to a "y"' do
7
+ expect(MinimalStemmer.stem('tries')).to eq('try')
8
+ end
9
+
10
+ context 'ending in "eies"' do
11
+ it 'does not stem' do
12
+ expect(MinimalStemmer.stem('neies')).to eq('neies')
13
+ end
14
+ end
15
+
16
+ context 'ending in "aies"' do
17
+ it 'does not stem' do
18
+ expect(MinimalStemmer.stem('braies')).to eq('braies')
19
+ end
20
+ end
21
+ end
22
+
23
+ context 'word ending in "es"' do
24
+ it 'stems to a "e"' do
25
+ expect(MinimalStemmer.stem('cliques')).to eq('clique')
26
+ end
27
+
28
+ context 'ending in "aes"' do
29
+ it 'does not stem' do
30
+ expect(MinimalStemmer.stem('sundaes')).to eq('sundaes')
31
+ end
32
+ end
33
+
34
+ context 'ending in "ees"' do
35
+ it 'does not stem' do
36
+ expect(MinimalStemmer.stem('trustees')).to eq('trustees')
37
+ end
38
+ end
39
+
40
+ context 'ending in "oes"' do
41
+ it 'does not stem' do
42
+ expect(MinimalStemmer.stem('potatoes')).to eq('potatoes')
43
+ end
44
+ end
45
+ end
46
+
47
+ context 'word ending in s' do
48
+ it 'strips the s' do
49
+ expect(MinimalStemmer.stem('words')).to eq('word')
50
+ end
51
+
52
+ context 'ending in "us"' do
53
+ it 'does not stem' do
54
+ expect(MinimalStemmer.stem('focus')).to eq('focus')
55
+ end
56
+ end
57
+
58
+ context 'ending in "ss"' do
59
+ it 'does not stem' do
60
+ expect(MinimalStemmer.stem('success')).to eq('success')
61
+ end
62
+ end
63
+ end
64
+
65
+ context 'ignored suffixes' do
66
+ it 'does not stem "ing"' do
67
+ expect(MinimalStemmer.stem('running')).to eq('running')
68
+ end
69
+
70
+ it 'does not stem "ly"' do
71
+ expect(MinimalStemmer.stem('surprisingly')).to eq('surprisingly')
72
+ end
73
+
74
+ it 'does not stem "er"' do
75
+ expect(MinimalStemmer.stem('runner')).to eq('runner')
76
+ end
77
+
78
+ it 'does not stem "ed"' do
79
+ expect(MinimalStemmer.stem('planned')).to eq('planned')
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+ require 'bundler/setup'
3
+ require 'rspec/core'
4
+
5
+ $LOAD_PATH.push File.expand_path('../lib', File.dirname(__FILE__))
6
+
7
+ require 'minimal_stemmer'
8
+
9
+ RSpec.configure do |config|
10
+ config.expect_with :rspec do |c|
11
+ c.syntax = :expect
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minimal_stemmer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Paul Dlug
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: yard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.8'
55
+ description: Implements the "S-Stemmer" from "How Effective Is Suffixing?"
56
+ email: paul.dlug@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/minimal_stemmer.rb
62
+ - lib/minimal_stemmer/core_ext/string.rb
63
+ - spec/core_ext/string_spec.rb
64
+ - spec/minimal_stemmer_spec.rb
65
+ - spec/spec_helper.rb
66
+ homepage: https://github.com/pdlug/minimal_stemmer
67
+ licenses:
68
+ - MIT
69
+ metadata: {}
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 1.9.3
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project:
86
+ rubygems_version: 2.4.6
87
+ signing_key:
88
+ specification_version: 4
89
+ summary: Implementation of an English minimal stemmer
90
+ test_files:
91
+ - spec/core_ext/string_spec.rb
92
+ - spec/minimal_stemmer_spec.rb
93
+ - spec/spec_helper.rb