classifier 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. data/LICENSE +341 -0
  2. data/README +59 -6
  3. data/Rakefile +16 -4
  4. data/bin/bayes.rb +8 -2
  5. data/doc/classes/Classifier.html +15 -10
  6. data/doc/classes/Classifier/Bayes.html +68 -38
  7. data/doc/classes/Classifier/Bayes.src/{M000005.html → M000023.html} +1 -1
  8. data/doc/classes/Classifier/Bayes.src/{M000006.html → M000024.html} +1 -1
  9. data/doc/classes/Classifier/Bayes.src/M000025.html +30 -0
  10. data/doc/classes/Classifier/Bayes.src/{M000007.html → M000026.html} +1 -1
  11. data/doc/classes/Classifier/Bayes.src/{M000008.html → M000027.html} +1 -1
  12. data/doc/classes/Classifier/Bayes.src/{M000009.html → M000028.html} +4 -4
  13. data/doc/classes/Classifier/Bayes.src/{M000010.html → M000029.html} +2 -2
  14. data/doc/classes/Classifier/ContentNode.html +252 -0
  15. data/doc/classes/Classifier/ContentNode.src/M000031.html +21 -0
  16. data/doc/classes/Classifier/ContentNode.src/M000032.html +18 -0
  17. data/doc/classes/Classifier/ContentNode.src/M000033.html +18 -0
  18. data/doc/classes/Classifier/ContentNode.src/M000034.html +41 -0
  19. data/doc/classes/Classifier/LSI.html +449 -0
  20. data/doc/classes/Classifier/LSI.src/M000011.html +20 -0
  21. data/doc/classes/Classifier/LSI.src/M000012.html +18 -0
  22. data/doc/classes/Classifier/LSI.src/M000013.html +20 -0
  23. data/doc/classes/Classifier/LSI.src/M000014.html +18 -0
  24. data/doc/classes/Classifier/LSI.src/M000015.html +21 -0
  25. data/doc/classes/Classifier/LSI.src/M000016.html +18 -0
  26. data/doc/classes/Classifier/LSI.src/M000017.html +32 -0
  27. data/doc/classes/Classifier/LSI.src/M000018.html +26 -0
  28. data/doc/classes/Classifier/LSI.src/M000019.html +26 -0
  29. data/doc/classes/Classifier/LSI.src/M000020.html +23 -0
  30. data/doc/classes/Classifier/LSI.src/M000021.html +21 -0
  31. data/doc/classes/Classifier/LSI.src/M000022.html +31 -0
  32. data/doc/classes/Classifier/WordList.html +202 -0
  33. data/doc/classes/Classifier/WordList.src/M000007.html +18 -0
  34. data/doc/classes/Classifier/WordList.src/M000008.html +19 -0
  35. data/doc/classes/Classifier/WordList.src/M000009.html +19 -0
  36. data/doc/classes/Classifier/WordList.src/M000010.html +18 -0
  37. data/doc/classes/GSL.html +111 -0
  38. data/doc/classes/GSL/Vector.html +156 -0
  39. data/doc/classes/GSL/Vector.src/M000005.html +18 -0
  40. data/doc/classes/GSL/Vector.src/M000006.html +19 -0
  41. data/doc/classes/Object.html +139 -0
  42. data/doc/classes/Object.src/M000001.html +16 -0
  43. data/doc/classes/String.html +95 -9
  44. data/doc/classes/{Classifier/WordHash.src/M000001.html → String.src/M000002.html} +3 -3
  45. data/doc/classes/String.src/M000003.html +18 -0
  46. data/doc/classes/String.src/M000004.html +18 -0
  47. data/doc/created.rid +1 -1
  48. data/doc/files/README.html +102 -12
  49. data/doc/files/lib/classifier/bayes_rb.html +1 -1
  50. data/doc/files/lib/classifier/{string_extensions/porter_stemmer_rb.html → extensions/vector_serialize_rb.html} +4 -15
  51. data/doc/files/lib/classifier/{string_extensions → extensions}/word_hash_rb.html +2 -2
  52. data/doc/files/lib/classifier/extensions/word_list_rb.html +115 -0
  53. data/doc/files/lib/classifier/lsi/content_node_rb.html +115 -0
  54. data/doc/files/lib/classifier/lsi_rb.html +125 -0
  55. data/doc/files/lib/classifier/string_extensions_rb.html +2 -3
  56. data/doc/files/lib/classifier_rb.html +3 -1
  57. data/doc/fr_class_index.html +6 -2
  58. data/doc/fr_file_index.html +5 -2
  59. data/doc/fr_method_index.html +34 -11
  60. data/lib/classifier.rb +3 -1
  61. data/lib/classifier/bayes.rb +34 -9
  62. data/lib/classifier/extensions/vector_serialize.rb +14 -0
  63. data/lib/classifier/extensions/word_hash.rb +125 -0
  64. data/lib/classifier/extensions/word_list.rb +31 -0
  65. data/lib/classifier/lsi.rb +248 -0
  66. data/lib/classifier/lsi/content_node.rb +67 -0
  67. data/lib/classifier/string_extensions.rb +10 -5
  68. data/test/bayes/bayesian_test.rb +2 -2
  69. data/test/lsi/lsi_test.rb +88 -0
  70. data/test/string_extensions/word_hash_test.rb +7 -5
  71. metadata +79 -24
  72. data/doc/classes/Classifier/Stemmable.html +0 -243
  73. data/doc/classes/Classifier/Stemmable.src/M000003.html +0 -102
  74. data/doc/classes/Classifier/WordHash.html +0 -178
  75. data/doc/classes/Classifier/WordHash.src/M000002.html +0 -28
  76. data/lib/classifier/string_extensions/porter_stemmer.rb +0 -199
  77. data/lib/classifier/string_extensions/word_hash.rb +0 -119
