morphy 0.0.3 → 0.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ffbef5e95829de72124f62a477969795869948e5
4
- data.tar.gz: 462188fe9f72702fe28d8bb9549118fb959fa26c
3
+ metadata.gz: fcbdc7a59f41e79c1cf9ac95ecec4887176c5024
4
+ data.tar.gz: 4277e263c6d63ba16540b196c0207d7ec98fadcd
5
5
  SHA512:
6
- metadata.gz: ae7c186490bd5f217953f27727879d9afaccc3c21a2f54ab53aa117d6d64822695d187d21974d9f484c41531c5a1db01a5ee477c0c035e5c61f78bfea063948d
7
- data.tar.gz: 160c9cfa219860ecebc06955ac165b93f9db067fd6c7b3c67d33160113b8ce17a5638fb29c653100991bfaca8f57f49ca1e9419aca3f3d750df6ca39f899bf6d
6
+ metadata.gz: c0fddd3b4910808a4160474e9214ad09138a745fd0e95e61fe774017bfa782c09c8ac6f4cf411357e76b514338f2bf78154d4ce0f4fe02cd30ef0f33c19a1a78
7
+ data.tar.gz: c58a7f67a75eebd7223458927d79f678d0f25e360f9745287fbe5901f1e8ab9c27e3a2f49742e1a29806f3ab00ffa17dd7fdaece354e9d2337d0b4cb0cdc7960
data/.gitignore CHANGED
File without changes
data/Gemfile CHANGED
File without changes
data/LICENSE CHANGED
File without changes
data/README.md CHANGED
@@ -15,19 +15,20 @@ Or install it yourself as:
15
15
 
16
16
  $ gem install morphy
17
17
 
18
- ## Usage
19
- # Words must be added in alphabetical order
18
+ ## Usage
20
19
  require "morphy"
21
-
20
+
22
21
  morphy = Morphy.new
23
-
24
- word = morphy.find_similar("облако").first
22
+
23
+ word = morphy.query("облако").first
25
24
 
26
25
  datv = word.inflect(["datv"])
27
26
  datv.to_s
28
27
  => облаку
29
28
  datv.inflect(["nomn"]).to_s
30
29
  => облако
30
+ datv.inflect(["nomn", "plur"]).to_s
31
+ => облака
31
32
  datv.lexemme.map(&:to_s)
32
33
  => ["облако", "облака", "облаку", "облако", "облаком", "облаке", "облака", "облаков", "облакам", "облака", "облаками", "облаках"]
33
34
  datv.normal_form
@@ -35,6 +36,8 @@ Or install it yourself as:
35
36
 
36
37
 
37
38
 
39
+
40
+
38
41
  ## Contributing
39
42
 
40
43
  1. Fork it
@@ -42,4 +45,3 @@ Or install it yourself as:
42
45
  3. Commit your changes (`git commit -am 'Add some feature'`)
43
46
  4. Push to the branch (`git push origin my-new-feature`)
44
47
  5. Create new Pull Request
45
-
Binary file
File without changes
File without changes
File without changes
File without changes
data/lib/morphy.rb CHANGED
@@ -1,98 +1,53 @@
1
1
  require "dawg"
2
+ require_relative "word"
2
3
 
3
- class Morphy
4
- class Word
5
- attr_accessor :para_id
6
-
7
- def initialize(word,para_id,index)
8
- @word = word
9
- @para_id = para_id.to_i
10
- @index = index.to_i
11
- @prefix_id = Morphy.paradigms[@para_id][@index*3]
12
- @suffix_id = Morphy.paradigms[@para_id][@index*3+1]
13
- @grammeme_id = Morphy.paradigms[@para_id][@index*3+2]
14
-
15
- end
16
-
17
- def to_s
18
- @word
19
- end
20
-
21
- def normal_form
22
- prefix = Morphy.prefixes[Morphy.paradigms[@para_id][0]]
23
- suffix = Morphy.suffixes[Morphy.paradigms[@para_id][1]]
24
-
25
- "#{prefix}#{stem}#{suffix}"
26
- end
27
- def grammemes
28
- Morphy.grammemes[@grammeme_id]
29
- end
30
- def stem
31
- prefix = Morphy.prefixes[Morphy.paradigms[@para_id][0]]
32
- suffix = Morphy.suffixes[Morphy.paradigms[@para_id][1]]
33
- grammeme = Morphy.grammemes[Morphy.paradigms[@para_id][2]]
34
- word = @word.dup
35
- word.sub!(Morphy.prefixes[@prefix_id],"")
36
- word = word.reverse.sub(Morphy.suffixes[@suffix_id],"").reverse
37
- word
38
- end
4
+ module Morphy
39
5
 
