In Files
- lib/english/participle.rb
- lib/english/ordinal.rb
- lib/english/censor.rb
- lib/english/namecase.rb
- lib/english/dresner.rb
- lib/english/jumble.rb
- lib/english/soundex.rb
- lib/english/class.rb
- lib/english/metaphone.rb
- lib/english/inflect.rb
- lib/english/porter.rb
- lib/english/infinitive.rb
- lib/english/numeral.rb
- lib/english/conjunction.rb
Parent
- Language
Namespace
Methods
- ::abbreviation
- ::conjunction
- ::dirty_words
- ::double_metaphone
- ::dresner
- ::infinitive
- ::infinitives
- ::jumble
- ::metaphone
- ::namecase
- ::numeral
- ::ordinal
- ::plural
- ::present_participle
- ::singular
- ::soundex
- ::soundex_code
- ::stem_porter
- ::trio
- #conjunction
- #double_metaphone
- #dresner
- #infinitive
- #infinitives
- #jumble
- #metaphone
- #namecase
- #numeral
- #ordinal
- #plural
- #pluralize
- #singular
- #singularize
- #soundex
- #stem_porter
Information
English
Public Class Methods
# File lib/english/class.rb, line 5 5: def self.abbreviation 6: 'en' 7: end
English conjunciton.
This is more advanced form of join, as it allows for an English-based terminating separator.
The default type of conjunction —the terminating separator, is “and”, and the default regualt separator is “,”.
[1,2,3].conjunction => "1, 2 and 3 [1,2,3].conjunction(:or) => "1, 2 or 3 [1,2,3].conjunction(:or, ';') => "1; 2 or 3
# File lib/english/conjunction.rb, line 26
26: def self.conjunction(array, type=:and, seperator=",")
27: array = array.to_a
28: type = type.to_s
29: separator = separator.to_s
30: space = space.to_s
31:
32: case array.length
33: when 0
34: ""
35: when 1
36: array[0]
37: when 2
38: "#{array[0]} #{type} #{array[1]}"
39: else
40: [array[0..2].join("#{separator} "), array[1]].join(" #{type} ")
41: end
42: end
# File lib/english/censor.rb, line 5 5: def self.dirty_words 6: %{fuck shit cunt pussy dick asshole niger} 7: end
Scramble the inner characters of words leaving the text still readable (research at Cambridge University, code by KurtDresner).
For example, the above text may result in:
Srblamce the iennr cchrteaars of wodrs lvenaig the txet stlil rbeaadle (rreceash at Cbamigdre Uverintisy, cdoe by KrneruestDr?)
CREDIT: Kurt Dresener
# File lib/english/dresner.rb, line 15
15: def self.dresner(string)
16: string.to_s.gsub(/\B\w+\B/){$&.split(//).sort_by{rand}}
17: end
Return the infinitive form of the given word.
# File lib/english/infinitive.rb, line 841
841: def self.infinitive(word)
842: Infinitive.infinitives(word).first
843: end
Return a list of possible infinitive forms of the given word.
# File lib/english/infinitive.rb, line 836
836: def self.infinitives(word)
837: Infinitive.infinitives(word)
838: end
Jumble letter casing.
"superman".jumble #=> "SUpeRmAn"
# File lib/english/jumble.rb, line 14
14: def self.jumble(string)
15: j = ''
16: string.to_s.split(//).each_with_index{ |c,i| j << ( i % 2 == 0 ? c.downcase : c.upcase ) }
17: j
18: end
Returns a new String with the contents properly namecased.
Perl Version Copyright © Mark Summerfield 1998-2002
Ruby Version Copyright © Aaron Patterson 2006
# File lib/english/namecase.rb, line 12
12: def self.namecase(name)
13: localstring = name.downcase
14: localstring.gsub!(/\b\w/) { |first| first.upcase }
15: localstring.gsub!(/\'\w\b/) { |c| c.downcase } # Lowercase 's
16:
17: # Fixes for "Mac".
18: if localstring =~ /\bMac[A-Za-z]{2,}[^aciozj]\b/ or localstring =~ /\bMc/
19: localstring.gsub!(/\b(Ma?c)([A-Za-z]+)/) { |match| $1 + $2.capitalize }
20: localstring.gsub!(/\bMacEvicius/, 'Macevicius')
21: localstring.gsub!(/\bMacHado/, 'Machado')
22: localstring.gsub!(/\bMacHar/, 'Machar')
23: localstring.gsub!(/\bMacHin/, 'Machin')
24: localstring.gsub!(/\bMacHlin/, 'Machlin')
25: localstring.gsub!(/\bMacIas/, 'Macias')
26: localstring.gsub!(/\bMacIulis/, 'Maciulis')
27: localstring.gsub!(/\bMacKie/, 'Mackie')
28: localstring.gsub!(/\bMacKle/, 'Mackle')
29: localstring.gsub!(/\bMacKlin/, 'Macklin')
30: localstring.gsub!(/\bMacQuarie/, 'Macquarie')
31: end
32: localstring.gsub!('Macmurdo','MacMurdo')
33:
34: # Fixes for "son (daughter) of" etc.
35: localstring.gsub!(/\bAl(?=\s+\w)/, 'al') # al Arabic or forename Al.
36: localstring.gsub!(/\bAp\b/, 'ap') # ap Welsh.
37: localstring.gsub!(/\bBen(?=\s+\w)/,'ben') # ben Hebrew or forename Ben.
38: localstring.gsub!(/\bDell([ae])\b/,'dell\1') # della and delle Italian.
39: localstring.gsub!(/\bD([aeiu])\b/,'d\1') # da, de, di Italian; du French.
40: localstring.gsub!(/\bDe([lr])\b/,'de\1') # del Italian; der Dutch/Flemish.
41: localstring.gsub!(/\bEl\b/,'el') # el Greek or El Spanish.
42: localstring.gsub!(/\bLa\b/,'la') # la French or La Spanish.
43: localstring.gsub!(/\bL([eo])\b/,'l\1') # lo Italian; le French.
44: localstring.gsub!(/\bVan(?=\s+\w)/,'van') # van German or forename Van.
45: localstring.gsub!(/\bVon\b/,'von') # von Dutch/Flemish
46:
47: # Fix roman numeral names
48: localstring.gsub!(
49: / \b ( (?: [Xx]{1,3} | [Xx][Ll] | [Ll][Xx]{0,3} )?
50: (?: [Ii]{1,3} | [Ii][VvXx] | [Vv][Ii]{0,3} )? ) \b /
51: ) { |match| match.upcase }
52:
53: localstring
54: end
Convert an integer to the english spelling of that number.
# File lib/english/numeral.rb, line 16
16: def self.numeral(integer)
17: places = integer.to_i.to_s.split(//).collect{|s| s.to_i}.reverse
18: name = []
19: ((places.length + 2) / 3).times do |p|
20: strings = trio(places[p * 3, 3])
21: name.push(MEGA[p]) if strings.length > 0 and p > 0
22: name += strings
23: end
24: name.push(ONES[0]) unless name.length > 0
25: name.reverse.join(" ")
26: end
Ordinalize turns a number string into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
English.ordinal('1') #=> "1st"
English.ordinal('2') #=> "2nd"
English.ordinal(102) #=> "102nd"
English.ordinal(103) #=> "103rd"
# File lib/english/ordinal.rb, line 14
14: def self.ordinal(number)
15: number_string = number.to_s.strip
16: if md = /\d{1,2}$/.match(number_string)
17: n = md[0].to_i
18: if (11..13).include?(number.to_i % 100)
19: "#{number}th"
20: else
21: case n % 10
22: when 1; "#{number}st"
23: when 2; "#{number}nd"
24: when 3; "#{number}rd"
25: else "#{number}th"
26: end
27: end
28: #number_string.sub(/\d{1,2}$/, r)
29: else
30: number_string
31: end
32: end
# File lib/english/inflect.rb, line 295
295: def self.plural(string)
296: English::Inflect.plural(string)
297: end
# File lib/english/participle.rb, line 3
3: def self.present_participle(word)
4: plural = plural_verb(word.to_s, 2)
5:
6: plural.sub!( /ie$/, 'y' ) or
7: plural.sub!( /ue$/, 'u' ) or
8: plural.sub!( /([auy])e$/, '$1' ) or
9: plural.sub!( /i$/, '' ) or
10: plural.sub!( /([^e])e$/, "\\1" ) or
11: /er$/.match( plural ) or
12: plural.sub!( /([^aeiou][aeiouy]([bdgmnprst]))$/, "\\1\\2" )
13:
14: return "#{plural}ing"
15: end
# File lib/english/inflect.rb, line 290
290: def self.singular(string)
291: English::Inflect.singular(string)
292: end
Ruby implementation of the Soundex algorithm, as described by Knuth in volume 3 of The Art of Computer Programming.
Returns nil if the value couldn’t be calculated b/c of empty-string or invalid character.
"Ruby".soundex #=> "R100"
Based on work by Michael Neumann (neumann@s-direktnet.de)
# File lib/english/soundex.rb, line 16
16: def self.soundex(string)
17: return nil if string.empty?
18:
19: str = string.upcase
20: last_code = soundex_code(str[0,1])
21: soundex_code = str[0,1]
22:
23: for index in 1...(str.size) do
24: return soundex_code if soundex_code.size == 4
25:
26: code = soundex_code(str[index,1])
27:
28: if code == "0" then
29: last_code = nil
30: elsif code == nil then
31: return nil
32: elsif code != last_code then
33: soundex_code += code
34: last_code = code
35: end
36: end
37:
38: return soundex_code + "000"[0,4-soundex_code.size]
39: end
Support function for soundex. Returns code for a single character.
# File lib/english/soundex.rb, line 44
44: def self.soundex_code(char)
45: char.tr! "AEIOUYWHBPFVCSKGJQXZDTLMNR", "00000000111122222222334556"
46: end
Returns the word stem using the Porter Stemming algorithm by Martin Porter.
# File lib/english/porter.rb, line 190
190: def self.stem_porter(string)
191: PorterStemmer.stem(string)
192: end
# File lib/english/numeral.rb, line 29
29: def self.trio(places)
30: strings = []
31: if places[1] == 1
32: strings.push(TEEN[places[0]])
33: elsif places[1] and places[1] > 0
34: strings.push(places[0] == 0 ? TENS[places[1]] : "#{TENS[places[1]]}-#{ONES[places[0]]}")
35: elsif places[0] > 0
36: strings.push(ONES[places[0]])
37: end
38: if places[2] and places[2] > 0
39: strings.push("hundred", ONES[places[2]])
40: end
41: strings
42: end
Public Instance Methods
This is more advanced form of join, as it allows for an English-based terminating separator.
The default type of conjunction —the terminating separator, is “and”, and the default regualt separator is “,”.
[1,2,3].conjunction => "1, 2 and 3 [1,2,3].conjunction(:or) => "1, 2 or 3 [1,2,3].conjunction(:or, ';') => "1; 2 or 3
# File lib/english/conjunction.rb, line 59
59: def conjunction(type=:and, seperator=",")
60: self.class.conjunction(@self, type, separator)
61: end
# File lib/english/metaphone.rb, line 458
458: def double_metaphone
459: self.class.double_metaphone(@self)
460: end
Scramble the inner characters of words leaving the text still readable (research at Cambridge University, code by KurtDresner).
For example, the above text may result in:
Srblamce the iennr cchrteaars of wodrs lvenaig the txet stlil rbeaadle (rreceash at Cbamigdre Uverintisy, cdoe by KrneruestDr?)
CREDIT: Kurt Dresener
# File lib/english/dresner.rb, line 28
28: def dresner
29: self.class.dresner(@self)
30: end
Return the infinitive form of a word.
# File lib/english/infinitive.rb, line 851
851: def infinitive
852: Infinitive.infinitives(@self).first
853: end
Return a list of possible infinitive forms of a word.
# File lib/english/infinitive.rb, line 846
846: def infinitives
847: Infinitive.infinitives(@self)
848: end
Jumble letter casing.
"superman".jumble #=> "SUpeRmAn"
# File lib/english/jumble.rb, line 24
24: def jumble
25: self.class.jumble(@self)
26: end
# File lib/english/metaphone.rb, line 453
453: def metaphone(alt=nil)
454: self.class.metaphone(@self, alt=nil)
455: end
Returns a new String with the contents properly namecased.
# File lib/english/namecase.rb, line 57
57: def namecase
58: self.class.namecase(@self)
59: end
Convert to the english spelling of a number.
10.numeral #=> "10"
# File lib/english/numeral.rb, line 48
48: def numeral
49: self.class.numeral(@self)
50: end
Ordinalize turns a number string into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
'1'.ordinal # => "1st" '2'.ordinal # => "2nd" '102'.ordinal # => "102nd" '103'.ordinal # => "103rd" 1.ordinal # => "1st" 2.ordinal # => "2nd" 102.ordinal # => "102nd" 103.ordinal # => "103rd"
# File lib/english/ordinal.rb, line 48
48: def ordinal
49: self.class.ordinal(@self)
50: end
Convert an English word from plurel to singular.
"boys".singular #=> boy "tomatoes".singular #=> tomato
# File lib/english/inflect.rb, line 316
316: def plural
317: self.class.plural(@self)
318: end
Convert an English word from plurel to singular.
"boys".singular #=> boy "tomatoes".singular #=> tomato
# File lib/english/inflect.rb, line 304
304: def singular
305: self.class.singular(@self)
306: end
Ruby implementation of the Soundex algorithm, as described by Knuth in volume 3 of The Art of Computer Programming.
Returns nil if the value couldn’t be calculated b/c of empty-string or invalid character.
"Ruby".soundex #=> "R100"
Based on work by Michael Neumann (neumann@s-direktnet.de)
# File lib/english/soundex.rb, line 58
58: def soundex
59: self.class.soundex(@self)
60: end
Disabled; run with --debug to generate this.