@@ -2,10 +2,15 @@
2
2
  # Copyright:: Copyright (c) 2005 Lucas Carlson
3
3
  # License:: LGPL
4
4
 
5
- require 'classifier/string_extensions/porter_stemmer'
6
- require 'classifier/string_extensions/word_hash'
5
+ begin
6
+ require_gem 'stemmer'
7
+ rescue LoadError
8
+ puts "Please install stemmer from http://rubyforge.org/projects/stemmer or 'gem install stemmer'"
9
+ exit(-1)
10
+ end
7
11
 
8
- class String
9
- include Classifier::Stemmable
10
- include Classifier::WordHash
12
+ require 'classifier/extensions/word_hash'
13
+
14
+ class Object
15
+ def prepare_category_name; to_s.gsub("_"," ").capitalize.intern end
11
16
  end
@@ -17,12 +17,12 @@ class BayesianTest < Test::Unit::TestCase
17
17
  end
18
18
 
19
19
  def test_categories
20
- assert_equal ['Interesting', 'Uninteresting'], @classifier.categories
20
+ assert_equal ['Interesting', 'Uninteresting'].sort, @classifier.categories.sort
21
21
  end
22
22
 
23
23
  def test_add_category
24
24
  @classifier.add_category 'Test'
25
- assert_equal ['Interesting', 'Test', 'Uninteresting'], @classifier.categories
25
+ assert_equal ['Test', 'Interesting', 'Uninteresting'].sort, @classifier.categories.sort
26
26
  end
27
27
 
28
28
  def test_classification
