phonetics 1.5.2 → 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 551a25deff1697f690f93a1b0df33eb6c47800d4b77ac313be9a27583439d32f
4
- data.tar.gz: 142a54e76defe55e5fbef13df79bc1d308ed46fa8cbcb8da3d4d1dde3a78447d
3
+ metadata.gz: 04d203a13c081a435c9d94accd6af2dc517d7992349cda641f415e35c5cc787d
4
+ data.tar.gz: b8c3376c2db3878a0d3c409814abf0bb70d6fc403ce3866a11d65e8bcb01c5c8
5
5
  SHA512:
6
- metadata.gz: fa2d8c53d0536936b64e13ca6aae3ada7b75d327e399d2301424009264b53aeaacf961b1bdd39ab54af8e8f7087e2dd277b94d99f373f445e070999ba18535fa
7
- data.tar.gz: 2b0c41e648878df94ff8b493e7484ecbee544cb430ebc0a87ea1a11323c8a546123c2d5b2e3f96211ccee2a04b7e19cdf20ab46abc5c7d6fe15ab6a13e9ed8aa
6
+ metadata.gz: 5dfc217801d09dd1d835debd6440886e56c790c8886291147302b4a7b16f4aafeda51943cc56657d743e9dfab62cd663fae3adb3ea48656e0a6b5ce0cd1130ab
7
+ data.tar.gz: 1e41e3f77efe3af5a8095a0be58767c3a6ceb3c51ef7add5bebc40db94e14c988e80de221943ef010b7c0818d34a63b84af2290c57c90c6c23a4e9a69f8f9eff
data/.gitignore CHANGED
@@ -13,3 +13,4 @@
13
13
  .ruby-version
14
14
  *.so
15
15
  Gemfile.lock
16
+ *.bundle
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.2
1
+ 1.5.3
Binary file
Binary file
@@ -1,33 +1,31 @@
1
1
  #include "ruby.h"
2
+ #include <stdbool.h>
2
3
  #include "./phonetic_cost.h"
3
4
 
4
- #define NDEBUG true
5
- #ifdef NDEBUG
6
- #define debug(M, ...)
7
- #else
8
- #define debug(M, ...) printf(M, ##__VA_ARGS__)
9
- #endif
5
+ #define debug(M, ...) if (verbose) printf(M, ##__VA_ARGS__)
10
6
 
11
7
  VALUE Binding = Qnil;
12
8
 
13
9
  /* Function declarations */
14
10
 
15
11
  void Init_c_levenshtein();
16
- void set_initial(double *d, int *string1, int string1_length, int *string2, int string2_length);
17
- void print_matrix(double *d, int *string1, int string1_length, int *string2, int string2_length);
18
- VALUE method_internal_phonetic_distance(VALUE self, VALUE _string1, VALUE _string2);
12
+
13
+ void set_initial(double *d, int *string1, int string1_length, int *string2, int string2_length, bool verbose);
14
+ void print_matrix(double *d, int *string1, int string1_length, int *string2, int string2_length, bool verbose);
15
+ VALUE method_internal_phonetic_distance(VALUE self, VALUE _string1, VALUE _string2, VALUE _verbose);
19
16
 
20
17
  /* Function implemitations */
21
18
 
22
19
  void Init_c_levenshtein() {
23
20
  Binding = rb_define_module("PhoneticsLevenshteinCBinding");
24
- rb_define_method(Binding, "internal_phonetic_distance", method_internal_phonetic_distance, 2);
21
+ rb_define_method(Binding, "internal_phonetic_distance", method_internal_phonetic_distance, 3);
25
22
  }
26
23
 
