mecab-light 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/README.md +5 -5
- data/ext/mecab/light/binding.c +20 -23
- data/ext/mecab/light/extconf.rb +7 -0
- data/lib/mecab/light/result.rb +3 -2
- data/lib/mecab/light/tagger.rb +3 -3
- data/lib/mecab/light/version.rb +1 -1
- data/spec/mecab-light-morpheme_spec.rb +30 -0
- data/spec/mecab-light-result_spec.rb +62 -0
- data/spec/mecab-light-tagger_spec.rb +57 -0
- data/spec/spec_helper.rb +8 -0
- metadata +12 -5
- data/spec/mecab_spec.rb +0 -110
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c610ca8725dff12d78f4c8e57aed3a669cb4dfd9
|
4
|
+
data.tar.gz: 2c7400b6c7355e26bf1cf0c11f9dbd9a98401330
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68e644215d1733e15152650d68923532d20e6cfeae91f0150f1e8b9c9b56503ce42cfc090c9d5cc4f6db26ce971784117d081937d2c61507b8d80c93e9ccaa6d
|
7
|
+
data.tar.gz: df72e4d97b55674761e303e218d8087bf470e9d730be9017eaef8a059bff3a53fbb5c85938f00bc00e79099b6a03e8fb4bac028fafaddc9a408cc5dd4de27cf2
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -18,10 +18,10 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
This supports only
|
24
|
-
|
21
|
+
MeCab::Light is a lightweight tool.
|
22
|
+
This gem works without the official binding.
|
23
|
+
This supports only Tagger#parse method for now.
|
24
|
+
Note that the method's feature is totally different from its original.
|
25
25
|
|
26
26
|
```ruby
|
27
27
|
require 'mecab/light'
|
@@ -31,7 +31,7 @@ string = 'この文を形態素解析してください。'
|
|
31
31
|
result = tagger.parse(string)
|
32
32
|
result[0].surface #=> "この"
|
33
33
|
result.kind_of?(Enumerable) #=> true
|
34
|
-
result.map{|morpheme| morpheme.surface }
|
34
|
+
result.map { |morpheme| morpheme.surface }
|
35
35
|
#=> ["この", "文", "を", "形態素", "解析", "し", "て", "ください", "。"]
|
36
36
|
```
|
37
37
|
|
data/ext/mecab/light/binding.c
CHANGED
@@ -2,52 +2,49 @@
|
|
2
2
|
#include <ruby/encoding.h>
|
3
3
|
#include <mecab.h>
|
4
4
|
|
5
|
-
struct
|
6
|
-
mecab_t*
|
7
|
-
};
|
5
|
+
typedef struct {
|
6
|
+
mecab_t* ptr;
|
7
|
+
} MeCab;
|
8
8
|
|
9
9
|
static VALUE
|
10
|
-
|
10
|
+
mecab_alloc(VALUE klass)
|
11
11
|
{
|
12
|
-
|
13
|
-
return Data_Wrap_Struct(klass, 0,
|
12
|
+
MeCab* mecab = ALLOC(MeCab);
|
13
|
+
return Data_Wrap_Struct(klass, 0, 0, mecab);
|
14
14
|
}
|
15
15
|
|
16
16
|
static VALUE
|
17
|
-
|
17
|
+
rb_mecab_initialize(VALUE self, VALUE arg)
|
18
18
|
{
|
19
|
-
|
19
|
+
MeCab* mecab;
|
20
20
|
|
21
|
-
Data_Get_Struct(self,
|
22
|
-
ptr
|
21
|
+
Data_Get_Struct(self, MeCab, mecab);
|
22
|
+
mecab->ptr = mecab_new2(RSTRING_PTR(arg));
|
23
23
|
return Qnil;
|
24
24
|
}
|
25
25
|
|
26
26
|
static VALUE
|
27
|
-
|
27
|
+
rb_mecab_parse_to_s(VALUE self, VALUE str)
|
28
28
|
{
|
29
|
-
|
29
|
+
MeCab* mecab;
|
30
30
|
const char* result;
|
31
31
|
rb_encoding* enc;
|
32
32
|
|
33
|
-
Data_Get_Struct(self,
|
33
|
+
Data_Get_Struct(self, MeCab, mecab);
|
34
34
|
enc = rb_enc_get(str);
|
35
|
-
result = mecab_sparse_tostr(ptr
|
35
|
+
result = mecab_sparse_tostr(mecab->ptr, RSTRING_PTR(str));
|
36
36
|
return rb_enc_associate(rb_str_new2(result), enc);
|
37
37
|
}
|
38
38
|
|
39
39
|
void
|
40
40
|
Init_binding()
|
41
41
|
{
|
42
|
-
VALUE rb_mMeCab,
|
42
|
+
VALUE rb_mMeCab, rb_mLight, rb_cBinding;
|
43
43
|
|
44
44
|
rb_mMeCab = rb_define_module("MeCab");
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
rb_mecab_light_binding_initialize, 1);
|
51
|
-
rb_define_method(rb_cMeCab_Light_Binding, "parse_to_s",
|
52
|
-
rb_mecab_light_binding_parse_to_s, 1);
|
45
|
+
rb_mLight = rb_define_module_under(rb_mMeCab, "Light");
|
46
|
+
rb_cBinding = rb_define_class_under(rb_mLight, "Binding", rb_cObject);
|
47
|
+
rb_define_alloc_func(rb_cBinding, mecab_alloc);
|
48
|
+
rb_define_private_method(rb_cBinding, "initialize", rb_mecab_initialize, 1);
|
49
|
+
rb_define_method(rb_cBinding, "parse_to_s", rb_mecab_parse_to_s, 1);
|
53
50
|
}
|
data/ext/mecab/light/extconf.rb
CHANGED
data/lib/mecab/light/result.rb
CHANGED
@@ -2,8 +2,9 @@ module MeCab
|
|
2
2
|
module Light
|
3
3
|
class Result
|
4
4
|
include Enumerable
|
5
|
-
|
6
|
-
|
5
|
+
|
6
|
+
def initialize(parsed)
|
7
|
+
@morphemes = parsed.each_line.map { |line| Morpheme.new(line) }
|
7
8
|
end
|
8
9
|
|
9
10
|
def each(&block)
|
data/lib/mecab/light/tagger.rb
CHANGED
@@ -6,12 +6,12 @@ module MeCab
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def parse(string)
|
9
|
-
Result.new(
|
9
|
+
Result.new(parse_to_s(string))
|
10
10
|
end
|
11
11
|
|
12
12
|
private
|
13
|
-
def
|
14
|
-
@mecab.parse_to_s(string).sub(/EOS\n$/, '')
|
13
|
+
def parse_to_s(string)
|
14
|
+
@mecab.parse_to_s(string).sub(/EOS\n$/, '')
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/mecab/light/version.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MeCab::Light::Morpheme do
|
4
|
+
let(:morpheme) { MeCab::Light::Morpheme.new("surface\tfeature\n") }
|
5
|
+
|
6
|
+
context 'the class' do
|
7
|
+
it { expect(MeCab::Light::Morpheme).to respond_to(:new).with(1).argument }
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'an instance initialized with "surface\tfeature\n"' do
|
11
|
+
it { expect(morpheme).to respond_to(:surface).with(0).arguments }
|
12
|
+
it { expect(morpheme).to respond_to(:feature).with(0).arguments }
|
13
|
+
|
14
|
+
context 'surface' do
|
15
|
+
it { expect(morpheme.surface).to eq('surface') }
|
16
|
+
|
17
|
+
context 'encoding' do
|
18
|
+
it { expect(morpheme.surface.encoding).to eq(Encoding::UTF_8) }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'feature' do
|
23
|
+
it { expect(morpheme.feature).to eq('feature') }
|
24
|
+
|
25
|
+
context 'encoding' do
|
26
|
+
it { expect(morpheme.feature.encoding).to eq(Encoding::UTF_8) }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MeCab::Light::Result do
|
4
|
+
let(:morpheme) { double('MeCab::Light::Morpheme') }
|
5
|
+
let(:result) { MeCab::Light::Result.new("surface\tfeature\n") }
|
6
|
+
before do
|
7
|
+
MeCab::Light::Morpheme.stub(:new).and_return(morpheme)
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'class' do
|
11
|
+
it { expect(MeCab::Light::Result).to respond_to(:new).with(1).argument }
|
12
|
+
|
13
|
+
context 'new with "surface\tfeature\n"' do
|
14
|
+
context 'MeCab::Light::Morpheme class' do
|
15
|
+
after do
|
16
|
+
MeCab::Light::Result.new("surface\tfeature\n")
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should receive #new with "surface\tfeature\n"' do
|
20
|
+
expect(MeCab::Light::Morpheme).to receive(:new).with("surface\tfeature\n")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'an instance initialized with ""' do
|
27
|
+
it { expect(result).to respond_to(:each).with(0).arguments }
|
28
|
+
it { expect(result).to be_an(Enumerable) }
|
29
|
+
|
30
|
+
context 'count' do
|
31
|
+
it { expect(result.count).to eq(1) }
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'each' do
|
35
|
+
context 'with block' do
|
36
|
+
it 'should return self' do
|
37
|
+
expect(result.each{}).to eq(result)
|
38
|
+
end
|
39
|
+
it { expect { |b| result.each(&b) }.to yield_control }
|
40
|
+
it 'should yield with args(MeCab::Light::Morpheme)' do
|
41
|
+
expect { |b| result.each(&b) }.to yield_with_args(morpheme)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'without block' do
|
46
|
+
it { expect(result.each).to be_an_instance_of(Enumerator) }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context '[] with 0' do
|
51
|
+
it 'should be an instance of Morpheme' do
|
52
|
+
expect(result[0]).to eq(morpheme)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'at with 0' do
|
57
|
+
it 'should be an instance of Morpheme' do
|
58
|
+
expect(result.at(0)).to eq(morpheme)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MeCab::Light::Tagger do
|
4
|
+
let(:binding) { double( parse_to_s: "surface\tfeature\nEOS\n" ) }
|
5
|
+
let(:result) { double('MeCab::Light::Result') }
|
6
|
+
let(:tagger) { MeCab::Light::Tagger.new }
|
7
|
+
before do
|
8
|
+
MeCab::Light::Binding.stub(:new).and_return(binding)
|
9
|
+
MeCab::Light::Result.stub(:new).and_return(result)
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'the class' do
|
13
|
+
it { expect(MeCab::Light::Tagger).to respond_to(:new).with(0).arguments }
|
14
|
+
|
15
|
+
context 'new' do
|
16
|
+
context 'MeCab::Light::Binding class' do
|
17
|
+
after do
|
18
|
+
MeCab::Light::Tagger.new
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should receive #new with ""' do
|
22
|
+
expect(MeCab::Light::Binding).to receive(:new).with('')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'an instance' do
|
29
|
+
it { expect(tagger).to respond_to(:parse).with(1).argument }
|
30
|
+
|
31
|
+
context 'parse with "surface"' do
|
32
|
+
it 'should be an instance of MeCab::Light::Result' do
|
33
|
+
expect(tagger.parse('surface')).to eq(result)
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'MeCab::Light::Result class' do
|
37
|
+
after do
|
38
|
+
tagger.parse('surface')
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should receive #new with "surface\tfeature\n"' do
|
42
|
+
expect(MeCab::Light::Result).to receive(:new).with("surface\tfeature\n")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'a MeCab::Light::Binding object' do
|
47
|
+
after do
|
48
|
+
tagger.parse('surface')
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should receive #parse_to_s with "surface"' do
|
52
|
+
expect(binding).to receive(:parse_to_s).with('surface')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mecab-light
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hajime WAKAHARA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -47,6 +47,7 @@ extensions:
|
|
47
47
|
extra_rdoc_files: []
|
48
48
|
files:
|
49
49
|
- .gitignore
|
50
|
+
- .travis.yml
|
50
51
|
- Gemfile
|
51
52
|
- LICENSE.txt
|
52
53
|
- README.md
|
@@ -59,7 +60,10 @@ files:
|
|
59
60
|
- lib/mecab/light/tagger.rb
|
60
61
|
- lib/mecab/light/version.rb
|
61
62
|
- mecab-light.gemspec
|
62
|
-
- spec/
|
63
|
+
- spec/mecab-light-morpheme_spec.rb
|
64
|
+
- spec/mecab-light-result_spec.rb
|
65
|
+
- spec/mecab-light-tagger_spec.rb
|
66
|
+
- spec/spec_helper.rb
|
63
67
|
homepage: https://github.com/hadzimme/mecab-light
|
64
68
|
licenses: []
|
65
69
|
metadata: {}
|
@@ -79,9 +83,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
83
|
version: '0'
|
80
84
|
requirements: []
|
81
85
|
rubyforge_project:
|
82
|
-
rubygems_version: 2.
|
86
|
+
rubygems_version: 2.1.9
|
83
87
|
signing_key:
|
84
88
|
specification_version: 4
|
85
89
|
summary: An simple interface for MeCab (UNOFFICIAL)
|
86
90
|
test_files:
|
87
|
-
- spec/
|
91
|
+
- spec/mecab-light-morpheme_spec.rb
|
92
|
+
- spec/mecab-light-result_spec.rb
|
93
|
+
- spec/mecab-light-tagger_spec.rb
|
94
|
+
- spec/spec_helper.rb
|
data/spec/mecab_spec.rb
DELETED
@@ -1,110 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require 'rspec'
|
4
|
-
begin
|
5
|
-
require 'mecab/light'
|
6
|
-
rescue LoadError
|
7
|
-
puts 'loaded mecab-light but MeCab does not exist.'
|
8
|
-
puts 'dummy binding will be loaded.'
|
9
|
-
end
|
10
|
-
|
11
|
-
module MeCab
|
12
|
-
module Light
|
13
|
-
class Binding
|
14
|
-
def initialize(option)
|
15
|
-
end
|
16
|
-
|
17
|
-
def parse_to_s(string)
|
18
|
-
"見る\t動詞,自立,*,*,一段,基本形,見る,ミル,ミル\nEOS\n"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe MeCab::Light::Morpheme do
|
25
|
-
context 'when initialized with the result line of the word "見る"' do
|
26
|
-
before do
|
27
|
-
@morpheme = MeCab::Light::Morpheme.new(
|
28
|
-
"見る\t動詞,自立,*,*,一段,基本形,見る,ミル,ミル\n")
|
29
|
-
end
|
30
|
-
subject { @morpheme }
|
31
|
-
its(:surface){ should eq '見る' }
|
32
|
-
its(:feature){ should eq '動詞,自立,*,*,一段,基本形,見る,ミル,ミル' }
|
33
|
-
describe 'surface' do
|
34
|
-
subject { @morpheme.surface }
|
35
|
-
its(:encoding){ should be Encoding::UTF_8 }
|
36
|
-
end
|
37
|
-
describe 'feature' do
|
38
|
-
subject { @morpheme.feature }
|
39
|
-
its(:encoding){ should be Encoding::UTF_8 }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
describe MeCab::Light::Result do
|
44
|
-
context 'when initialized with the result Enumerator of the word "見る"' do
|
45
|
-
before do
|
46
|
-
@result = MeCab::Light::Result.new(
|
47
|
-
["見る\t動詞,自立,*,*,一段,基本形,見る,ミル,ミル\n"].to_enum)
|
48
|
-
end
|
49
|
-
subject { @result }
|
50
|
-
it { should respond_to :each }
|
51
|
-
it { should be_an Enumerable }
|
52
|
-
its(:count){ should be 1 }
|
53
|
-
describe 'each' do
|
54
|
-
context 'with block' do
|
55
|
-
subject { @result.each{} }
|
56
|
-
it 'should return self' do
|
57
|
-
should be @result
|
58
|
-
end
|
59
|
-
end
|
60
|
-
context 'without block' do
|
61
|
-
subject { @result.each }
|
62
|
-
it 'should return Enumerator' do
|
63
|
-
should be_an_instance_of Enumerator
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
describe '[]' do
|
68
|
-
context 'when argument 0' do
|
69
|
-
subject { @result[0] }
|
70
|
-
it { should be_an_instance_of MeCab::Light::Morpheme }
|
71
|
-
end
|
72
|
-
end
|
73
|
-
describe 'at' do
|
74
|
-
context 'when argument 0' do
|
75
|
-
subject { @result.at(0) }
|
76
|
-
it { should be_an_instance_of MeCab::Light::Morpheme }
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
describe MeCab::Light::Tagger do
|
82
|
-
before { @tagger = MeCab::Light::Tagger.new }
|
83
|
-
subject { @tagger }
|
84
|
-
it { should respond_to :parse }
|
85
|
-
describe 'parse' do
|
86
|
-
context 'when argument "見る"' do
|
87
|
-
before { @result = @tagger.parse('見る') }
|
88
|
-
subject { @result }
|
89
|
-
it 'should return MeCab::Light::Result object' do
|
90
|
-
should be_an_instance_of MeCab::Light::Result
|
91
|
-
end
|
92
|
-
its(:count){ should be 1 }
|
93
|
-
describe 'MeCab::Light::Result (returned)' do
|
94
|
-
context '[0]' do
|
95
|
-
before { @morpheme = @result[0] }
|
96
|
-
subject { @morpheme }
|
97
|
-
it 'should return MeCab::Light::Morpheme object' do
|
98
|
-
should be_an_instance_of MeCab::Light::Morpheme
|
99
|
-
end
|
100
|
-
describe 'MeCab::Light::Morpheme (returned)' do
|
101
|
-
context 'surface' do
|
102
|
-
subject { @morpheme.surface }
|
103
|
-
it { should eq '見る' }
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|