human_name_parser 0.0.4 → 0.0.5
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.
- data/.gitignore +2 -0
- data/fixtures/dist.female.first.gz +0 -0
- data/lib/human_name_parser/name.rb +12 -3
- data/lib/human_name_parser/version.rb +1 -1
- data/spec/name_spec.rb +35 -169
- metadata +5 -4
data/.gitignore
CHANGED
Binary file
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module HumanNameParser
|
2
2
|
class Name
|
3
3
|
PREFIXES = ['mr', 'ms', 'miss', 'mrs', 'sir', 'prof', 'professor', 'md', 'dr']
|
4
|
-
SUFFIXES = ['esq','esquire','jr','sr','2','ii','iii','iv', 'v', 'phd', 'md', 'do', 'dc', 'dds']
|
4
|
+
SUFFIXES = ['esq','esquire','jr','sr','2', 'i', 'ii','iii','iv', 'v', 'phd', 'md', 'do', 'dc', 'dds']
|
5
5
|
LAST_PREFIXES = ['al', 'bar','ben','bin','da','dal','de la', 'de', 'del', 'der', 'di', 'el', 'ibn', 'la', 'le', 'mc', 'san', 'st', 'ste', 'van', 'van der', 'van den', 'vel','von']
|
6
6
|
|
7
7
|
attr_accessor :first, :middle, :last, :prefix, :suffix
|
@@ -128,9 +128,18 @@ module HumanNameParser
|
|
128
128
|
match = @input_string.match(",")
|
129
129
|
normalized = ""
|
130
130
|
if match
|
131
|
-
|
131
|
+
normalized_first, normalized_last = [match.post_match.strip, match.pre_match.strip]
|
132
|
+
|
133
|
+
# in case suffix follows right side of comma
|
134
|
+
split_right_side = normalized_first.split(' ')
|
135
|
+
while is_suffix?(split_right_side.last)
|
136
|
+
normalized_last += ' ' + split_right_side.pop
|
137
|
+
|
138
|
+
# prune suffix from first name group
|
139
|
+
normalized_first = split_right_side.join(' ')
|
140
|
+
end
|
132
141
|
end
|
133
|
-
|
142
|
+
[normalized_first, normalized_last].map {|n| n.split(" ")}.flatten
|
134
143
|
end
|
135
144
|
|
136
145
|
def split_first_middle_last
|
data/spec/name_spec.rb
CHANGED
@@ -1,181 +1,47 @@
|
|
1
1
|
require 'human_name_parser/name'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
let(:full_name) { "Marley Mante PhD" }
|
17
|
-
it "should parse the name" do
|
18
|
-
@name = HumanNameParser::Name.new full_name
|
19
|
-
@name.first.should == 'Marley'
|
20
|
-
@name.last.should == 'Mante'
|
21
|
-
@name.middle.should == ''
|
22
|
-
@name.suffix.should == 'PhD'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context "when full name is Marley Mante" do
|
27
|
-
let(:full_name) { "Marley Mante" }
|
28
|
-
it "should parse the name" do
|
29
|
-
@name = HumanNameParser::Name.new full_name
|
30
|
-
@name.first.should == 'Marley'
|
31
|
-
@name.last.should == 'Mante'
|
32
|
-
@name.middle.should == ''
|
33
|
-
@name.suffix.should == ''
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context "when full name is Marley" do
|
38
|
-
let(:full_name) { "Marley" }
|
39
|
-
it "should parse the name" do
|
40
|
-
@name = HumanNameParser::Name.new full_name
|
41
|
-
@name.first.should == 'Marley'
|
42
|
-
@name.last.should == ''
|
43
|
-
@name.middle.should == ''
|
44
|
-
@name.suffix.should == ''
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "when full name is Marley Mante, esq." do
|
49
|
-
let(:full_name) { "Marley Mante, esq." }
|
50
|
-
it "should parse the name" do
|
51
|
-
@name = HumanNameParser::Name.new full_name
|
52
|
-
@name.first.should == 'Marley'
|
53
|
-
@name.last.should == 'Mante'
|
54
|
-
@name.middle.should == ''
|
55
|
-
@name.suffix.should == 'esq.'
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'when full name is Mary Lou Smith' do
|
60
|
-
let(:full_name) { "Mary Lou Smith" }
|
61
|
-
before do
|
62
|
-
@name = HumanNameParser::Name.new full_name
|
63
|
-
end
|
64
|
-
|
65
|
-
it "gets first name" do
|
66
|
-
@name.first.should == 'Mary'
|
67
|
-
end
|
68
|
-
|
69
|
-
it "gets last name" do
|
70
|
-
@name.last.should == 'Smith'
|
71
|
-
end
|
72
|
-
|
73
|
-
it "gets middle" do
|
74
|
-
@name.middle.should == 'Lou'
|
75
|
-
end
|
76
|
-
|
77
|
-
it "gets prefix" do
|
78
|
-
@name.prefix.should == ''
|
79
|
-
end
|
80
|
-
|
81
|
-
it "gets suffix" do
|
82
|
-
@name.suffix.should == ''
|
83
|
-
end
|
84
|
-
|
85
|
-
it "gets initials" do
|
86
|
-
@name.initials.should == 'MLS'
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
context 'when full name is Mr. Alphonse di Morel Jr. Esq.' do
|
91
|
-
let(:full_name) { "Mr. Alphonse di Morel Jr. Esq." }
|
92
|
-
before { @name = HumanNameParser::Name.new full_name }
|
93
|
-
|
94
|
-
it "gets first" do
|
95
|
-
@name.first.should == 'Alphonse'
|
96
|
-
end
|
3
|
+
NAMES = [
|
4
|
+
['', ['', '', '', '', '', '']],
|
5
|
+
['Downey, Robert Jr.', ['Robert', '', 'Downey', '', 'Jr.', 'RD']],
|
6
|
+
['Mr. Alphonse di Morel Jr. Esq.', ['Alphonse', '', 'di Morel', 'Mr.', 'Jr. Esq.', 'AD']],
|
7
|
+
['Mary Lou Smith', ['Mary', 'Lou', 'Smith', '', '', 'MLS']],
|
8
|
+
['Marley', ['Marley', '', '', '', '', 'M']],
|
9
|
+
['Marley Mante', ['Marley', '', 'Mante', '', '', 'MM']],
|
10
|
+
['Marley Mante PhD', ['Marley', '', 'Mante', '', 'PhD', 'MM']],
|
11
|
+
['Marley Mante, esq.', ['Marley', '', 'Mante', '', 'esq.', 'MM']],
|
12
|
+
["Björn Charles van der O'Malley", ['Björn', 'Charles', "van der O'Malley", '', '', 'BCV']],
|
13
|
+
['Alex Rothlenson-ben-Elsburghmohampton', ['Alex', '', 'Rothlenson-ben-Elsburghmohampton', '', '', 'AR']],
|
14
|
+
['1234 Anywhere St., North Pole, SD 22323', ['', '', '', '', '', '']]
|
15
|
+
]
|
97
16
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
it "gets prefix" do
|
103
|
-
@name.prefix.should == 'Mr.'
|
104
|
-
end
|
105
|
-
|
106
|
-
it "gets suffix" do
|
107
|
-
@name.suffix.should == 'Jr. Esq.'
|
108
|
-
end
|
109
|
-
|
110
|
-
it "gets initials" do
|
111
|
-
@name.initials.should == 'AD'
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
context 'when full name is ROBOTO' do
|
116
|
-
let(:full_name) { "ROBOTO" }
|
117
|
-
before { @name = HumanNameParser::Name.new full_name }
|
118
|
-
|
119
|
-
it "gets first" do
|
120
|
-
@name.first.should == 'ROBOTO'
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'gets initials' do
|
124
|
-
@name.initials.should == 'R'
|
125
|
-
end
|
126
|
-
|
127
|
-
it "doesn't get last" do
|
128
|
-
@name.last.should == ''
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
context 'when full name is Downey Jr., Robert' do
|
133
|
-
let(:full_name) { 'Downey Jr., Robert' }
|
134
|
-
before { @name = HumanNameParser::Name.new full_name }
|
135
|
-
|
136
|
-
it "gets first" do
|
137
|
-
@name.first.should == 'Robert'
|
138
|
-
end
|
139
|
-
|
140
|
-
it 'gets initials' do
|
141
|
-
@name.initials.should == 'RD'
|
142
|
-
end
|
143
|
-
|
144
|
-
it "gets last" do
|
145
|
-
@name.last.should == 'Downey'
|
146
|
-
end
|
147
|
-
|
148
|
-
it "gets middle" do
|
149
|
-
@name.middle.should == ''
|
150
|
-
end
|
151
|
-
|
152
|
-
it "gets suffix" do
|
153
|
-
@name.suffix.should == 'Jr.'
|
154
|
-
end
|
155
|
-
end
|
17
|
+
describe HumanNameParser::Name do
|
18
|
+
NAMES.each do |name_array|
|
19
|
+
context "when full name is #{ name_array.first.inspect }" do
|
20
|
+
before { @name = HumanNameParser::Name.new name_array.first }
|
156
21
|
|
157
|
-
|
158
|
-
|
159
|
-
|
22
|
+
it "gets first name" do
|
23
|
+
@name.first.should == name_array[1][0]
|
24
|
+
end
|
160
25
|
|
161
|
-
|
162
|
-
|
163
|
-
|
26
|
+
it "gets middle name" do
|
27
|
+
@name.middle.should == name_array[1][1]
|
28
|
+
end
|
164
29
|
|
165
|
-
|
166
|
-
|
167
|
-
|
30
|
+
it "gets last name" do
|
31
|
+
@name.last.should == name_array[1][2]
|
32
|
+
end
|
168
33
|
|
169
|
-
|
170
|
-
|
171
|
-
|
34
|
+
it "gets prefix" do
|
35
|
+
@name.prefix.should == name_array[1][3]
|
36
|
+
end
|
172
37
|
|
173
|
-
|
174
|
-
|
175
|
-
|
38
|
+
it "gets suffix" do
|
39
|
+
@name.suffix.should == name_array[1][4]
|
40
|
+
end
|
176
41
|
|
177
|
-
|
178
|
-
|
42
|
+
it "gets initials" do
|
43
|
+
@name.initials.should == name_array[1][5]
|
44
|
+
end
|
179
45
|
end
|
180
46
|
end
|
181
47
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: human_name_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 5
|
10
|
+
version: 0.0.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Adam Bachman
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-11-
|
18
|
+
date: 2011-11-14 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- LICENSE
|
62
62
|
- README.md
|
63
63
|
- Rakefile
|
64
|
+
- fixtures/dist.female.first.gz
|
64
65
|
- fixtures/test_names.txt
|
65
66
|
- human_name_parser.gemspec
|
66
67
|
- lib/human_name_parser.rb
|