@@ -0,0 +1,88 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ class LSITest < Test::Unit::TestCase
3
+ def setup
4
+ # we repeat principle words to help weight them.
5
+ # This test is rather delicate, since this system is mostly noise.
6
+ @str1 = "This text deals with dogs. Dogs."
7
+ @str2 = "This text involves dogs too. Dogs! "
8
+ @str3 = "This text revolves around cats. Cats."
9
+ @str4 = "This text also involves cats. Cats!"
10
+ @str5 = "This text involves birds. Birds."
11
+ end
12
+
13
+ def test_basic_indexing
14
+ lsi = Classifier::LSI.new
15
+ [@str1, @str2, @str3, @str4, @str5].each { |x| lsi << x }
16
+ assert ! lsi.needs_rebuild?
17
+
18
+ # note that the closest match to str1 is str2, even though it is not
19
+ # the closest text match.
20
+ assert_equal [@str2, @str5, @str3], lsi.find_related(@str1, 3)
21
+ end
22
+
23
+ def test_not_auto_rebuild
24
+ lsi = Classifier::LSI.new :auto_rebuild => false
25
+ lsi.add_item @str1, "Dog"
26
+ assert lsi.needs_rebuild?
27
+ lsi.build_index
28
+ assert ! lsi.needs_rebuild?
29
+ end
30
+
31
+ def test_basic_categorizing
32
+ lsi = Classifier::LSI.new
33
+ lsi.add_item @str2, "Dog"
34
+ lsi.add_item @str3, "Cat"
35
+ lsi.add_item @str4, "Cat"
36
+ lsi.add_item @str5, "Bird"
37
+
38
+ assert_equal "Dog", lsi.classify( @str1 )
39
+ assert_equal "Cat", lsi.classify( @str3 )
40
+ assert_equal "Bird", lsi.classify( @str5 )
41
+ end
42
+
43
+ def test_external_classifying
44
+ lsi = Classifier::LSI.new
45
+ bayes = Classifier::Bayes.new 'Dog', 'Cat', 'Bird'
46
+ lsi.add_item @str1, "Dog" ; bayes.train_dog @str1
47
+ lsi.add_item @str2, "Dog" ; bayes.train_dog @str2
48
+ lsi.add_item @str3, "Cat" ; bayes.train_cat @str3
49
+ lsi.add_item @str4, "Cat" ; bayes.train_cat @str4
50
+ lsi.add_item @str5, "Bird" ; bayes.train_bird @str5
51
+
52
+ # We're talking about dogs. Even though the text matches the corpus on
53
+ # cats better. Dogs have more semantic weight than cats. So bayes
54
+ # will fail here, but the LSI recognizes content.
55
+ tricky_case = "This text revolves around dogs."
56
+ assert_equal "Dog", lsi.classify( tricky_case )
57
+ assert_not_equal "Dog", bayes.classify( tricky_case )
58
+ end
59
+
60
+ def test_search
61
+ lsi = Classifier::LSI.new
62
+ [@str1, @str2, @str3, @str4, @str5].each { |x| lsi << x }
63
+
64
+ # Searching by content and text, note that @str2 comes up first, because
65
+ # both "dog" and "involve" are present. But, the next match is @str1 instead
66
+ # of @str4, because "dog" carries more weight than involves.
67
+ assert_equal( [@str2, @str1, @str4, @str5, @str3],
68
+ lsi.search("dog involves", 100) )
69
+
70
+ # Keyword search shows how the space is mapped out in relation to
71
+ # dog when magnitude is remove. Note the relations. We move from dog
72
+ # through involve and then finally to other words.
73
+ assert_equal( [@str1, @str2, @str4, @str5, @str3],
74
+ lsi.search("dog", 5) )
75
+ end
76
+
77
+ def test_serialize_safe
78
+ lsi = Classifier::LSI.new
79
+ [@str1, @str2, @str3, @str4, @str5].each { |x| lsi << x }
80
+
81
+ lsi_md = Marshal.dump lsi
82
+ lsi_m = Marshal.load lsi_md
83
+
84
+ assert_equal lsi_m.search("cat", 3), lsi.search("cat", 3)
85
+ assert_equal lsi_m.find_related(@str1, 3), lsi.find_related(@str1, 3)
86
+ end
87
+
88
+ end
@@ -1,12 +1,14 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
2
  class StringExtensionsTest < Test::Unit::TestCase
3
3
  def test_word_hash
4
- hash = {:good=>1, :"!"=>1, :hope=>1, :"'."=>1, :love=>1, :word=>1, :them=>1, :test=>1}
4
+ hash = {:good=>1, :"!"=>1, :hope=>1, :"'"=>1, :"."=>1, :love=>1, :word=>1, :them=>1, :test=>1}
5
5
  assert_equal hash, "here are some good words of test's. I hope you love them!".word_hash
6
6
  end
7
-
8
- def test_without_punctuation
9
- sample = "Hello thats welcome to no punctuation"
10
- assert_equal sample, "Hello, that's welcome () to ! no *& punctuation".without_punctuation
7
+
8
+
9
+ def test_clean_word_hash
10
+ hash = {:good=>1, :word=>1, :hope=>1, :love=>1, :them=>1, :test=>1}
11
+ assert_equal hash, "here are some good words of test's. I hope you love them!".clean_word_hash
11
12
  end
13
+
12
14
  end
metadata CHANGED
@@ -3,13 +3,13 @@ rubygems_version: 0.8.6
3
3
  specification_version: 1
