langue-japanese 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/Gemfile +1 -0
  2. data/lib/langue/japanese/inflector.rb +44 -0
  3. data/lib/langue/japanese/inflector/default.rb +454 -0
  4. data/lib/langue/japanese/inflector/inflection.rb +59 -0
  5. data/lib/langue/japanese/inflector/inflections.rb +56 -0
  6. data/lib/langue/japanese/language.rb +9 -0
  7. data/lib/langue/japanese/parser.rb +24 -7
  8. data/lib/langue/japanese/shaper.rb +2 -2
  9. data/lib/langue/japanese/structurer.rb +6 -1
  10. data/lib/langue/japanese/version.rb +1 -1
  11. data/lib/langue/japanese/words/adjectival_noun.rb +67 -0
  12. data/lib/langue/japanese/words/adjective.rb +37 -33
  13. data/lib/langue/japanese/words/adverb.rb +24 -0
  14. data/lib/langue/japanese/words/attribute.rb +52 -28
  15. data/lib/langue/japanese/words/classifier.rb +37 -5
  16. data/lib/langue/japanese/words/conjunction.rb +18 -0
  17. data/lib/langue/japanese/words/determiner.rb +24 -0
  18. data/lib/langue/japanese/words/interjection.rb +18 -0
  19. data/lib/langue/japanese/words/morpheme_filter.rb +40 -17
  20. data/lib/langue/japanese/words/noun.rb +50 -43
  21. data/lib/langue/japanese/words/particle.rb +24 -0
  22. data/lib/langue/japanese/words/period.rb +26 -26
  23. data/lib/langue/japanese/words/prefix.rb +13 -5
  24. data/lib/langue/japanese/words/pronoun.rb +5 -7
  25. data/lib/langue/japanese/words/verb.rb +59 -64
  26. data/spec/langue/japanese/data.yaml +53 -5
  27. data/spec/langue/japanese/inflector/inflection_spec.rb +80 -0
  28. data/spec/langue/japanese/inflector/inflections_spec.rb +83 -0
  29. data/spec/langue/japanese/inflector_spec.rb +1551 -0
  30. data/spec/langue/japanese/language_spec.rb +36 -0
  31. data/spec/langue/japanese/parser_spec.rb +100 -28
  32. data/spec/langue/japanese/structurer_spec.rb +8 -2
  33. data/spec/langue/japanese/words/{adjective_noun_spec.rb → adjectival_noun_spec.rb} +18 -12
  34. data/spec/langue/japanese/words/adjective_spec.rb +15 -0
  35. data/spec/langue/japanese/words/adverb_spec.rb +25 -0
  36. data/spec/langue/japanese/words/conjunction_spec.rb +25 -0
  37. data/spec/langue/japanese/words/determiner_spec.rb +25 -0
  38. data/spec/langue/japanese/words/interjection_spec.rb +25 -0
  39. data/spec/langue/japanese/words/noun_spec.rb +19 -0
  40. data/spec/langue/japanese/words/particle_spec.rb +26 -0
  41. data/spec/langue/japanese/words/period_spec.rb +6 -0
  42. data/spec/langue/japanese/words/pronoun_spec.rb +6 -0
  43. data/spec/langue/japanese/words/verb_spec.rb +79 -48
  44. data/spec/spec_helper.rb +23 -3
  45. metadata +22 -5
  46. data/lib/langue/japanese/words/adjective_noun.rb +0 -76
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require 'langue/japanese/words/interjection'
4
+
5
+ describe Langue::Japanese::Interjection do
6
+ it 'inherits Langue::Interjection' do
7
+ described_class.superclass.should == Langue::Interjection
8
+ end
9
+ end
10
+
11
+ describe Langue::Japanese::Interjection, '.take' do
12
+ after do
13
+ @pairs.each do |text, size|
14
+ morphemes = parser.parse(text)
15
+ described_class.take(morphemes, 0).should == size
16
+ end
17
+ end
18
+
19
+ it 'takes a interjection' do
20
+ @pairs = {
21
+ 'おはよう' => 1,
22
+ 'おはようごきげんよう' => 1
23
+ }
24
+ end
25
+ end
@@ -2,6 +2,12 @@
2
2
  require 'spec_helper'
3
3
  require 'langue/japanese/words/noun'
4
4
 
