langue-japanese 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +6 -0
  3. data/LICENSE +22 -0
  4. data/README.md +53 -0
  5. data/Rakefile +2 -0
  6. data/langue-japanese.gemspec +22 -0
  7. data/lib/langue/japanese/language.rb +36 -0
  8. data/lib/langue/japanese/logging.rb +21 -0
  9. data/lib/langue/japanese/parser.rb +77 -0
  10. data/lib/langue/japanese/shaper.rb +70 -0
  11. data/lib/langue/japanese/structurer.rb +74 -0
  12. data/lib/langue/japanese/version.rb +5 -0
  13. data/lib/langue/japanese/words/adjective.rb +67 -0
  14. data/lib/langue/japanese/words/adjective_noun.rb +76 -0
  15. data/lib/langue/japanese/words/attribute.rb +100 -0
  16. data/lib/langue/japanese/words/classifier.rb +107 -0
  17. data/lib/langue/japanese/words/morpheme_filter.rb +26 -0
  18. data/lib/langue/japanese/words/noun.rb +61 -0
  19. data/lib/langue/japanese/words/period.rb +55 -0
  20. data/lib/langue/japanese/words/prefix.rb +19 -0
  21. data/lib/langue/japanese/words/pronoun.rb +16 -0
  22. data/lib/langue/japanese/words/verb.rb +100 -0
  23. data/lib/langue/japanese.rb +2 -0
  24. data/lib/langue-japanese.rb +1 -0
  25. data/spec/langue/japanese/data.yaml +169 -0
  26. data/spec/langue/japanese/language_spec.rb +120 -0
  27. data/spec/langue/japanese/parser_spec.rb +147 -0
  28. data/spec/langue/japanese/shaper_spec.rb +34 -0
  29. data/spec/langue/japanese/structurer_spec.rb +116 -0
  30. data/spec/langue/japanese/words/adjective_noun_spec.rb +76 -0
  31. data/spec/langue/japanese/words/adjective_spec.rb +123 -0
  32. data/spec/langue/japanese/words/noun_spec.rb +79 -0
  33. data/spec/langue/japanese/words/period_spec.rb +69 -0
  34. data/spec/langue/japanese/words/pronoun_spec.rb +24 -0
  35. data/spec/langue/japanese/words/verb_spec.rb +242 -0
  36. data/spec/langue/japanese_spec.rb +7 -0
  37. data/spec/spec_helper.rb +75 -0
  38. metadata +131 -0
