petrovich 1.0.1 → 1.1.0
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/README.md +11 -6
- data/Rakefile +1 -1
- data/lib/petrovich.rb +8 -0
- data/lib/petrovich/case/rule.rb +0 -13
- data/lib/petrovich/name.rb +1 -1
- data/lib/petrovich/rule_set.rb +5 -2
- data/lib/petrovich/version.rb +3 -0
- data/lib/tasks/evaluate.rake +48 -2
- data/rules/gender.yml +129 -0
- data/rules/rules.yml +12 -135
- metadata +4 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 497c86554374fa1a2c75f764eaac90cfb91b7b6f
|
4
|
+
data.tar.gz: 48eb5c6fdc37a1312405a72e23c89031474b02f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed072a7f8ca8d2b2b7758da3cf1913865f28135da6d99be1159a154ac972acd278c574581d2ed8fd349c8f07664e8cc34a0ddfc5447041e3292d474d6a87e100
|
7
|
+
data.tar.gz: 4dd300b6cf3338b1396c0c5211f85c419019588c2ccb01120f0b526742bc5eaae462c0de1d4fc3756e532bbeb00e8b82dee66f36f56978365d2aa55e6245fa77
|
data/README.md
CHANGED
@@ -5,7 +5,12 @@
|
|
5
5
|
|
6
6
|
Petrovich также позволяет определять пол по имени, фамилии, отчеству.
|
7
7
|
|
8
|
-
[![Build Status]
|
8
|
+
[![RubyGems][rubygems_badge]][rubygems_link] [![Build Status][travis_ci_badge]][travis_ci_link]
|
9
|
+
|
10
|
+
[rubygems_badge]: https://badge.fury.io/rb/petrovich.svg
|
11
|
+
[rubygems_link]: https://rubygems.org/gems/petrovich
|
12
|
+
[travis_ci_badge]: https://travis-ci.org/petrovich/petrovich-ruby.svg
|
13
|
+
[travis_ci_link]: https://travis-ci.org/petrovich/petrovich-ruby
|
9
14
|
|
10
15
|
## Установка
|
11
16
|
|
@@ -103,17 +108,17 @@ Petrovich(
|
|
103
108
|
).male? # => true
|
104
109
|
```
|
105
110
|
|
106
|
-
##
|
111
|
+
## Интерфейс командной строки
|
107
112
|
|
108
113
|
Примеры вызовов:
|
109
114
|
|
110
115
|
```bash
|
111
|
-
petrovich -l Иванов -f Иван -m Иванович -g male -
|
112
|
-
petrovich -l Иванов -f Иван -m Иванович -
|
113
|
-
petrovich -l Иванов -f Иван -m Иванович -
|
116
|
+
petrovich -l Иванов -f Иван -m Иванович -g male -c accusative
|
117
|
+
petrovich -l Иванов -f Иван -m Иванович -c accusative -n
|
118
|
+
petrovich -l Иванов -f Иван -m Иванович -c accusative -o
|
114
119
|
```
|
115
120
|
|
116
|
-
Подробное руководство: `petrovich
|
121
|
+
Подробное руководство: `petrovich --help`.
|
117
122
|
|
118
123
|
## Модульные тесты
|
119
124
|
|
data/Rakefile
CHANGED
data/lib/petrovich.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'forwardable'
|
3
|
+
require 'petrovich/version'
|
3
4
|
require 'petrovich/value'
|
4
5
|
require 'petrovich/inflector'
|
5
6
|
require 'petrovich/inflected'
|
@@ -23,6 +24,13 @@ module Petrovich
|
|
23
24
|
:prepositional
|
24
25
|
]
|
25
26
|
|
27
|
+
# Possible genders
|
28
|
+
GENDERS = [
|
29
|
+
:androgynous,
|
30
|
+
:male,
|
31
|
+
:female
|
32
|
+
]
|
33
|
+
|
26
34
|
class << self
|
27
35
|
# A place that keeps inflection and gender rules loaded from yaml file.
|
28
36
|
#
|
data/lib/petrovich/case/rule.rb
CHANGED
@@ -13,17 +13,11 @@ module Petrovich
|
|
13
13
|
@tags = []
|
14
14
|
|
15
15
|
@tests_regexp = Regexp.union(Array(@tests).map(&:suffix))
|
16
|
-
|
17
|
-
assert_name_part!(@as)
|
18
16
|
end
|
19
17
|
|
20
18
|
def match?(name, match_gender, match_as, known_gender = false)
|
21
|
-
assert_name_part!(match_as)
|
22
|
-
|
23
19
|
return false unless match_as == as
|
24
20
|
|
25
|
-
match_gender = match_gender.to_sym.downcase
|
26
|
-
|
27
21
|
if known_gender
|
28
22
|
return false if match_gender != gender
|
29
23
|
else
|
@@ -57,13 +51,6 @@ module Petrovich
|
|
57
51
|
fail UnknownCaseError, "Unknown grammatic case: #{name_case}".freeze
|
58
52
|
end
|
59
53
|
end
|
60
|
-
|
61
|
-
private
|
62
|
-
|
63
|
-
def assert_name_part!(name_part)
|
64
|
-
return if [:lastname, :firstname, :middlename].include?(name_part)
|
65
|
-
fail ArgumentError, "Unknown 'as' option #{name_part}".freeze
|
66
|
-
end
|
67
54
|
end
|
68
55
|
end
|
69
56
|
end
|
data/lib/petrovich/name.rb
CHANGED
data/lib/petrovich/rule_set.rb
CHANGED
@@ -43,9 +43,12 @@ module Petrovich
|
|
43
43
|
rules = YAML.load_file(
|
44
44
|
File.expand_path('../../../rules/rules.yml', __FILE__)
|
45
45
|
)
|
46
|
+
gender = YAML.load_file(
|
47
|
+
File.expand_path('../../../rules/gender.yml', __FILE__)
|
48
|
+
)
|
46
49
|
|
47
50
|
load_case_rules!(rules)
|
48
|
-
load_gender_rules!(
|
51
|
+
load_gender_rules!(gender)
|
49
52
|
end
|
50
53
|
|
51
54
|
private
|
@@ -68,7 +71,7 @@ module Petrovich
|
|
68
71
|
def load_gender_rules!(rules)
|
69
72
|
[:lastname, :firstname, :middlename].each do |name_part|
|
70
73
|
# First, add androgynous rules. Order is matters.
|
71
|
-
|
74
|
+
Petrovich::GENDERS.each do |section|
|
72
75
|
entries = rules['gender'][name_part.to_s][section.to_s]
|
73
76
|
next if entries.nil?
|
74
77
|
|
data/lib/tasks/evaluate.rake
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'csv'
|
4
4
|
|
5
5
|
def check!(errors, correct, total, lemma, gender, gcase, expected)
|
6
|
-
petrovich =
|
6
|
+
petrovich = Petrovich(lastname: lemma, gender: gender)
|
7
7
|
actual = Petrovich::Unicode.upcase(petrovich.public_send(gcase).lastname)
|
8
8
|
total[[gender, gcase]] += 1
|
9
9
|
if actual == expected
|
@@ -28,7 +28,7 @@ task :evaluate => :petrovich do
|
|
28
28
|
CSV.open(errors_filename, 'w', col_sep: "\t") do |errors|
|
29
29
|
errors << %w(lemma expected actual params)
|
30
30
|
|
31
|
-
CSV.open(filename, col_sep: "\t", headers: true).each do |row|
|
31
|
+
CSV.open(filename, "r:BINARY", col_sep: "\t", headers: true).each do |row|
|
32
32
|
word = row['word'].force_encoding('UTF-8')
|
33
33
|
lemma = row['lemma'].force_encoding('UTF-8')
|
34
34
|
|
@@ -75,3 +75,49 @@ task :evaluate => :petrovich do
|
|
75
75
|
puts 'Sum of the %d correct examples and %d mistakes is %d.' %
|
76
76
|
[correct_size, total_size - correct_size, total_size]
|
77
77
|
end
|
78
|
+
|
79
|
+
desc 'Evaluate gender detector'
|
80
|
+
task :detect => :petrovich do
|
81
|
+
GENDER_MAP = { 'мр' => :male, 'жр' => :female, 'мр-жр' => :androgynous }
|
82
|
+
|
83
|
+
filename = File.expand_path('../../../eval/surnames.gender.tsv', __FILE__)
|
84
|
+
errors_filename = ENV['errors'] || 'errors.gender.tsv'
|
85
|
+
|
86
|
+
correct, total = Hash.new(0), Hash.new(0)
|
87
|
+
|
88
|
+
puts 'I will evaluate gender detector on "%s" ' \
|
89
|
+
'and store errors to "%s".' % [filename, errors_filename]
|
90
|
+
|
91
|
+
CSV.open(errors_filename, 'w', col_sep: "\t") do |errors|
|
92
|
+
errors << %w(lemma expected actual)
|
93
|
+
|
94
|
+
CSV.open(filename, "r:BINARY", col_sep: "\t", headers: true).each do |row|
|
95
|
+
lemma = row['lemma'].force_encoding('UTF-8')
|
96
|
+
gender_name = row['gender'].force_encoding('UTF-8')
|
97
|
+
expected_gender = GENDER_MAP[gender_name]
|
98
|
+
|
99
|
+
detected_gender = Petrovich(lastname: lemma).gender
|
100
|
+
|
101
|
+
total[expected_gender] += 1
|
102
|
+
if detected_gender == expected_gender
|
103
|
+
correct[expected_gender] += 1
|
104
|
+
else
|
105
|
+
errors << [lemma, expected_gender, detected_gender]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
total.each do |gender, correct_count|
|
111
|
+
accuracy = correct[gender] / correct_count.to_f * 100
|
112
|
+
puts "\tAc(%s) = %.4f%%" % [gender, accuracy]
|
113
|
+
end
|
114
|
+
|
115
|
+
correct_size = correct.values.inject(&:+)
|
116
|
+
total_size = total.values.inject(&:+)
|
117
|
+
|
118
|
+
puts 'Well, the accuracy on %d examples is about %.4f%%.' %
|
119
|
+
[total_size, (correct_size / total_size.to_f * 100)]
|
120
|
+
|
121
|
+
puts 'Sum of the %d correct examples and %d mistakes is %d.' %
|
122
|
+
[correct_size, total_size - correct_size, total_size]
|
123
|
+
end
|
data/rules/gender.yml
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
# Эвристики для определения пола
|
2
|
+
gender:
|
3
|
+
lastname:
|
4
|
+
# Здесь андрогинные фамилии не выделены в отдельную группу. Если в группе female и male
|
5
|
+
# не будет найдено совпадений, то фамилия будет считаться андрогинной.
|
6
|
+
female:
|
7
|
+
- ова
|
8
|
+
- ая
|
9
|
+
- ына
|
10
|
+
- ина
|
11
|
+
- ева
|
12
|
+
- ска
|
13
|
+
- ёва
|
14
|
+
male:
|
15
|
+
- кий
|
16
|
+
- ов
|
17
|
+
- ын
|
18
|
+
- ев
|
19
|
+
- ин
|
20
|
+
- ёв
|
21
|
+
- хий
|
22
|
+
- ний
|
23
|
+
- ый
|
24
|
+
- ой
|
25
|
+
firstname:
|
26
|
+
# Исключения - андрогинные имена
|
27
|
+
androgynous:
|
28
|
+
- ким
|
29
|
+
- никита
|
30
|
+
- саша
|
31
|
+
- женя
|
32
|
+
male:
|
33
|
+
- кузьма
|
34
|
+
- лука
|
35
|
+
- савва
|
36
|
+
- фома
|
37
|
+
- ей
|
38
|
+
- ий
|
39
|
+
- ый
|
40
|
+
- ой
|
41
|
+
- др
|
42
|
+
- тр
|
43
|
+
- ел
|
44
|
+
- ан
|
45
|
+
- им
|
46
|
+
- д
|
47
|
+
- ис
|
48
|
+
- рт
|
49
|
+
- кт
|
50
|
+
- ар
|
51
|
+
- ен
|
52
|
+
- ав
|
53
|
+
- он
|
54
|
+
- ил
|
55
|
+
- ир
|
56
|
+
- их
|
57
|
+
- ри
|
58
|
+
- аф
|
59
|
+
- ор
|
60
|
+
- рь
|
61
|
+
- жи
|
62
|
+
- ат
|
63
|
+
- иф
|
64
|
+
- ья
|
65
|
+
- нт
|
66
|
+
- к
|
67
|
+
- ст
|
68
|
+
- ян
|
69
|
+
female:
|
70
|
+
- фанни
|
71
|
+
- фаня
|
72
|
+
- жаден
|
73
|
+
- жейден
|
74
|
+
- ия
|
75
|
+
- а
|
76
|
+
- ся
|
77
|
+
- ина
|
78
|
+
- та
|
79
|
+
- сья
|
80
|
+
- ля
|
81
|
+
- оя
|
82
|
+
- да
|
83
|
+
- йя
|
84
|
+
- ея
|
85
|
+
- вья
|
86
|
+
- нья
|
87
|
+
- ая
|
88
|
+
- ель
|
89
|
+
- ико
|
90
|
+
- фья
|
91
|
+
- рья
|
92
|
+
- лья
|
93
|
+
- биргит
|
94
|
+
- илзе
|
95
|
+
- овь
|
96
|
+
- елли
|
97
|
+
- ои
|
98
|
+
- гюль
|
99
|
+
- ес
|
100
|
+
- есс
|
101
|
+
- есси
|
102
|
+
- естин
|
103
|
+
- естини
|
104
|
+
- истин
|
105
|
+
- ети
|
106
|
+
- нет
|
107
|
+
- сти
|
108
|
+
- сми
|
109
|
+
- лин
|
110
|
+
- линн
|
111
|
+
- ейн
|
112
|
+
- нифер
|
113
|
+
- женни
|
114
|
+
- еннис
|
115
|
+
- енн
|
116
|
+
- инн
|
117
|
+
- ерин
|
118
|
+
- ляра
|
119
|
+
- лярам
|
120
|
+
middlename:
|
121
|
+
female:
|
122
|
+
- на
|
123
|
+
- кызы
|
124
|
+
- гызы
|
125
|
+
male:
|
126
|
+
- ич
|
127
|
+
- оглы
|
128
|
+
- улы
|
129
|
+
- уулу
|
data/rules/rules.yml
CHANGED
@@ -42,7 +42,7 @@ lastname:
|
|
42
42
|
mods: [., ., ., ., .]
|
43
43
|
|
44
44
|
- gender: androgynous
|
45
|
-
test: [
|
45
|
+
test: [орота]
|
46
46
|
mods: [., ., ., ., .]
|
47
47
|
|
48
48
|
# Брыльска, *
|
@@ -97,7 +97,7 @@ lastname:
|
|
97
97
|
|
98
98
|
# Кузнецова, Голубева, Скурихина
|
99
99
|
- gender: female
|
100
|
-
test: [ова, ева,
|
100
|
+
test: [ова, ева, на, ёва]
|
101
101
|
mods: [-ой, -ой, -у, -ой, -ой]
|
102
102
|
|
103
103
|
# Басалыга, Лазука, Пидкуймуха, Бобча, Гуща, Рогожа, Кваша
|
@@ -135,17 +135,17 @@ lastname:
|
|
135
135
|
test: [ян, ан, йн]
|
136
136
|
mods: [а, у, а, ом, е]
|
137
137
|
|
138
|
-
# Волынец, Горобец
|
139
|
-
- gender: male
|
140
|
-
test: [ынец, обец]
|
141
|
-
mods: [--ца, --цу, --ца, --цем, --це]
|
142
|
-
|
143
138
|
# *, Быховец
|
144
139
|
# TODO: Проверить Брагинец
|
145
140
|
- gender: male
|
146
|
-
test: [
|
141
|
+
test: [ынец, овец]
|
147
142
|
mods: [--ца, --цу, --ца, --цом, --це]
|
148
143
|
|
144
|
+
# Волынец, Горобец
|
145
|
+
- gender: male
|
146
|
+
test: [нец, обец]
|
147
|
+
mods: [--ца, --цу, --ца, --цем, --це]
|
148
|
+
|
149
149
|
# Порывай
|
150
150
|
- gender: male
|
151
151
|
test: [ай]
|
@@ -161,9 +161,9 @@ lastname:
|
|
161
161
|
test: [ой]
|
162
162
|
mods: [-го, -му, -го, --ым, -м]
|
163
163
|
|
164
|
-
# *,
|
164
|
+
# *, *, -шток
|
165
165
|
- gender: male
|
166
|
-
test: [ах,
|
166
|
+
test: [ах, ив, шток]
|
167
167
|
mods: [а, у, а, ом, е]
|
168
168
|
|
169
169
|
# *, *, *, *
|
@@ -171,8 +171,9 @@ lastname:
|
|
171
171
|
test: [ший, щий, жий, ний]
|
172
172
|
mods: [--его, --ему, --его, -м, --ем]
|
173
173
|
|
174
|
+
# Безверхий
|
174
175
|
- gender: male
|
175
|
-
test: [ый,
|
176
|
+
test: [ый, кий, хий]
|
176
177
|
mods: [--ого, --ому, --ого, -м, --ом]
|
177
178
|
|
178
179
|
# Хорунжий
|
@@ -320,127 +321,3 @@ middlename:
|
|
320
321
|
- gender: female
|
321
322
|
test: [на]
|
322
323
|
mods: [-ы, -е, -у, -ой, -е]
|
323
|
-
|
324
|
-
# Эвристики для определения пола
|
325
|
-
gender:
|
326
|
-
lastname:
|
327
|
-
# Здесь андрогенные фамилии не выделены в отдельную группу. Если в группе female и male
|
328
|
-
# не будет найдено совпадений, то фамилия будет считаться андрогенной.
|
329
|
-
female:
|
330
|
-
- ова
|
331
|
-
- ая
|
332
|
-
- на
|
333
|
-
- ина
|
334
|
-
- ева
|
335
|
-
- ска
|
336
|
-
male:
|
337
|
-
- кий
|
338
|
-
- ов
|
339
|
-
- ын
|
340
|
-
- ев
|
341
|
-
- ин
|
342
|
-
firstname:
|
343
|
-
# Исключения - андрогенные имена
|
344
|
-
androgynous:
|
345
|
-
- ким
|
346
|
-
- никита
|
347
|
-
- саша
|
348
|
-
- женя
|
349
|
-
male:
|
350
|
-
- кузьма
|
351
|
-
- лука
|
352
|
-
- савва
|
353
|
-
- фома
|
354
|
-
- ей
|
355
|
-
- ий
|
356
|
-
- ый
|
357
|
-
- ой
|
358
|
-
- др
|
359
|
-
- тр
|
360
|
-
- ел
|
361
|
-
- ан
|
362
|
-
- им
|
363
|
-
- д
|
364
|
-
- ис
|
365
|
-
- рт
|
366
|
-
- кт
|
367
|
-
- ар
|
368
|
-
- ен
|
369
|
-
- ав
|
370
|
-
- он
|
371
|
-
- ил
|
372
|
-
- ир
|
373
|
-
- их
|
374
|
-
- ри
|
375
|
-
- аф
|
376
|
-
- ор
|
377
|
-
- рь
|
378
|
-
- жи
|
379
|
-
- ат
|
380
|
-
- иф
|
381
|
-
- ья
|
382
|
-
- нт
|
383
|
-
- к
|
384
|
-
- ст
|
385
|
-
- ян
|
386
|
-
female:
|
387
|
-
- фанни
|
388
|
-
- фаня
|
389
|
-
- жаден
|
390
|
-
- жейден
|
391
|
-
- ия
|
392
|
-
- а
|
393
|
-
- ся
|
394
|
-
- ина
|
395
|
-
- та
|
396
|
-
- сья
|
397
|
-
- ля
|
398
|
-
- оя
|
399
|
-
- да
|
400
|
-
- йя
|
401
|
-
- ея
|
402
|
-
- вья
|
403
|
-
- нья
|
404
|
-
- ая
|
405
|
-
- ель
|
406
|
-
- ико
|
407
|
-
- фья
|
408
|
-
- рья
|
409
|
-
- лья
|
410
|
-
- биргит
|
411
|
-
- илзе
|
412
|
-
- овь
|
413
|
-
- елли
|
414
|
-
- ои
|
415
|
-
- гюль
|
416
|
-
- ес
|
417
|
-
- есс
|
418
|
-
- есси
|
419
|
-
- естин
|
420
|
-
- естини
|
421
|
-
- истин
|
422
|
-
- ети
|
423
|
-
- нет
|
424
|
-
- сти
|
425
|
-
- сми
|
426
|
-
- лин
|
427
|
-
- линн
|
428
|
-
- ейн
|
429
|
-
- нифер
|
430
|
-
- женни
|
431
|
-
- еннис
|
432
|
-
- енн
|
433
|
-
- инн
|
434
|
-
- ерин
|
435
|
-
- ляра
|
436
|
-
- лярам
|
437
|
-
middlename:
|
438
|
-
female:
|
439
|
-
- на
|
440
|
-
- кызы
|
441
|
-
- гызы
|
442
|
-
male:
|
443
|
-
- ич
|
444
|
-
- оглы
|
445
|
-
- улы
|
446
|
-
- уулу
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: petrovich
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kozlov
|
@@ -9,22 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-07-
|
12
|
+
date: 2016-07-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: commander
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - '='
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: 4.3.5
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - '='
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: 4.3.5
|
28
14
|
- !ruby/object:Gem::Dependency
|
29
15
|
name: rake
|
30
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,20 +39,6 @@ dependencies:
|
|
53
39
|
- - ">="
|
54
40
|
- !ruby/object:Gem::Version
|
55
41
|
version: '0'
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: minitest-reporters
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0'
|
63
|
-
type: :development
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
42
|
description: A morphological library for Russian anthroponyms, such as first names,
|
71
43
|
last names, and middle names.
|
72
44
|
email:
|
@@ -91,7 +63,9 @@ files:
|
|
91
63
|
- lib/petrovich/rule_set.rb
|
92
64
|
- lib/petrovich/unicode.rb
|
93
65
|
- lib/petrovich/value.rb
|
66
|
+
- lib/petrovich/version.rb
|
94
67
|
- lib/tasks/evaluate.rake
|
68
|
+
- rules/gender.yml
|
95
69
|
- rules/rules.yml
|
96
70
|
homepage: https://github.com/petrovich/petrovich-ruby
|
97
71
|
licenses:
|