5
+ describe Langue::Japanese::Noun do
6
+ it 'inherits Langue::Noun' do
7
+ described_class.superclass.should == Langue::Noun
8
+ end
9
+ end
10
+
5
11
  describe Langue::Japanese::Noun, '.take' do
6
12
  after do
7
13
  @pairs.each do |text, size|
@@ -77,3 +83,16 @@ describe Langue::Japanese::Noun, '.take' do
77
83
  }
78
84
  end
79
85
  end
86
+
87
+ describe Langue::Japanese::Noun, '#prefix' do
88
+ it 'returns the prefix' do
89
+ noun('超反会話').prefix.should == '超反'
90
+ end
91
+ end
92
+
93
+ describe Langue::Japanese::Noun, '#body' do
94
+ it 'returns the text with the prefix' do
95
+ noun('超反会話').body.should == '会話'
96
+ noun('超反会話♡').body.should == '会話♡'
97
+ end
98
+ end
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require 'langue/japanese/words/particle'
4
+
5
+ describe Langue::Japanese::Particle do
6
+ it 'inherits Langue::Particle' do
7
+ described_class.superclass.should == Langue::Particle
8
+ end
9
+ end
10
+
11
+ describe Langue::Japanese::Particle, '.take' do
12
+ after do
13
+ @pairs.each do |text, size|
14
+ morphemes = parser.parse(text)
15
+ described_class.take(morphemes, 0).should == size
16
+ end
17
+ end
18
+
19
+ it 'takes a particle' do
20
+ @pairs = {
21
+ 'は' => 1,
22
+ 'とは' => 2,
23
+ 'て' => 0
24
+ }
25
+ end
26
+ end
@@ -2,6 +2,12 @@
2
2
  require 'spec_helper'
3
3
  require 'langue/japanese/words/period'
4
4
 
5
+ describe Langue::Japanese::Period do
6
+ it 'inherits Langue::Period' do
7
+ described_class.superclass.should == Langue::Period
8
+ end
9
+ end
10
+
5
11
  describe Langue::Japanese::Period, '.take' do
6
12
  after do
7
13
  @pairs.each do |text, size|
@@ -2,6 +2,12 @@
2
2
  require 'spec_helper'
3
3
  require 'langue/japanese/words/pronoun'
4
4
 
5
+ describe Langue::Japanese::Pronoun do
6
+ it 'inherits Langue::Pronoun' do
7
+ described_class.superclass.should == Langue::Pronoun
8
+ end
9
+ end
10
+
5
11
  describe Langue::Japanese::Pronoun, '.take' do
6
12
  after do
7
13
  @pairs.each do |text, size|
@@ -2,6 +2,12 @@
2
2
  require 'spec_helper'
3
3
  require 'langue/japanese/words/verb'
4
4
 
5
+ describe Langue::Japanese::Verb do
6
+ it 'inherits Langue::Verb' do
7
+ described_class.superclass.should == Langue::Verb
8
+ end
9
+ end
10
+
5
11
  describe Langue::Japanese::Verb, '.take' do
6
12
  after do
7
13
  @pairs.each do |text, size|
@@ -32,8 +38,7 @@ describe Langue::Japanese::Verb, '.take' do
32
38
  @pairs = {
33
39
  '会話すること' => 2,
34
40
  '連絡すること' => 2,
35
- '会話だ' => 0,
36
- 'すること' => 0
41
+ '会話だ' => 0
37
42
  }
38
43
  end
39
44
 
@@ -51,81 +56,69 @@ describe Langue::Japanese::Verb, '.take' do
51
56
  '話されること' => 2,
52
57
  'ぶっ放されること' => 3,
53
58
  '会話されること' => 3,
54
- 'ご連絡されること' => 4
59
+ 'ご連絡されること' => 4,
60
+ '聞かせること' => 2,
61
+ 'ぶっ聞かせること' => 3
55
62
  }
56
63
  end
57
64
 
58
- it 'takes a successive verb' do
65
+ it 'takes a verb with noncategorematic verb' do
59
66
  @pairs = {
60
67
  '話し続けること' => 2,
61
68
  'ぶっ話し続けること' => 3,
62
69
  '会話し続けること' => 3,
63
- 'ご連絡し続けること' => 4
70
+ 'ご連絡し続けること' => 4,
71
+ 'いる' => 0
64
72
  }
65
73
  end
66
74
 
67
- it 'takes a progressive verb' do
75
+ it 'takes a verb with conjunctive particle' do
68
76
  @pairs = {
69
77
  '話していること' => 3,
70
- '話してること' => 2,
71
78
  'ぶっ話していること' => 4,
72
- 'ぶっ話してること' => 3,
73
79
  '会話していること' => 4,
74
- '会話してること' => 3,
75
80
  'ご連絡していること' => 5,
76
- 'ご連絡してること' => 4
77
- }
78
- end
79
-
80
- it 'takes a negative verb' do
81
- @pairs = {
82
- '話さないこと' => 2,
83
- 'ぶっ話さないこと' => 3,
84
- '会話しないこと' => 3,
85
- 'ご連絡しないこと' => 4
81
+ '遊んで!' => 2,
82
+ '話さなかったってさ' => 4,
83
+ '話して欲しいこと' => 2,
84
+ '話しこそすれ' => 1
86
85
  }
87
86
  end
88
87
 
89
- it 'takes an aggressive verb' do
88
+ it 'takes a verb with auxiliary verb' do
90
89
  @pairs = {
91
- '話したいこと' => 2,
92
- 'ぶっ話したいこと' => 3,
93
- '会話したいこと' => 3,
94
- 'ご連絡したいこと' => 4
90
+ '話したいこと' => 2,
91
+ '話したこと' => 2,
92
+ '話さないこと' => 2,
93
+ '話さんこと' => 2,
94
+ '話します' => 2,
95
+ '話しません' => 3,
96
+ '話すでしょう' => 3,
97
+ '話しちゃう' => 2
95
98
  }
96
99
  end
97
100
 
98
- it 'takes a perfective verb' do
101
+ it 'takes a verb with final particle' do
99
102
  @pairs = {
100
- '話したこと' => 2,
101
- 'ぶっ話したこと' => 3,
102
- '会話したこと' => 3,
103
- 'ご連絡したこと' => 4
103
+ '話すな!' => 2,
104
+ '話すか?' => 2,
105
+ '話すかしら?' => 2,
106
+ '話すよ!' => 2
104
107
  }
105
108
  end
106
109
 
107
110
  it 'takes a complex verb' do
108
111
  @pairs = {
109
- '話し続けていたくなかったこと' => 7,
110
- 'ぶっ話し続けていたくなかったこと' => 8,
111
- '会話し続けていたくなかったこと' => 8,
112
- 'ご連絡し続けていたくなかったこと' => 9
113
- }
114
- end
115
-
116
- it 'takes a verb by other' do
117
- @pairs = {
118
- '話しましょう' => 3,
119
- '話さぬこと' => 2
112
+ '話し続けていたくなかったこと' => 7,
113
+ 'ぶっ話し続けていたくなかったこと' => 8,
114
+ '会話し続けていたくなかったこと' => 8,
115
+ 'ご連絡し続けていたくなかったこと' => 9,
116
+ 'ご連絡し続けていたくなかったか?' => 10
120
117
  }
121
118
  end
122
119
 
123
120
  it 'does not take special verbs' do
124
121
  @pairs = {
125
- 'しましょう' => 0,
126
- 'ぶっしましょう' => 0,
127
- 'なるでしょう' => 0,
128
- 'ぶちなること' => 0,
129
122
  '思い続けていること' => 0,
130
123
  'ぶっ思います' => 0,
131
124
  'おもわれたいこと' => 0,
@@ -140,10 +133,12 @@ describe Langue::Japanese::Verb, '#key_morpheme' do
140
133
  '話す' => 0,
141
134
  '話し続けている' => 1,
142
135
  '話される' => 0,
136
+ '話して' => 0,
143
137
  '話してる' => 0,
144
138
  '話している' => 0,
145
139
  '話しとる' => 0,
146
- '話しちゃう' => 0
140
+ '話しちゃう' => 0,
141
+ '話したって' => 0
147
142
  }.each do |text, index|
148
143
  word = verb(text)
149
144
  word.key_morpheme.should == word[index]
@@ -166,9 +161,23 @@ describe Langue::Japanese::Verb, '#prefix' do
166
161
  end
167
162
 
168
163
  describe Langue::Japanese::Verb, '#body' do