27
- VALUE method_internal_phonetic_distance(VALUE self, VALUE _string1, VALUE _string2){
24
+ VALUE method_internal_phonetic_distance(VALUE self, VALUE _string1, VALUE _string2, VALUE _verbose){
28
25
 
29
26
  VALUE *string1_ruby = RARRAY_PTR(_string1);
30
27
  VALUE *string2_ruby = RARRAY_PTR(_string2);
28
+ bool verbose = _verbose;
31
29
  int string1_length = (int) RARRAY_LEN(_string1);
32
30
  int string2_length = (int) RARRAY_LEN(_string2);
33
31
  // We name them as 'strings' but in C-land we're representing our strings as
@@ -47,7 +45,7 @@ VALUE method_internal_phonetic_distance(VALUE self, VALUE _string1, VALUE _strin
47
45
 
48
46
  // Guard clause for two empty strings
49
47
  if (string1_length == 0 && string2_length == 0)
50
- return DBL2NUM(0.0d);
48
+ return DBL2NUM(0.0);
51
49
 
52
50
  //
53
51
  // Intial data setup
@@ -74,10 +72,10 @@ VALUE method_internal_phonetic_distance(VALUE self, VALUE _string1, VALUE _strin
74
72
 
75
73
  // First, set the top row and left column of the matrix using the sequential
76
74
  // phonetic edit distance of string1 and string2, respectively
77
- set_initial(d, string1, string1_length, string2, string2_length);
75
+ set_initial(d, string1, string1_length, string2, string2_length, verbose);
78
76
 
79
77
  debug("before:\n");
80
- print_matrix(d, string1, string1_length, string2, string2_length);
78
+ print_matrix(d, string1, string1_length, string2, string2_length, verbose);
81
79
 
82
80
  // Then walk through the matrix and fill in each cell with the lowest-cost
83
81
  // phonetic edit distance for that matrix cell.
@@ -117,7 +115,7 @@ VALUE method_internal_phonetic_distance(VALUE self, VALUE _string1, VALUE _strin
117
115
 
118
116
  d[(j * (string1_length+1)) + i] = min + cost;
119
117
  debug("\n");
120
- print_matrix(d, string1, string1_length, string2, string2_length);
118
+ print_matrix(d, string1, string1_length, string2, string2_length, verbose);
121
119
  }
122
120
  }
123
121
 
@@ -141,7 +139,7 @@ VALUE method_internal_phonetic_distance(VALUE self, VALUE _string1, VALUE _strin
141
139
  // Subsequent values are the cumulative phonetic distance between each
142
140
  // phoneme within the same string.
143
141
  // "aek" -> [0.0, 1.0, 1.61, 2.61]
144
- void set_initial(double *d, int *string1, int string1_length, int *string2, int string2_length) {
142
+ void set_initial(double *d, int *string1, int string1_length, int *string2, int string2_length, bool verbose) {
145
143
 
146
144
  double distance_between_first_phonemes;
147
145
  int i, j;
@@ -154,6 +152,7 @@ void set_initial(double *d, int *string1, int string1_length, int *string2, int
154
152
  distance_between_first_phonemes = phonetic_cost(string1[0], string2[0]);
155
153
  }
156
154
 
155
+ d[0] = (double) 0.0;
157
156
  // Set the first value of string1's sequential phonetic calculation (maps to
158
157
  // cell x=1, y=0)
159
158
  d[1] = distance_between_first_phonemes;
@@ -176,7 +175,7 @@ void set_initial(double *d, int *string1, int string1_length, int *string2, int
176
175
  }
177
176
 
178
177
  // A handy visualization for developers
179
- void print_matrix(double *d, int *string1, int string1_length, int *string2, int string2_length) {
178
+ void print_matrix(double *d, int *string1, int string1_length, int *string2, int string2_length, bool verbose) {
180
179
  int i, j;
181
180
  debug(" ");
182
181
  for (i=0; i < string1_length; i++) {
@@ -15,11 +15,12 @@ module Phonetics
15
15
  module Levenshtein
16
16
  extend ::PhoneticsLevenshteinCBinding
17
17
 
18
- def self.distance(str1, str2)
18
+ def self.distance(str1, str2, verbose = false)
19
19
  ensure_is_phonetic!(str1, str2)
20
20
  internal_phonetic_distance(
21
21
  Phonetics.as_utf_8_long(str1),
22
- Phonetics.as_utf_8_long(str2)
22
+ Phonetics.as_utf_8_long(str2),
23
+ verbose
23
24
  )
24
25
  end
25
26
 
@@ -34,8 +34,8 @@ module Phonetics
34
34
  walk.last[:distance]
35
35
  end
36
36
 
37
- def self.distance(str1, str2)
38
- new(str1, str2).distance
37
+ def self.distance(str1, str2, verbose = false)
38
+ new(str1, str2, verbose).distance
39
39
  end
40
40
 
41
41
  private
data/phonetics.gemspec CHANGED
@@ -11,12 +11,11 @@ Gem::Specification.new do |spec|
11
11
  spec.homepage = 'https://github.com/JackDanger/phonetics'
12
12
  spec.license = 'MIT'
13
13
 
14
-
15
- spec.extensions = ["ext/c_levenshtein/extconf.rb"]
14
+ spec.extensions = ['ext/c_levenshtein/extconf.rb']
16
15
 
17
16
  # Specify which files should be added to the gem when it is released.
18
17
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
18
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
19
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
20
  end
22
21
  spec.require_paths = ['lib']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phonetics
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jack Danger
@@ -113,12 +113,13 @@ files:
113
113
  - README.md
114
114
  - Rakefile
115
115
  - VERSION
116
+ - _site/orthographic_example.png
117
+ - _site/phonetic_example.png
116
118
  - ext/c_levenshtein/extconf.rb
117
119
  - ext/c_levenshtein/levenshtein.c
118
120
  - ext/c_levenshtein/phonetic_cost.c
119
121
  - ext/c_levenshtein/phonetic_cost.h
120
122
  - lib/phonetics.rb
121
- - lib/phonetics/c_levenshtein.bundle
122
123
  - lib/phonetics/levenshtein.rb
123
124
  - lib/phonetics/ruby_levenshtein.rb
124
125
  - lib/phonetics/version.rb
Binary file