voxbi 0.3.0 → 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (270) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/bin/voxbi +3 -2
  4. data/data/{paires_disponibles.csv → available_pairs.csv} +1 -0
  5. data/data/conversion.csv +10 -10
  6. data/data/{phono.json → dictionary.json} +1 -1
  7. data/data/exceptions.csv +1 -0
  8. data/data/{liaisons.csv → linkage.csv} +0 -0
  9. data/data/pairs.wav +0 -0
  10. data/data/{paires → pairs}/_.ogg +0 -0
  11. data/data/{paires → pairs}/a.ogg +0 -0
  12. data/data/pairs/b.ogg +0 -0
  13. data/data/{paires → pairs}/ba-old1.ogg +0 -0
  14. data/data/{paires → pairs}/ba.ogg +0 -0
  15. data/data/{paires → pairs}/be.ogg +0 -0
  16. data/data/{paires → pairs}/bi-old1.ogg +0 -0
  17. data/data/{paires → pairs}/bi.ogg +0 -0
  18. data/data/{paires → pairs}/bibi.ogg +0 -0
  19. data/data/{paires → pairs}/bo.ogg +0 -0
  20. data/data/{paires → pairs}/bu.ogg +0 -0
  21. data/data/{paires → pairs}/by.ogg +0 -0
  22. data/data/{paires → pairs}/b/305/223.ogg +0 -0
  23. data/data/{paires → pairs}/b/311/224.ogg +0 -0
  24. data/data/{paires → pairs}/b/316/261.ogg +0 -0
  25. data/data/{paires → pairs}/b/317/203.ogg +0 -0
  26. data/data/{paires → pairs}/b/317/265.ogg +0 -0
  27. data/data/{paires → pairs}/d.ogg +0 -0
  28. data/data/{paires → pairs}/da.ogg +0 -0
  29. data/data/{paires → pairs}/de.ogg +0 -0
  30. data/data/{paires → pairs}/di.ogg +0 -0
  31. data/data/{paires → pairs}/do.ogg +0 -0
  32. data/data/{paires → pairs}/du.ogg +0 -0
  33. data/data/{paires → pairs}/dy.ogg +0 -0
  34. data/data/{paires → pairs}/d/303/270.ogg +0 -0
  35. data/data/{paires → pairs}/d/305/223.ogg +0 -0
  36. data/data/{paires → pairs}/d/311/224.ogg +0 -0
  37. data/data/{paires → pairs}/d/316/261.ogg +0 -0
  38. data/data/{paires → pairs}/d/317/203.ogg +0 -0
  39. data/data/pairs/d/317/265.ogg +0 -0
  40. data/data/{paires → pairs}/e.ogg +0 -0
  41. data/data/{paires → pairs}/error.ogg +0 -0
  42. data/data/{paires → pairs}/f.ogg +0 -0
  43. data/data/{paires → pairs}/fa.ogg +0 -0
  44. data/data/{paires → pairs}/fe.ogg +0 -0
  45. data/data/{paires → pairs}/fi.ogg +0 -0
  46. data/data/{paires → pairs}/fo.ogg +0 -0
  47. data/data/{paires → pairs}/fu.ogg +0 -0
  48. data/data/{paires → pairs}/fy.ogg +0 -0
  49. data/data/{paires → pairs}/f/303/270.ogg +0 -0
  50. data/data/{paires → pairs}/f/305/223.ogg +0 -0
  51. data/data/{paires → pairs}/f/311/224.ogg +0 -0
  52. data/data/{paires → pairs}/f/311/233.ogg +0 -0
  53. data/data/{paires → pairs}/f/316/261.ogg +0 -0
  54. data/data/{paires → pairs}/f/317/203.ogg +0 -0
  55. data/data/{paires → pairs}/f/317/265.ogg +0 -0
  56. data/data/{paires → pairs}/g.ogg +0 -0
  57. data/data/{paires → pairs}/ga.ogg +0 -0
  58. data/data/{paires → pairs}/ge.ogg +0 -0
  59. data/data/{paires → pairs}/gi.ogg +0 -0
  60. data/data/{paires → pairs}/go.ogg +0 -0
  61. data/data/{paires → pairs}/gu.ogg +0 -0
  62. data/data/{paires → pairs}/gy.ogg +0 -0
  63. data/data/{paires → pairs}/g/305/223.ogg +0 -0
  64. data/data/{paires → pairs}/g/311/224.ogg +0 -0
  65. data/data/{paires → pairs}/g/311/233.ogg +0 -0
  66. data/data/{paires → pairs}/g/317/203.ogg +0 -0
  67. data/data/{paires → pairs}/i.ogg +0 -0
  68. data/data/{paires → pairs}/il.ogg +0 -0
  69. data/data/{paires → pairs}/j.ogg +0 -0
  70. data/data/{paires → pairs}/je.ogg +0 -0
  71. data/data/{paires → pairs}/jo.ogg +0 -0
  72. data/data/{paires → pairs}/ju.ogg +0 -0
  73. data/data/{paires → pairs}/j/303/270.ogg +0 -0
  74. data/data/{paires → pairs}/j/311/224.ogg +0 -0
  75. data/data/{paires → pairs}/j/311/233.ogg +0 -0
  76. data/data/{paires → pairs}/j/316/261.ogg +0 -0
  77. data/data/{paires → pairs}/j/317/203.ogg +0 -0
  78. data/data/{paires → pairs}/j/317/265.ogg +0 -0
  79. data/data/{paires → pairs}/k.ogg +0 -0
  80. data/data/{paires → pairs}/ka.ogg +0 -0
  81. data/data/{paires → pairs}/ka.oggpaires.wav +0 -0
  82. data/data/{paires → pairs}/ke.ogg +0 -0
  83. data/data/{paires → pairs}/ki.ogg +0 -0
  84. data/data/{paires → pairs}/ko.ogg +0 -0
  85. data/data/{paires → pairs}/ku.ogg +0 -0
  86. data/data/{paires → pairs}/ky.ogg +0 -0
  87. data/data/{paires → pairs}/k/303/270.ogg +0 -0
  88. data/data/{paires → pairs}/k/305/223.ogg +0 -0
  89. data/data/{paires → pairs}/k/311/224.ogg +0 -0
  90. data/data/{paires → pairs}/k/311/233.ogg +0 -0
  91. data/data/{paires → pairs}/k/316/261.ogg +0 -0
  92. data/data/{paires → pairs}/k/317/200.ogg +0 -0
  93. data/data/{paires → pairs}/k/317/203.ogg +0 -0
  94. data/data/{paires → pairs}/k/317/265.ogg +0 -0
  95. data/data/{paires → pairs}/l.ogg +0 -0
  96. data/data/{paires → pairs}/la.ogg +0 -0
  97. data/data/{paires → pairs}/le.ogg +0 -0
  98. data/data/{paires → pairs}/li.ogg +0 -0
  99. data/data/{paires → pairs}/lo.ogg +0 -0
  100. data/data/{paires → pairs}/lu.ogg +0 -0
  101. data/data/{paires → pairs}/ly.ogg +0 -0
  102. data/data/{paires → pairs}/l/303/270.ogg +0 -0
  103. data/data/{paires → pairs}/l/305/223.ogg +0 -0
  104. data/data/{paires → pairs}/l/311/224.ogg +0 -0
  105. data/data/{paires → pairs}/l/311/233.ogg +0 -0
  106. data/data/{paires → pairs}/l/316/261.ogg +0 -0
  107. data/data/{paires → pairs}/l/317/203.ogg +0 -0
  108. data/data/{paires → pairs}/l/317/265.ogg +0 -0
  109. data/data/{paires → pairs}/m.ogg +0 -0
  110. data/data/{paires → pairs}/ma.ogg +0 -0
  111. data/data/{paires → pairs}/me.ogg +0 -0
  112. data/data/{paires → pairs}/mi.ogg +0 -0
  113. data/data/{paires → pairs}/mo.ogg +0 -0
  114. data/data/{paires → pairs}/mu.ogg +0 -0
  115. data/data/{paires → pairs}/my.ogg +0 -0
  116. data/data/{paires → pairs}/m/305/223.ogg +0 -0
  117. data/data/{paires → pairs}/m/311/224.ogg +0 -0
  118. data/data/{paires → pairs}/m/311/233.ogg +0 -0
  119. data/data/{paires → pairs}/m/316/261.ogg +0 -0
  120. data/data/{paires → pairs}/m/317/203.ogg +0 -0
  121. data/data/{paires → pairs}/m/317/265.ogg +0 -0
  122. data/data/{paires → pairs}/n(old).ogg +0 -0
  123. data/data/{paires → pairs}/n.ogg +0 -0
  124. data/data/{paires → pairs}/na.ogg +0 -0
  125. data/data/{paires → pairs}/ne.ogg +0 -0
  126. data/data/{paires → pairs}/ni.ogg +0 -0
  127. data/data/{paires → pairs}/nu.ogg +0 -0
  128. data/data/{paires → pairs}/ny.ogg +0 -0
  129. data/data/{paires → pairs}/n/305/223.ogg +0 -0
  130. data/data/{paires → pairs}/n/311/224.ogg +0 -0
  131. data/data/{paires → pairs}/n/311/233.ogg +0 -0
  132. data/data/{paires → pairs}/n/316/261.ogg +0 -0
  133. data/data/{paires → pairs}/n/317/203.ogg +0 -0
  134. data/data/{paires → pairs}/n/317/265.ogg +0 -0
  135. data/data/{paires → pairs}/o.ogg +0 -0
  136. data/data/{paires → pairs}/out.ogg +0 -0
  137. data/data/{paires → pairs}/p.ogg +0 -0
  138. data/data/{paires → pairs}/pa.ogg +0 -0
  139. data/data/{paires → pairs}/pe.ogg +0 -0
  140. data/data/{paires → pairs}/phoque.ogg +0 -0
  141. data/data/{paires → pairs}/pi.ogg +0 -0
  142. data/data/{paires → pairs}/po.ogg +0 -0
  143. data/data/{paires → pairs}/pu.ogg +0 -0
  144. data/data/{paires → pairs}/py.ogg +0 -0
  145. data/data/{paires → pairs}/p/303/270.ogg +0 -0
  146. data/data/{paires → pairs}/p/305/223.ogg +0 -0
  147. data/data/{paires → pairs}/p/311/224.ogg +0 -0
  148. data/data/{paires → pairs}/p/311/233.ogg +0 -0
  149. data/data/{paires → pairs}/p/316/261.ogg +0 -0
  150. data/data/{paires → pairs}/p/317/203.ogg +0 -0
  151. data/data/{paires → pairs}/p/317/265.ogg +0 -0
  152. data/data/{paires → pairs}/r.ogg +0 -0
  153. data/data/{paires → pairs}/ra.ogg +0 -0
  154. data/data/{paires → pairs}/re.ogg +0 -0
  155. data/data/{paires → pairs}/ri.ogg +0 -0
  156. data/data/{paires → pairs}/ro.ogg +0 -0
  157. data/data/{paires → pairs}/ru.ogg +0 -0
  158. data/data/{paires → pairs}/ry.ogg +0 -0
  159. data/data/{paires → pairs}/r/305/223.ogg +0 -0
  160. data/data/{paires → pairs}/r/311/224.ogg +0 -0
  161. data/data/{paires → pairs}/r/311/233.ogg +0 -0
  162. data/data/{paires → pairs}/r/316/261.ogg +0 -0
  163. data/data/{paires → pairs}/r/317/203.ogg +0 -0
  164. data/data/{paires → pairs}/r/317/265.ogg +0 -0
  165. data/data/{paires → pairs}/s.ogg +0 -0
  166. data/data/{paires → pairs}/sa.ogg +0 -0
  167. data/data/{paires → pairs}/se.ogg +0 -0
  168. data/data/{paires → pairs}/si.ogg +0 -0
  169. data/data/{paires → pairs}/so.ogg +0 -0
  170. data/data/{paires → pairs}/su.ogg +0 -0
  171. data/data/{paires → pairs}/sy.ogg +0 -0
  172. data/data/{paires → pairs}/s/305/223.ogg +0 -0
  173. data/data/{paires → pairs}/s/311/224.ogg +0 -0
  174. data/data/{paires → pairs}/s/311/233.ogg +0 -0
  175. data/data/{paires → pairs}/s/316/261.ogg +0 -0
  176. data/data/{paires → pairs}/s/317/203.ogg +0 -0
  177. data/data/{paires → pairs}/s/317/265.ogg +0 -0
  178. data/data/{paires → pairs}/t.ogg +0 -0
  179. data/data/{paires → pairs}/ta.ogg +0 -0
  180. data/data/{paires → pairs}/te.ogg +0 -0
  181. data/data/{paires → pairs}/ti.ogg +0 -0
  182. data/data/{paires → pairs}/to.ogg +0 -0
  183. data/data/{paires → pairs}/tu.ogg +0 -0
  184. data/data/{paires → pairs}/ty.ogg +0 -0
  185. data/data/{paires → pairs}/t/303/270.ogg +0 -0
  186. data/data/{paires → pairs}/t/305/223.ogg +0 -0
  187. data/data/{paires → pairs}/t/311/224.ogg +0 -0
  188. data/data/{paires → pairs}/t/311/233.ogg +0 -0
  189. data/data/{paires → pairs}/t/316/261.ogg +0 -0
  190. data/data/{paires → pairs}/t/317/203.ogg +0 -0
  191. data/data/{paires → pairs}/t/317/265.ogg +0 -0
  192. data/data/{paires → pairs}/u.ogg +0 -0
  193. data/data/{paires → pairs}/v.ogg +0 -0
  194. data/data/{paires → pairs}/va.ogg +0 -0
  195. data/data/{paires → pairs}/ve.ogg +0 -0
  196. data/data/{paires → pairs}/vi.ogg +0 -0
  197. data/data/{paires → pairs}/vo.ogg +0 -0
  198. data/data/{paires → pairs}/vu.ogg +0 -0
  199. data/data/{paires → pairs}/vy.ogg +0 -0
  200. data/data/{paires → pairs}/v/303/270.ogg +0 -0
  201. data/data/{paires → pairs}/v/305/223.ogg +0 -0
  202. data/data/{paires → pairs}/v/311/224.ogg +0 -0
  203. data/data/{paires → pairs}/v/311/233.ogg +0 -0
  204. data/data/{paires → pairs}/v/316/261.ogg +0 -0
  205. data/data/{paires → pairs}/v/317/203.ogg +0 -0
  206. data/data/{paires → pairs}/v/317/265.ogg +0 -0
  207. data/data/{paires → pairs}/w.ogg +0 -0
  208. data/data/{paires → pairs}/wa.ogg +0 -0
  209. data/data/{paires → pairs}/we.ogg +0 -0
  210. data/data/{paires → pairs}/wi.ogg +0 -0
  211. data/data/{paires → pairs}/w/311/233.ogg +0 -0
  212. data/data/{paires → pairs}/w/316/261.ogg +0 -0
  213. data/data/{paires → pairs}/w/317/203.ogg +0 -0
  214. data/data/{paires → pairs}/w/317/265.ogg +0 -0
  215. data/data/{paires → pairs}/y.ogg +0 -0
  216. data/data/{paires → pairs}/z.ogg +0 -0
  217. data/data/{paires → pairs}/za.ogg +0 -0
  218. data/data/{paires → pairs}/ze.ogg +0 -0
  219. data/data/{paires → pairs}/zi.ogg +0 -0
  220. data/data/{paires → pairs}/zo.ogg +0 -0
  221. data/data/{paires → pairs}/zu.ogg +0 -0
  222. data/data/{paires → pairs}/zy.ogg +0 -0
  223. data/data/{paires → pairs}/z/311/224.ogg +0 -0
  224. data/data/{paires → pairs}/z/311/233.ogg +0 -0
  225. data/data/{paires → pairs}/z/316/261.ogg +0 -0
  226. data/data/{paires → pairs}/z/317/203.ogg +0 -0
  227. data/data/{paires → pairs}/z/317/265.ogg +0 -0
  228. data/data/{paires → pairs}//302/265.ogg +0 -0
  229. data/data/{paires → pairs}//302/265i.ogg +0 -0
  230. data/data/{paires → pairs}//303/270.ogg +0 -0
  231. data/data/{paires → pairs}//305/223.ogg +0 -0
  232. data/data/{paires → pairs}//311/224.ogg +0 -0
  233. data/data/{paires → pairs}//311/233.ogg +0 -0
  234. data/data/{paires → pairs}//311/262.ogg +0 -0
  235. data/data/{paires → pairs}//312/203.ogg +0 -0
  236. data/data/{paires → pairs}//312/203a.ogg +0 -0
  237. data/data/{paires → pairs}//312/203e.ogg +0 -0
  238. data/data/{paires → pairs}//312/203i.ogg +0 -0
  239. data/data/{paires → pairs}//312/203o.ogg +0 -0
  240. data/data/{paires → pairs}//312/203u.ogg +0 -0
  241. data/data/{paires → pairs}//312/203/311/233.ogg +0 -0
  242. data/data/{paires → pairs}//312/203/316/261.ogg +0 -0
  243. data/data/{paires → pairs}//312/222.ogg +0 -0
  244. data/data/{paires → pairs}//312/222a.ogg +0 -0
  245. data/data/{paires → pairs}//312/222e.ogg +0 -0
  246. data/data/{paires → pairs}//312/222i.ogg +0 -0
  247. data/data/{paires → pairs}//312/222o.ogg +0 -0
  248. data/data/{paires → pairs}//312/222u.ogg +0 -0
  249. data/data/{paires → pairs}//312/222y.ogg +0 -0
  250. data/data/{paires → pairs}//312/222/303/270.ogg +0 -0
  251. data/data/{paires → pairs}//312/222/305/223.ogg +0 -0
  252. data/data/{paires → pairs}//312/222/311/224.ogg +0 -0
  253. data/data/{paires → pairs}//312/222/311/233.ogg +0 -0
  254. data/data/{paires → pairs}//312/222/316/261.ogg +0 -0
  255. data/data/{paires → pairs}//316/261.ogg +0 -0
  256. data/data/{paires → pairs}//317/200.ogg +0 -0
  257. data/data/{paires → pairs}//317/203.ogg +0 -0
  258. data/data/{paires → pairs}//317/265.ogg +0 -0
  259. data/lib/extensions/string.rb +7 -0
  260. data/lib/modules/rulable.rb +47 -0
  261. data/lib/services/get_pairs_service.rb +29 -0
  262. data/lib/services/get_syllables_service.rb +43 -0
  263. data/lib/services/linkage_service.rb +40 -0
  264. data/lib/services/phonetics_converter_service.rb +42 -0
  265. data/lib/services/prepare_text_service.rb +49 -0
  266. data/lib/voxbi.rb +40 -87
  267. data/voxbi.gemspec +12 -12
  268. metadata +288 -266
  269. data/data/paires/b.ogg +0 -0
  270. data/lib/special_chars.rb +0 -1
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,7 @@
1
+ class String
2
+
3
+ def blank?
4
+ self.nil? || self.strip.empty?
5
+ end
6
+
7
+ end
@@ -0,0 +1,47 @@
1
+ require "json"
2
+ require "csv"
3
+
4
+ module Rulable
5
+ DATA_PATH = File.expand_path('../../data', __dir__)
6
+ CSV_FILENAMES = %w(conversion linkage exceptions available_pairs).freeze
7
+ JSON_FILENAMES = %w(dictionary).freeze
8
+
9
+ CSV_FILENAMES.each do |filename|
10
+ define_method(filename) do
11
+ memoize_file_content(filename, :csv)
12
+ end
13
+ end
14
+
15
+ JSON_FILENAMES.each do |filename|
16
+ define_method(filename) do
17
+ memoize_file_content(filename, :json)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def memoize_file_content(filename, file_format)
24
+ instance_variable_get("@#{filename}") ||
25
+ instance_variable_set("@#{filename}", parse_rule_file(filename, file_format))
26
+ end
27
+
28
+ def parse_rule_file(filename, file_format)
29
+ absolute_file_path = absolute_path_for(filename, file_format)
30
+
31
+ case file_format
32
+ when :csv then parse_csv(absolute_file_path)
33
+ when :json then JSON.parse(File.read(absolute_file_path))
34
+ end
35
+ end
36
+
37
+ def parse_csv(file_path)
38
+ parsed_csv = CSV.read(file_path, col_sep: '#')
39
+
40
+ parsed_csv.first.length > 1 ? Hash[parsed_csv] : parsed_csv.flatten
41
+ end
42
+
43
+ def absolute_path_for(filename, file_format)
44
+ "#{DATA_PATH}/#{filename}" + ".#{file_format}"
45
+ end
46
+
47
+ end
@@ -0,0 +1,29 @@
1
+ class GetPairsService
2
+ include Rulable
3
+
4
+ attr_reader :phonetic_text
5
+
6
+ def initialize(phonetic_text)
7
+ @phonetic_text = phonetic_text
8
+ end
9
+
10
+ def call
11
+ phonetic_text.map do |phonetic_word|
12
+ available_pairs_for(phonetic_word)
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def available_pairs_for(phonetic_word)
19
+ word = phonetic_word.dup
20
+
21
+ [].tap do |pairs|
22
+ while word.length != 0
23
+ matching_pair = available_pairs.detect{ |pair| word.match(/^#{pair}/) }
24
+ word.sub!(/^#{matching_pair}/,"")
25
+ pairs << matching_pair
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,43 @@
1
+ class GetSyllablesService
2
+
3
+ VOCALIC_PHONEMS_REGEXP = /[ɛøαϵiaoɔσyuœπe]/
4
+ GLIDES_REGEXP = /[µwj]/
5
+
6
+ attr_reader :phonetic_text
7
+
8
+ def initialize(phonetic_text)
9
+ @phonetic_text = phonetic_text
10
+ end
11
+
12
+ def call
13
+ get_pairs_for(phonetic_text).map do |word_pairs|
14
+ get_syllables_for(word_pairs)
15
+ end.flatten.reject(&:blank?)
16
+ end
17
+
18
+ private
19
+
20
+ def get_syllables_for(pairs)
21
+ [''].tap do |syllables|
22
+ pairs.each do |pair|
23
+ if has_vocalic_phonem?(syllables.last) && has_vocalic_phonem?(pair)
24
+ syllables << pair
25
+ else
26
+ syllables.last << pair
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ def get_pairs_for(text)
33
+ GetPairsService.new(text).call
34
+ end
35
+
36
+ def has_vocalic_phonem?(pair)
37
+ !!(pair =~ VOCALIC_PHONEMS_REGEXP)
38
+ end
39
+
40
+ def is_glide?(pair)
41
+ pair.length == 1 && !!(pair =~ GLIDES_REGEXP)
42
+ end
43
+ end