40
- def same_paradigm?(other)
41
- @para_id == other.para_id
42
- end
6
+ class Morphy
43
7
 
44
- def tag
45
- Morphy.grammemes[@grammeme_id].join(",")
8
+ def initialize
9
+ @dawg = Dawg.load("#{::Morphy.path}/dawg.bin")
46
10
  end
47
11
 
48
- def lexemme
49
- (0..(Morphy.paradigms[@para_id].length / 3)-1).map do |index|
50
- prefix = Morphy.prefixes[Morphy.paradigms[@para_id][index*3]]
51
- suffix = Morphy.suffixes[Morphy.paradigms[@para_id][index*3+1]]
52
- grammeme = Morphy.grammemes[Morphy.paradigms[@para_id][index*3+2]]
53
- Word.new(prefix+stem+suffix,@para_id,index)
54
- end
12
+ def query(word)
13
+ results = @dawg.query(word)
14
+ results = results.map do |result|
15
+ result = result.to_s
16
+ word, para_id, index = result.split(' ')
17
+ Word.new(word, para_id, index)
18
+ end
19
+ results
55
20
  end
56
21
 
57
- def inflect(grammemes)
58
- words = lexemme
59
- words.each do |word|
60
- return word if word.grammemes.last(grammemes.length) == grammemes
61
- end
62
- nil
63
- end
22
+ def to_s
23
+ "Morphy"
24
+ end
64
25
  end
65
- def initialize
66
-
67
- path = File.dirname(__FILE__)+"/dictionary/"
68
26
 
69
- @dawg = Dawg.load("#{path}/dawg.dat") # why it's eating so much memory?
70
- @@suffixes ||= File.open("#{path}/suffixes.txt", 'r').read.split("\n")
71
- @@prefixes ||= File.open("#{path}/prefixes.txt", 'r').read.split("\n")
72
- @@grammemes ||= File.open("#{path}/grammemes.txt", 'r').read.split("\n").map{|g| g.split(",")}
73
- @@paradigms ||= Marshal.load(File.read("#{path}/paradigms.dat"))
74
- end
75
- def self.paradigms
76
- @@paradigms
27
+ extend self
28
+
29
+ def new
30
+ Morphy.new
77
31
  end
78
- def self.prefixes
79
- @@prefixes
32
+
33
+ def path
34
+ File.dirname(__FILE__)+"/dictionary"
80
35
  end
81
- def self.suffixes
82
- @@suffixes
36
+
37
+ def paradigms
38
+ @@paradigms ||= Marshal.load(File.read("#{path}/paradigms.dat"))
83
39
  end
84
- def self.grammemes
85
- @@grammemes
40
+
41
+ def prefixes
42
+ @@prefixes ||= File.open("#{path}/prefixes.txt", 'r').read.split("\n")
86
43
  end
87
- def find_similar(word)
88
- results = @dawg.find_similar(word)
89
- results = results.map do |result|
90
- word,para_id,index = result.split(" ")
91
- Word.new(word,para_id,index)
92
- end
93
- results
44
+
45
+ def suffixes
46
+ @@suffixes ||= File.open("#{path}/suffixes.txt", 'r').read.split("\n")
94
47
  end
95
- def to_s
96
- "Morphy"
48
+
49
+ def grammemes
50
+ @@grammemes ||= File.open("#{path}/grammemes.txt", 'r').read.split("\n").map{|g| g.split(",")}
97
51
  end