4
4
  name: classifier
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.1.1
7
- date: 2005-04-11
6
+ version: 1.2.0
7
+ date: 2005-04-24
8
8
  summary: A general classifier module to allow Bayesian and other types of classifications.
9
9
  require_paths:
10
10
  - lib
11
11
  email: lucas@rufy.com
12
- homepage: http://rubyforge.org/projects/classifier/
12
+ homepage: http://classifier.rufy.com/
13
13
  rubyforge_project:
14
14
  description: A general classifier module to allow Bayesian and other types of classifications.
15
15
  autorequire: classifier
@@ -30,16 +30,23 @@ files:
30
30
  - lib/classifier
31
31
  - lib/classifier.rb
32
32
  - lib/classifier/bayes.rb
33
- - lib/classifier/string_extensions
33
+ - lib/classifier/extensions
34
+ - lib/classifier/lsi
35
+ - lib/classifier/lsi.rb
34
36
  - lib/classifier/string_extensions.rb
35
- - lib/classifier/string_extensions/porter_stemmer.rb
36
- - lib/classifier/string_extensions/word_hash.rb
37
+ - lib/classifier/extensions/vector_serialize.rb
38
+ - lib/classifier/extensions/word_hash.rb
39
+ - lib/classifier/extensions/word_list.rb
40
+ - lib/classifier/lsi/content_node.rb
37
41
  - bin/bayes.rb
38
42
  - test/bayes
43
+ - test/lsi
39
44
  - test/string_extensions
40
45
  - test/test_helper.rb
41
46
  - test/bayes/bayesian_test.rb
47
+ - test/lsi/lsi_test.rb
42
48
  - test/string_extensions/word_hash_test.rb
49
+ - LICENSE
43
50
  - Rakefile
44
51
  - README
45
52
  - doc/classes
@@ -52,35 +59,83 @@ files:
52
59
  - doc/rdoc-style.css
53
60
  - doc/classes/Classifier
54
61
  - doc/classes/Classifier.html
62
+ - doc/classes/GSL
63
+ - doc/classes/GSL.html
64
+ - doc/classes/Object.html
65
+ - doc/classes/Object.src
55
66
  - doc/classes/String.html
67
+ - doc/classes/String.src
56
68
  - doc/classes/Classifier/Bayes.html
57
69
  - doc/classes/Classifier/Bayes.src
58
- - doc/classes/Classifier/Stemmable.html
59
- - doc/classes/Classifier/Stemmable.src
60
- - doc/classes/Classifier/WordHash.html
61
- - doc/classes/Classifier/WordHash.src
62
- - doc/classes/Classifier/Bayes.src/M000005.html
63
- - doc/classes/Classifier/Bayes.src/M000006.html
64
- - doc/classes/Classifier/Bayes.src/M000007.html
65
- - doc/classes/Classifier/Bayes.src/M000008.html
66
- - doc/classes/Classifier/Bayes.src/M000009.html
67
- - doc/classes/Classifier/Bayes.src/M000010.html
68
- - doc/classes/Classifier/Stemmable.src/M000003.html
69
- - doc/classes/Classifier/WordHash.src/M000001.html
70
- - doc/classes/Classifier/WordHash.src/M000002.html
70
+ - doc/classes/Classifier/ContentNode.html
71
+ - doc/classes/Classifier/ContentNode.src
72
+ - doc/classes/Classifier/LSI.html
73
+ - doc/classes/Classifier/LSI.src
74
+ - doc/classes/Classifier/WordList.html
75
+ - doc/classes/Classifier/WordList.src
76
+ - doc/classes/Classifier/Bayes.src/M000023.html
77
+ - doc/classes/Classifier/Bayes.src/M000024.html
78
+ - doc/classes/Classifier/Bayes.src/M000025.html
79
+ - doc/classes/Classifier/Bayes.src/M000026.html
80
+ - doc/classes/Classifier/Bayes.src/M000027.html
81
+ - doc/classes/Classifier/Bayes.src/M000028.html
82
+ - doc/classes/Classifier/Bayes.src/M000029.html
83
+ - doc/classes/Classifier/ContentNode.src/M000031.html
84
+ - doc/classes/Classifier/ContentNode.src/M000032.html
85
+ - doc/classes/Classifier/ContentNode.src/M000033.html
86
+ - doc/classes/Classifier/ContentNode.src/M000034.html
87
+ - doc/classes/Classifier/LSI.src/M000011.html
88
+ - doc/classes/Classifier/LSI.src/M000012.html
89
+ - doc/classes/Classifier/LSI.src/M000013.html
90
+ - doc/classes/Classifier/LSI.src/M000014.html
91
+ - doc/classes/Classifier/LSI.src/M000015.html
92
+ - doc/classes/Classifier/LSI.src/M000016.html
93
+ - doc/classes/Classifier/LSI.src/M000017.html
94
+ - doc/classes/Classifier/LSI.src/M000018.html
95
+ - doc/classes/Classifier/LSI.src/M000019.html
96
+ - doc/classes/Classifier/LSI.src/M000020.html
97
+ - doc/classes/Classifier/LSI.src/M000021.html
98
+ - doc/classes/Classifier/LSI.src/M000022.html
99
+ - doc/classes/Classifier/WordList.src/M000007.html
100
+ - doc/classes/Classifier/WordList.src/M000008.html
101
+ - doc/classes/Classifier/WordList.src/M000009.html
102
+ - doc/classes/Classifier/WordList.src/M000010.html
103
+ - doc/classes/GSL/Vector.html
104
+ - doc/classes/GSL/Vector.src
105
+ - doc/classes/GSL/Vector.src/M000005.html
106
+ - doc/classes/GSL/Vector.src/M000006.html
107
+ - doc/classes/Object.src/M000001.html
108
+ - doc/classes/String.src/M000002.html
109
+ - doc/classes/String.src/M000003.html
110
+ - doc/classes/String.src/M000004.html
71
111
  - doc/files/lib
72
112
  - doc/files/README.html
73
113
  - doc/files/lib/classifier
74
114
  - doc/files/lib/classifier_rb.html
75
115
  - doc/files/lib/classifier/bayes_rb.html
76
- - doc/files/lib/classifier/string_extensions
116
+ - doc/files/lib/classifier/extensions
117
+ - doc/files/lib/classifier/lsi
118
+ - doc/files/lib/classifier/lsi_rb.html
77
119
  - doc/files/lib/classifier/string_extensions_rb.html
78
- - doc/files/lib/classifier/string_extensions/porter_stemmer_rb.html
79
- - doc/files/lib/classifier/string_extensions/word_hash_rb.html
120
+ - doc/files/lib/classifier/extensions/vector_serialize_rb.html
121
+ - doc/files/lib/classifier/extensions/word_hash_rb.html
122
+ - doc/files/lib/classifier/extensions/word_list_rb.html
123
+ - doc/files/lib/classifier/lsi/content_node_rb.html
80
124
  test_files: []
81
125
  rdoc_options: []
82
126
  extra_rdoc_files: []
83
127
  executables: []
84
128
  extensions: []
85
- requirements: []
86
- dependencies: []
129
+ requirements:
130
+ - A porter-stemmer module to split word stems.
131
+ dependencies:
132
+ - !ruby/object:Gem::Dependency
133
+ name: stemmer
134
+ version_requirement:
135
+ version_requirements: !ruby/object:Gem::Version::Requirement
136
+ requirements:
137
+ -
138
+ - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 1.0.0
141
+ version:
@@ -1,243 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
- <head>
8
- <title>Module: Classifier::Stemmable</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
- <script type="text/javascript">
13
- // <![CDATA[
14
-
15
- function popupCode( url ) {
16
- window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
- }
18
-
19
- function toggleCode( id ) {
20
- if ( document.getElementById )
21
- elem = document.getElementById( id );
22
- else if ( document.all )
23
- elem = eval( "document.all." + id );
24
- else
25
- return false;
26
-
27
- elemStyle = elem.style;
28
-
29
- if ( elemStyle.display != "block" ) {
30
- elemStyle.display = "block"
31
- } else {
32
- elemStyle.display = "none"
33
- }
34
-
35
- return true;
36
- }
37
-
38
- // Make codeblocks hidden by default
39
- document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
-
41
- // ]]>
42
- </script>
43
-
44
- </head>
45
- <body>
46
-
47
-
48
-
49
- <div id="classHeader">
50
- <table class="header-table">
51
- <tr class="top-aligned-row">
52
- <td><strong>Module</strong></td>
53
- <td class="class-name-in-header">Classifier::Stemmable</td>
54
- </tr>
55
- <tr class="top-aligned-row">
56
- <td><strong>In:</strong></td>
57
- <td>
58
- <a href="../../files/lib/classifier/string_extensions/porter_stemmer_rb.html">
59
- lib/classifier/string_extensions/porter_stemmer.rb
60
- </a>
61
- <br />
62
- </td>
63
- </tr>
64
-
65
- </table>
66
- </div>
67
- <!-- banner header -->
68
-
69
- <div id="bodyContent">
70
-
71
-
72
-
73
- <div id="contextContent">
74
-
75
- <div id="description">
76
- <p>
77
- Porter stemmer in Ruby.
78
- </p>
79
- <p>
80
- This is the Porter stemming algorithm, ported to Ruby from the version
81
- coded up in Perl. It&#8217;s easy to follow against the rules in the
82
- original paper in:
83
- </p>
84
- <pre>
85
- Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14,
86
- no. 3, pp 130-137,
87
- </pre>
88
- <p>
89
- See also <a
90
- href="http://www.tartarus.org/~martin/PorterStemmer">www.tartarus.org/~martin/PorterStemmer</a>
91
- </p>
92
- <p>
93
- Send comments to raypereda@hotmail.com
94
- </p>
95
-
96
- </div>
97
-
98
-
99
- </div>
100
-
101
- <div id="method-list">
102
- <h3 class="section-bar">Methods</h3>
103
-
104
- <div class="name-list">
105
- <a href="#M000004">stem</a>&nbsp;&nbsp;
106
- <a href="#M000003">stem_porter</a>&nbsp;&nbsp;
107
- </div>
108
- </div>
109
-
110
- </div>
111
-
112
-
113
- <!-- if includes -->
114
-
115
- <div id="section">
116
-
117
-
118
- <div id="constants-list">
119
- <h3 class="section-bar">Constants</h3>
120
-
121
- <div class="name-list">
122
- <table summary="Constants">
123
- <tr class="top-aligned-row context-row">
124
- <td class="context-item-name">STEP_2_LIST</td>
125
- <td>=</td>
126
- <td class="context-item-value">{
127
  'ational'=&gt;'ate', 'tional'=&gt;'tion', 'enci'=&gt;'ence', 'anci'=&gt;'ance',
128
1
  'izer'=&gt;'ize', 'bli'=&gt;'ble',
129
2
  'alli'=&gt;'al', 'entli'=&gt;'ent', 'eli'=&gt;'e', 'ousli'=&gt;'ous',
130
3
  'ization'=&gt;'ize', 'ation'=&gt;'ate',
131
4
  'ator'=&gt;'ate', 'alism'=&gt;'al', 'iveness'=&gt;'ive', 'fulness'=&gt;'ful',
132
5
  'ousness'=&gt;'ous', 'aliti'=&gt;'al',
133
6
  'iviti'=&gt;'ive', 'biliti'=&gt;'ble', 'logi'=&gt;'log'</td>
134
- </tr>
135
- <tr class="top-aligned-row context-row">
136
- <td class="context-item-name">STEP_3_LIST</td>
137
- <td>=</td>
138
- <td class="context-item-value">{
139
7
  'icate'=&gt;'ic', 'ative'=&gt;'', 'alize'=&gt;'al', 'iciti'=&gt;'ic',
140
8
  'ical'=&gt;'ic', 'ful'=&gt;'', 'ness'=&gt;''</td>
141
- </tr>
142
- <tr class="top-aligned-row context-row">
143
- <td class="context-item-name">SUFFIX_1_REGEXP</td>
144
- <td>=</td>
145
- <td class="context-item-value">/(
146
9
  ational |
147
10
  tional |
148
11
  enci |
149
12
  anci |
150
13
  izer |
151
14
  bli |
152
15
  alli |
153
16
  entli |
154
17
  eli |
155
18
  ousli |
156
19
  ization |
157
20
  ation |
158
21
  ator |
159
22
  alism |
160
23
  iveness |
161
24
  fulness |
162
25
  ousness |
163
26
  aliti |
164
27
  iviti |
165
28
  biliti |
166
29
  logi)$/x</td>
167
- </tr>
168
- <tr class="top-aligned-row context-row">
169
- <td class="context-item-name">SUFFIX_2_REGEXP</td>
170
- <td>=</td>
171
- <td class="context-item-value">/(
172
30
  al |
173
31
  ance |
174
32
  ence |
175
33
  er |
176
34
  ic |
177
35
  able |
178
36
  ible |
179
37
  ant |
180
38
  ement |
181
39
  ment |
182
40
  ent |
183
41
  ou |
184
42
  ism |
185
43
  ate |
186
44
  iti |
187
45
  ous |
188
46
  ive |
189
47
  ize)$/x</td>
190
- </tr>
191
- <tr class="top-aligned-row context-row">
192
- <td class="context-item-name">C</td>
193
- <td>=</td>
194
- <td class="context-item-value">&quot;[^aeiou]&quot;</td>
195
- </tr>
196
- <tr class="top-aligned-row context-row">
197
- <td class="context-item-name">V</td>
198
- <td>=</td>
199
- <td class="context-item-value">&quot;[aeiouy]&quot;</td>
200
- </tr>
201
- <tr class="top-aligned-row context-row">
202
- <td class="context-item-name">CC</td>
203
- <td>=</td>
204
- <td class="context-item-value">&quot;#{C}(?&gt;[^aeiouy]*)&quot;</td>
205
- </tr>
206
- <tr class="top-aligned-row context-row">
207
- <td class="context-item-name">VV</td>
208
- <td>=</td>
209
- <td class="context-item-value">&quot;#{V}(?&gt;[aeiou]*)&quot;</td>
210
- </tr>
211
- <tr class="top-aligned-row context-row">
212
- <td class="context-item-name">MGR0</td>
213
- <td>=</td>
214
- <td class="context-item-value">/^(#{CC})?#{VV}#{CC}/o</td>
215
- </tr>
216
- <tr class="top-aligned-row context-row">
217
- <td class="context-item-name">MEQ1</td>
218
- <td>=</td>
219
- <td class="context-item-value">/^(#{CC})?#{VV}#{CC}(#{VV})?$/o</td>
220
- </tr>
221
- <tr class="top-aligned-row context-row">
222
- <td class="context-item-name">MGR1</td>
223
- <td>=</td>
224
- <td class="context-item-value">/^(#{CC})?#{VV}#{CC}#{VV}#{CC}/o</td>
225
- </tr>
226
- <tr class="top-aligned-row context-row">
227
- <td class="context-item-name">VOWEL_IN_STEM</td>
228
- <td>=</td>
229
- <td class="context-item-value">/^(#{CC})?#{V}/o</td>
230
- </tr>
231
- </table>
232
- </div>
233
- </div>
234
-
235
-
236
-
237
-
238
-
239
-
240
- <!-- if method_list -->
241
- <div id="methods">
242
- <h3 class="section-bar">Public Instance methods</h3>
243
-
244
- <div id="method-M000004" class="method-detail">
245
- <a name="M000004"></a>
246
-
247
- <div class="method-heading">
248
- <span class="method-name">stem</span><span class="method-args">()</span>
249
- </div>
250
-
251
- <div class="method-description">
252
- <p>
253
- Alias for <a href="Stemmable.html#M000003">stem_porter</a>
254
- </p>
255
- </div>
256
- </div>
257
-
258
- <div id="method-M000003" class="method-detail">
259
- <a name="M000003"></a>
260
-
261
- <div class="method-heading">
262
- <a href="Stemmable.src/M000003.html" target="Code" class="method-signature"
263
- onclick="popupCode('Stemmable.src/M000003.html');return false;">
264
- <span class="method-name">stem_porter</span><span class="method-args">()</span>
265
- </a>
266
- </div>
267
-
268
- <div class="method-description">
269
- <p>
270
- Stems the word contained in the current object. E.g.,
271
- </p>
272
- <pre>
273
- &quot;actually&quot;.stem_porter
274
- =&gt; &quot;actual&quot;
275
- </pre>
276
- </div>
277
- </div>
278
-
279
-
280
- </div>
281
-
282
-
283
- </div>
284
-
285
-
286
- <div id="validator-badges">
287
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
288
- </div>
289
-
290
- </body>
291
- </html>