169
- it 'returns the text without the prefix and the attribute' do
170
- verb('ぶっぶち話さない').body.should == '話す'
171
- verb('超ご連絡しない').body.should == '連絡する'
164
+ it 'returns the text without the attributes' do
165
+ verb('話したくなかった').body.should == '話す'
166
+ verb('連絡したくなかった').body.should == '連絡する'
167
+ end
168
+
169
+ it 'returns the text without the prefix' do
170
+ verb('ぶっぶち話す').body.should == '話す'
171
+ verb('超ご連絡する').body.should == '連絡する'
172
+ end
173
+
174
+ it 'returns the text without the progressive verb' do
175
+ verb('話している').body.should == '話す'
176
+ verb('話してる').body.should == '話す'
177
+ end
178
+
179
+ it 'returns the text without the ra verb' do
180
+ verb('話してください').body.should == '話す'
172
181
  end
173
182
  end
174
183
 
@@ -184,6 +193,8 @@ describe Langue::Japanese::Verb, '#progressive?' do
184
193
 
185
194
  it 'returns false if it is not progressive' do
186
195
  verb('話されたくなかった').should_not be_progressive
196
+ verb('話しちゃう').should_not be_progressive
197
+ verb('富んじゃう').should_not be_progressive
187
198
  end
188
199
  end
189
200
 
@@ -198,6 +209,17 @@ describe Langue::Japanese::Verb, '#passive?' do
198
209
  end
199
210
  end
200
211
 
212
+ describe Langue::Japanese::Verb, '#causative?' do
213
+ it 'returns true if it is causative' do
214
+ verb('聞かせる').should be_causative
215
+ verb('続けさせる').should be_causative
216
+ end
217
+
218
+ it 'returns false if it is not causative' do
219
+ verb('聞かれていたくなかった').should_not be_causative
220
+ end
221
+ end
222
+
201
223
  describe Langue::Japanese::Verb, '#aggressive?' do
202
224
  it 'returns true if it is aggressive' do
203
225
  verb('話したい').should be_aggressive
@@ -212,10 +234,14 @@ describe Langue::Japanese::Verb, '#negative?' do
212
234
  it 'returns true if it is negative' do
213
235
  verb('話さない').should be_negative
214
236
  verb('話さぬ').should be_negative
237
+ verb('話しません').should be_negative
238
+ verb('話すな').should be_negative
215
239
  end
216
240
 
217
241
  it 'returns false if it is not negative' do
218
242
  verb('話されていたかった').should_not be_negative
243
+ verb('話したな').should_not be_negative
244
+ verb('話さなくない').should_not be_negative
219
245
  end
220
246
  end
221
247
 
@@ -233,10 +259,15 @@ end
233
259
  describe Langue::Japanese::Verb, '#imperative?' do
234
260
  it 'returns true if it is imperative' do
235
261
  verb('話せ').should be_imperative
262
+ verb('寝ろよ').should be_imperative
236
263
  verb('話してください').should be_imperative
264
+ verb('話して').should be_imperative
265
+ verb('話してよ').should be_imperative
266
+ verb('話すな').should be_imperative
237
267
  end
238
268
 
239
269
  it 'returns false if it is not imperative' do
240
270
  verb('話されていたくなかった').should_not be_imperative
271
+ verb('話したな').should_not be_imperative
241
272
  end
242
273
  end
data/spec/spec_helper.rb CHANGED
@@ -27,7 +27,14 @@ def structurer_stub
27
27
  end
28
28
  end
29
29
 
30
- def tagger_stub(nodes = nil)
30
+ def inflector_stub
31
+ operator_stub('inflector', :Inflector) do |s|
32
+ s.stub!(:inflect).and_return('value returning from #inflect')
33
+ yield s if block_given?
34
+ end
35
+ end
36
+
37
+ def parser_tagger_stub(nodes = nil)
31
38
  stub.tap do |s|
32
39
  MeCab::Tagger.stub!(:new).and_return(s)
33
40
 
@@ -41,6 +48,14 @@ def tagger_stub(nodes = nil)
41
48
  end
42
49
  end
43
50
 
51
+ def parser_model_stub(parser_tagger = nil)
52
+ stub.tap do |s|
53
+ MeCab::Model.stub!(:create).and_return(s)
54
+ s.stub!(:createTagger).and_return(parser_tagger || parser_tagger_stub)
55
+ yield s if block_given?
56
+ end
57
+ end
58
+
44
59
  def make_node(surface, next_node = nil)
45
60
  stub.tap do |s|
46
61
  s.stub!(:surface).and_return(surface.to_s)
@@ -54,14 +69,19 @@ def parser
54
69
  Langue::Japanese::Parser.new
55
70
  end
56
71
 
72
+ def noun(text)
73
+ morphemes = parser.parse(text)
74
+ Langue::Japanese::Noun.new(morphemes)
75
+ end
76
+
57
77
  def adjective(text)
58
78
  morphemes = parser.parse(text)
59
79
  Langue::Japanese::Adjective.new(morphemes)
60
80
  end
61
81
 
62
- def adjective_noun(text)
82
+ def adjectival_noun(text)
63
83
  morphemes = parser.parse(text)
64
- Langue::Japanese::AdjectiveNoun.new(morphemes)
84
+ Langue::Japanese::AdjectivalNoun.new(morphemes)
65
85
  end
66
86
 
67
87
  def verb(text)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: langue-japanese
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-13 00:00:00.000000000 Z
12
+ date: 2012-09-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: langue
@@ -74,30 +74,47 @@ files:
74
74
  - langue-japanese.gemspec
75
75
  - lib/langue-japanese.rb
76
76
  - lib/langue/japanese.rb
77
+ - lib/langue/japanese/inflector.rb
78
+ - lib/langue/japanese/inflector/default.rb
79
+ - lib/langue/japanese/inflector/inflection.rb
80
+ - lib/langue/japanese/inflector/inflections.rb
77
81
  - lib/langue/japanese/language.rb
78
82
  - lib/langue/japanese/logging.rb
79
83
  - lib/langue/japanese/parser.rb
80
84
  - lib/langue/japanese/shaper.rb
81
85
  - lib/langue/japanese/structurer.rb
82
86
  - lib/langue/japanese/version.rb
87
+ - lib/langue/japanese/words/adjectival_noun.rb
83
88
  - lib/langue/japanese/words/adjective.rb
84
- - lib/langue/japanese/words/adjective_noun.rb
89
+ - lib/langue/japanese/words/adverb.rb
85
90
  - lib/langue/japanese/words/attribute.rb
86
91
  - lib/langue/japanese/words/classifier.rb
92
+ - lib/langue/japanese/words/conjunction.rb
93
+ - lib/langue/japanese/words/determiner.rb
94
+ - lib/langue/japanese/words/interjection.rb
87
95
  - lib/langue/japanese/words/morpheme_filter.rb
88
96
  - lib/langue/japanese/words/noun.rb
97
+ - lib/langue/japanese/words/particle.rb
89
98
  - lib/langue/japanese/words/period.rb
90
99
  - lib/langue/japanese/words/prefix.rb
91
100
  - lib/langue/japanese/words/pronoun.rb
92
101
  - lib/langue/japanese/words/verb.rb
93
102
  - spec/langue/japanese/data.yaml
103
+ - spec/langue/japanese/inflector/inflection_spec.rb
104
+ - spec/langue/japanese/inflector/inflections_spec.rb
105
+ - spec/langue/japanese/inflector_spec.rb
94
106
  - spec/langue/japanese/language_spec.rb
95
107
  - spec/langue/japanese/parser_spec.rb
96
108
  - spec/langue/japanese/shaper_spec.rb
97
109
  - spec/langue/japanese/structurer_spec.rb
98
- - spec/langue/japanese/words/adjective_noun_spec.rb
110
+ - spec/langue/japanese/words/adjectival_noun_spec.rb
99
111
  - spec/langue/japanese/words/adjective_spec.rb
112
+ - spec/langue/japanese/words/adverb_spec.rb
113
+ - spec/langue/japanese/words/conjunction_spec.rb
114
+ - spec/langue/japanese/words/determiner_spec.rb
115
+ - spec/langue/japanese/words/interjection_spec.rb
100
116
  - spec/langue/japanese/words/noun_spec.rb
117
+ - spec/langue/japanese/words/particle_spec.rb
101
118
  - spec/langue/japanese/words/period_spec.rb
102
119
  - spec/langue/japanese/words/pronoun_spec.rb
103
120
  - spec/langue/japanese/words/verb_spec.rb
@@ -123,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
140
  version: '0'
124
141
  requirements: []
125
142
  rubyforge_project:
126
- rubygems_version: 1.8.21
143
+ rubygems_version: 1.8.24
127
144
  signing_key:
128
145
  specification_version: 3
129
146
  summary: The foundation for Japanese