98
- end
52
+
53
+ end
data/lib/word.rb ADDED
@@ -0,0 +1,61 @@
1
+ module Morphy
2
+ class Word
3
+ attr_accessor :para_id
4
+
5
+ def initialize(word,para_id,index)
6
+ @word = word
7
+ @para_id = para_id.to_i
8
+ @index = index.to_i
9
+ @prefix_id = ::Morphy.paradigms[@para_id][@index * 3]
10
+ @suffix_id = ::Morphy.paradigms[@para_id][@index * 3 + 1]
11
+ @grammeme_id = ::Morphy.paradigms[@para_id][@index * 3 + 2]
12
+ end
13
+
14
+ def to_s
15
+ @word
16
+ end
17
+
18
+ def normal_form
19
+ self.inflect(["nomn"])
20
+ end
21
+
22
+ def grammemes
23
+ ::Morphy.grammemes[@grammeme_id]
24
+ end
25
+
26
+ def stem
27
+ prefix = ::Morphy.prefixes[::Morphy.paradigms[@para_id][0]]
28
+ suffix = ::Morphy.suffixes[::Morphy.paradigms[@para_id][1]]
29
+ grammeme = ::Morphy.grammemes[::Morphy.paradigms[@para_id][2]]
30
+ word = @word.dup
31
+ word.sub!(::Morphy.prefixes[@prefix_id], '')
32
+ word = word.reverse.sub(::Morphy.suffixes[@suffix_id].reverse, '').reverse
33
+ word
34
+ end
35
+
36
+ def same_paradigm?(other)
37
+ @para_id == other.para_id
38
+ end
39
+
40
+ def tag
41
+ ::Morphy.grammemes[@grammeme_id].join(',')
42
+ end
43
+
44
+ def lexemme
45
+ (0..(::Morphy.paradigms[@para_id].length / 3) - 1).map do |index|
46
+ prefix = ::Morphy.prefixes[::Morphy.paradigms[@para_id][index * 3]]
47
+ suffix = ::Morphy.suffixes[::Morphy.paradigms[@para_id][index * 3 + 1]]
48
+ grammeme = ::Morphy.grammemes[::Morphy.paradigms[@para_id][index * 3 + 2]]
49
+ Word.new(prefix + stem + suffix, @para_id, index)
50
+ end
51
+ end
52
+
53
+ def inflect(grammemes)
54
+ words = lexemme
55
+ words.each do |word|
56
+ return word if (word.grammemes & grammemes).length == grammemes.length
57
+ end
58
+ nil
59
+ end
60
+ end
61
+ end
data/morphy.gemspec CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "morphy"
5
- spec.version = "0.0.3"
6
- spec.date = '2015-05-29'
5
+ spec.version = "0.0.4"
6
+ spec.date = '2017-03-19'
7
7
  spec.authors = ["Maksatbek Mansurov"]
8
8
  spec.email = ["maksat.mansurov@gmail.com"]
9
9
  spec.description = %q{Morphological analyzer (POS tagger + inflection engine) for Russian language in ruby. Inspired by pymorphy2}
@@ -14,6 +14,6 @@ Gem::Specification.new do |spec|
14
14
  spec.files = `git ls-files`.split($/)
15
15
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
- spec.require_paths = ["lib"]
18
- spec.add_development_dependency 'dawg', '~> 0.0', '>= 0.0.2'
17
+ spec.require_paths = ["lib"]
18
+ spec.add_runtime_dependency 'dawg', '~> 0.0', '>= 0.0.4'
19
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: morphy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maksatbek Mansurov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-29 00:00:00.000000000 Z
11
+ date: 2017-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dawg
@@ -19,8 +19,8 @@ dependencies:
19
19
  version: '0.0'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.0.2
23
- type: :development
22
+ version: 0.0.4
23
+ type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '0.0'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.0.2
32
+ version: 0.0.4
33
33
  description: Morphological analyzer (POS tagger + inflection engine) for Russian language
34
34
  in ruby. Inspired by pymorphy2
35
35
  email:
@@ -42,12 +42,13 @@ files:
42
42
  - Gemfile
43
43
  - LICENSE
44
44
  - README.md
45
- - lib/dictionary/dawg.dat
45
+ - lib/dictionary/dawg.bin
46
46
  - lib/dictionary/grammemes.txt
47
47
  - lib/dictionary/paradigms.dat
48
48
  - lib/dictionary/prefixes.txt
49
49
  - lib/dictionary/suffixes.txt
50
50
  - lib/morphy.rb
51
+ - lib/word.rb
51
52
  - morphy.gemspec
52
53
  homepage: https://github.com/baltavay/morphy
53
54
  licenses:
@@ -69,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
70
  version: '0'
70
71
  requirements: []
71
72
  rubyforge_project:
72
- rubygems_version: 2.2.2
73
+ rubygems_version: 2.4.5.1
73
74
  signing_key:
74
75
  specification_version: 4
75
76
  summary: Morphological analyzer for Russian language in ruby. Inspired by pymorphy2