@@ -0,0 +1,242 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require 'langue/japanese/words/verb'
4
+
5
+ describe Langue::Japanese::Verb, '.take' do
6
+ after do
7
+ @pairs.each do |text, size|
8
+ morphemes = parser.parse(text)
9
+ described_class.take(morphemes, 0).should == size
10
+ end
11
+ end
12
+
13
+ it 'takes a verb' do
14
+ @pairs = {
15
+ '話すこと' => 1,
16
+ '喋ること' => 1,
17
+ '会話だ' => 0,
18
+ 'かわいいこと' => 0
19
+ }
20
+ end
21
+
22
+ it 'takes a verb with prefix' do
23
+ @pairs = {
24
+ 'ぶっ話すこと' => 2,
25
+ 'ぶっぶち話すこと' => 3,
26
+ 'ぶっ会話だ' => 0,
27
+ 'ぶっかわいいこと' => 0
28
+ }
29
+ end
30
+
31
+ it 'takes a noun conjunct to suru-verb as a verb' do
32
+ @pairs = {
33
+ '会話すること' => 2,
34
+ '連絡すること' => 2,
35
+ '会話だ' => 0,
36
+ 'すること' => 0
37
+ }
38
+ end
39
+
40
+ it 'takes a noun conjunct to suru-verb with prefix as a verb' do
41
+ @pairs = {
42
+ 'ご連絡すること' => 3,
43
+ '超反連絡すること' => 4,
44
+ 'ご連絡だ' => 0,
45
+ '反超すること' => 0
46
+ }
47
+ end
48
+
49
+ it 'takes a verb with suffix' do
50
+ @pairs = {
51
+ '話されること' => 2,
52
+ 'ぶっ放されること' => 3,
53
+ '会話されること' => 3,
54
+ 'ご連絡されること' => 4
55
+ }
56
+ end
57
+
58
+ it 'takes a successive verb' do
59
+ @pairs = {
60
+ '話し続けること' => 2,
61
+ 'ぶっ話し続けること' => 3,
62
+ '会話し続けること' => 3,
63
+ 'ご連絡し続けること' => 4
64
+ }
65
+ end
66
+
67
+ it 'takes a progressive verb' do
68
+ @pairs = {
69
+ '話していること' => 3,
70
+ '話してること' => 2,
71
+ 'ぶっ話していること' => 4,
72
+ 'ぶっ話してること' => 3,
73
+ '会話していること' => 4,
74
+ '会話してること' => 3,
75
+ 'ご連絡していること' => 5,
76
+ 'ご連絡してること' => 4
77
+ }
78
+ end
79
+
80
+ it 'takes a negative verb' do
81
+ @pairs = {
82
+ '話さないこと' => 2,
83
+ 'ぶっ話さないこと' => 3,
84
+ '会話しないこと' => 3,
85
+ 'ご連絡しないこと' => 4
86
+ }
87
+ end
88
+
89
+ it 'takes an aggressive verb' do
90
+ @pairs = {
91
+ '話したいこと' => 2,
92
+ 'ぶっ話したいこと' => 3,
93
+ '会話したいこと' => 3,
94
+ 'ご連絡したいこと' => 4
95
+ }
96
+ end
97
+
98
+ it 'takes a perfective verb' do
99
+ @pairs = {
100
+ '話したこと' => 2,
101
+ 'ぶっ話したこと' => 3,
102
+ '会話したこと' => 3,
103
+ 'ご連絡したこと' => 4
104
+ }
105
+ end
106
+
107
+ it 'takes a complex verb' do
108
+ @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
120
+ }
121
+ end
122
+
123
+ it 'does not take special verbs' do
124
+ @pairs = {
125
+ 'しましょう' => 0,
126
+ 'ぶっしましょう' => 0,
127
+ 'なるでしょう' => 0,
128
+ 'ぶちなること' => 0,
129
+ '思い続けていること' => 0,
130
+ 'ぶっ思います' => 0,
131
+ 'おもわれたいこと' => 0,
132
+ 'ぶちおもわない' => 0
133
+ }
134
+ end
135
+ end
136
+
137
+ describe Langue::Japanese::Verb, '#key_morpheme' do
138
+ it 'returns the categorematic verb or the noncategorematic verb' do
139
+ {
140
+ '話す' => 0,
141
+ '話し続けている' => 1,
142
+ '話される' => 0,
143
+ '話してる' => 0,
144
+ '話している' => 0,
145
+ '話しとる' => 0,
146
+ '話しちゃう' => 0
147
+ }.each do |text, index|
148
+ word = verb(text)
149
+ word.key_morpheme.should == word[index]
150
+ end
151
+ end
152
+
153
+ context 'with an empty word' do
154
+ it 'returns nil' do
155
+ word = described_class.new
156
+ word.key_morpheme.should be_nil
157
+ end
158
+ end
159
+ end
160
+
161
+ describe Langue::Japanese::Verb, '#prefix' do
162
+ it 'returns the prefix' do
163
+ verb('ぶっぶち話さない').prefix.should == 'ぶっぶち'
164
+ verb('超ご連絡しない').prefix.should == '超ご'
165
+ end
166
+ end
167
+
168
+ 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 == '連絡する'
172
+ end
173
+ end
174
+
175
+ describe Langue::Japanese::Verb, '#progressive?' do
176
+ it 'returns true if it is progressive' do
177
+ verb('話している').should be_progressive
178
+ verb('話してる').should be_progressive
179
+ verb('話しとる').should be_progressive
180
+ verb('富んでいる').should be_progressive
181
+ verb('富んでる').should be_progressive
182
+ verb('富んどる').should be_progressive
183
+ end
184
+
185
+ it 'returns false if it is not progressive' do
186
+ verb('話されたくなかった').should_not be_progressive
187
+ end
188
+ end
189
+
190
+ describe Langue::Japanese::Verb, '#passive?' do
191
+ it 'returns true if it is passive' do
192
+ verb('話される').should be_passive
193
+ verb('富んでられる').should be_passive
194
+ end
195
+
196
+ it 'returns false if it is not passive' do
197
+ verb('話していたくなかった').should_not be_passive
198
+ end
199
+ end
200
+
201
+ describe Langue::Japanese::Verb, '#aggressive?' do
202
+ it 'returns true if it is aggressive' do
203
+ verb('話したい').should be_aggressive
204
+ end
205
+
206
+ it 'returns false if it is not aggressive' do
207
+ verb('話されていなかった').should_not be_aggressive
208
+ end
209
+ end
210
+
211
+ describe Langue::Japanese::Verb, '#negative?' do
212
+ it 'returns true if it is negative' do
213
+ verb('話さない').should be_negative
214
+ verb('話さぬ').should be_negative
215
+ end
216
+
217
+ it 'returns false if it is not negative' do
218
+ verb('話されていたかった').should_not be_negative
219
+ end
220
+ end
221
+
222
+ describe Langue::Japanese::Verb, '#perfective?' do
223
+ it 'returns true if it is perfective' do
224
+ verb('話した').should be_perfective
225
+ verb('去りぬ').should be_perfective
226
+ end
227
+
228
+ it 'returns false if it is not perfective' do
229
+ verb('話されていたくない').should_not be_perfective
230
+ end
231
+ end
232
+
233
+ describe Langue::Japanese::Verb, '#imperative?' do
234
+ it 'returns true if it is imperative' do
235
+ verb('話せ').should be_imperative
236
+ verb('話してください').should be_imperative
237
+ end
238
+
239
+ it 'returns false if it is not imperative' do
240
+ verb('話されていたくなかった').should_not be_imperative
241
+ end
242
+ end
@@ -0,0 +1,7 @@
1
+ require 'langue/japanese'
2
+
3
+ describe Langue::Japanese do
4
+ it 'has VERSION constant' do
5
+ described_class.should be_const_defined(:VERSION)
6
+ end
7
+ end
@@ -0,0 +1,75 @@
1
+ def operator_stub(file_name, class_name)
2
+ stub.tap do |s|
3
+ require "langue/japanese/#{file_name}" unless Langue::Japanese.const_defined?(class_name)
4
+ Langue::Japanese.const_get(class_name).stub!(:new).and_return(s)
5
+ yield s
6
+ end
7
+ end
8
+
9
+ def parser_stub
10
+ operator_stub('parser', :Parser) do |s|
11
+ s.stub!(:parse).and_return('value returning from parse method')
12
+ yield s if block_given?
13
+ end
14
+ end
15
+
16
+ def shaper_stub
17
+ operator_stub('shaper', :Shaper) do |s|
18
+ s.stub!(:shape_person_name).and_return('value returning from shape_person_name method')
19
+ yield s if block_given?
20
+ end
21
+ end
22
+
23
+ def structurer_stub
24
+ operator_stub('structurer', :Structurer) do |s|
25
+ s.stub!(:structure).and_return('value returning from structure method')
26
+ yield s if block_given?
27
+ end
28
+ end
29
+
30
+ def tagger_stub(nodes = nil)
31
+ stub.tap do |s|
32
+ MeCab::Tagger.stub!(:new).and_return(s)
33
+
34
+ if nodes
35
+ node = make_node('')
36
+ nodes.times { |i| node = make_node(nodes - i, node) }
37
+ s.stub!(:parseToNode).and_return(make_node('', node))
38
+ end
39
+
40
+ yield s if block_given?
41
+ end
42
+ end
43
+
44
+ def make_node(surface, next_node = nil)
45
+ stub.tap do |s|
46
+ s.stub!(:surface).and_return(surface.to_s)
47
+ s.stub!(:feature).and_return('part_of_speech,category1,*,*,*,*,*,*')
48
+ s.stub!(:next).and_return(next_node)
49
+ end
50
+ end
51
+
52
+ def parser
53
+ require 'langue/japanese/parser' unless defined? Langue::Japanese::Parser
54
+ Langue::Japanese::Parser.new
55
+ end
56
+
57
+ def adjective(text)
58
+ morphemes = parser.parse(text)
59
+ Langue::Japanese::Adjective.new(morphemes)
60
+ end
61
+
62
+ def adjective_noun(text)
63
+ morphemes = parser.parse(text)
64
+ Langue::Japanese::AdjectiveNoun.new(morphemes)
65
+ end
66
+
67
+ def verb(text)
68
+ morphemes = parser.parse(text)
69
+ Langue::Japanese::Verb.new(morphemes)
70
+ end
71
+
72
+ def period(text)
73
+ morphemes = parser.parse(text)
74
+ Langue::Japanese::Period.new(morphemes)
75
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: langue-japanese
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Takahiro Kondo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: langue
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: activesupport
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: It provides the operations to Japanese.
63
+ email:
64
+ - kondo@atedesign.net
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - .gitignore
70
+ - Gemfile
71
+ - LICENSE
72
+ - README.md
73
+ - Rakefile
74
+ - langue-japanese.gemspec
75
+ - lib/langue-japanese.rb
76
+ - lib/langue/japanese.rb
77
+ - lib/langue/japanese/language.rb
78
+ - lib/langue/japanese/logging.rb
79
+ - lib/langue/japanese/parser.rb
80
+ - lib/langue/japanese/shaper.rb
81
+ - lib/langue/japanese/structurer.rb
82
+ - lib/langue/japanese/version.rb
83
+ - lib/langue/japanese/words/adjective.rb
84
+ - lib/langue/japanese/words/adjective_noun.rb
85
+ - lib/langue/japanese/words/attribute.rb
86
+ - lib/langue/japanese/words/classifier.rb
87
+ - lib/langue/japanese/words/morpheme_filter.rb
88
+ - lib/langue/japanese/words/noun.rb
89
+ - lib/langue/japanese/words/period.rb
90
+ - lib/langue/japanese/words/prefix.rb
91
+ - lib/langue/japanese/words/pronoun.rb
92
+ - lib/langue/japanese/words/verb.rb
93
+ - spec/langue/japanese/data.yaml
94
+ - spec/langue/japanese/language_spec.rb
95
+ - spec/langue/japanese/parser_spec.rb
96
+ - spec/langue/japanese/shaper_spec.rb
97
+ - spec/langue/japanese/structurer_spec.rb
98
+ - spec/langue/japanese/words/adjective_noun_spec.rb
99
+ - spec/langue/japanese/words/adjective_spec.rb
100
+ - spec/langue/japanese/words/noun_spec.rb
101
+ - spec/langue/japanese/words/period_spec.rb
102
+ - spec/langue/japanese/words/pronoun_spec.rb
103
+ - spec/langue/japanese/words/verb_spec.rb
104
+ - spec/langue/japanese_spec.rb
105
+ - spec/spec_helper.rb
106
+ homepage: ''
107
+ licenses: []
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ requirements: []
125
+ rubyforge_project:
126
+ rubygems_version: 1.8.21
127
+ signing_key:
128
+ specification_version: 3
129
+ summary: The foundation for Japanese
130
+ test_files: []
131
+ has_rdoc: