Skip to content

Commit e105cdf

Browse files
committed
fix rules in bgnpcgn-rus-Cyrl-Latn-1947 & internal test. Update rules algoritm #5
1 parent 9c7fd35 commit e105cdf

File tree

5 files changed

+108
-69
lines changed

5 files changed

+108
-69
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.DS_Store
22
*.swp
33
.vscode/
4+
pkg/

Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PATH
22
remote: .
33
specs:
4-
interscript (0.1.1)
4+
interscript (0.1.2)
55

66
GEM
77
remote: https://rubygems.org/

lib/interscript.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,17 @@ def transliterate(system_code, string)
2727
rules = system["map"]["rules"] || []
2828
charmap = system["map"]["characters"] || {}
2929

30+
output = string.clone
31+
offsets = Array.new string.size, 1
3032
rules.each do |r|
31-
string.gsub! %r{#{r["pattern"]}}, r["result"]
33+
string.scan(/#{r["pattern"]}/) do |match|
34+
pos = Regexp.last_match.offset(0).first
35+
output[offsets[0..pos].sum - 1] = r["result"]
36+
offsets[pos] = r["result"].size - match.size + 1
37+
end
3238
end
3339

34-
string.split('').map do |char|
40+
output.split('').map do |char|
3541
charmap[char] || char
3642
end.join('')
3743
end

maps/bgnpcgn-rus-Cyrl-Latn-1947.yaml

Lines changed: 91 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -102,69 +102,97 @@ tests:
102102
Число открепительных удостоверений, утраченных в окружной избирательной комиссии
103103
104104
expected: |
105-
VYBORY DEPUTATOV GOSUDARSTVENNOY DUMY FEDERAL’NOGO SOBRANIYA ROSSIYSKOY FEDERATSII SED’MOGO SOZYVA
106-
DATA GOLOSOVANIYA: 18.09.2016
107-
108-
NAIMENOVANIE IZBIRATEL’NOY KOMISSII: TSIK ROSSII
109-
110-
SVODNAYA TABLITSA REZUL’TATOV VYBOROV PO FEDERAL’NOMU IZBIRATEL’NOMU OKRUGU
111-
112-
113-
CHISLO IZBIRATELEY, VNESENNYKH V SPISOK IZBIRATELEY NA MOMENT OKONCHANIYA GOLOSOVANIYA
114-
CHISLO IZBIRATEL’NYKH BYULLETENEY, POLUCHENNYKH UCHASTKOVOY IZBIRATEL’NOY KOMISSIEY
115-
CHISLO IZBIRATEL’NYKH BYULLETENEY, VYDANNYKH IZBIRATELYAM, PROGOLOSOVAVSHIM DOSROCHNO
116-
CHISLO IZBIRATEL’NYKH BYULLETENEY, VYDANNYKH V POMESHCHENII DLYA GOLOSOVANIYA V DEN’ GOLOSOVANIYA
117-
CHISLO IZBIRATEL’NYKH BYULLETENEY, VYDANNYKH VNE POMESHCHENIYA DLYA GOLOSOVANIYA V DEN’ GOLOSOVANIYA
118-
CHISLO POGASHENNYKH IZBIRATEL’NYKH BYULLETENEY
119-
CHISLO IZBIRATEL’NYKH BYULLETENEY, SODERZHASHCHIKHSYA V PERENOSNYKH YASHCHIKAKH DLYA GOLOSOVANIYA
120-
CHISLO IZBIRATEL’NYKH BYULLETENEY, SODERZHASHCHIKHSYA V STATSIONARNYKH YASHCHIKAKH DLYA GOLOSOVANIYA
121-
CHISLO NEDEYSTVITEL’NYKH IZBIRATEL’NYKH BYULLETENEY
122-
CHISLO DEYSTVITEL’NYKH IZBIRATEL’NYKH BYULLETENEY
123-
CHISLO OTKREPITEL’NYKH UDOSTOVERENIY, POLUCHENNYKH UCHASTKOVOY IZBIRATEL’NOY KOMISSIEY
124-
CHISLO OTKREPITEL’NYKH UDOSTOVERENIY, VYDANNYKH NA IZBIRATEL’NOM UCHASTKE DO DNYA GOLOSOVANIYA
125-
CHISLO IZBIRATELEY, PROGOLOSOVAVSHIKH PO OTKREPITEL’NYM UDOSTOVERENIYAM NA IZBIRATEL’NOM UCHASTKE
126-
CHISLO POGASHENNYKH NEISPOL’ZOVANNYKH OTKREPITEL’NYKH UDOSTOVERENIY
127-
CHISLO OTKREPITEL’NYKH UDOSTOVERENIY, VYDANNYKH IZBIRATELYAM TERRITORIAL’NOY IZBIRATEL’NOY KOMISSIEY
128-
CHISLO UTRACHENNYKH OTKREPITEL’NYKH UDOSTOVERENIY
129-
CHISLO UTRACHENNYKH IZBIRATEL’NYKH BYULLETENEY
130-
CHISLO IZBIRATEL’NYKH BYULLETENEY, NE UCHTENNYKH PRI POLUCHENII
131-
1. VSEROSSIYSKAYA POLITICHESKAYA PARTIYA "RODINA"
132-
2. POLITICHESKAYA PARTIYA KOMMUNISTICHESKAYA PARTIYA KOMMUNISTY ROSSII
133-
3. POLITICHESKAYA PARTIYA "ROSSIYSKAYA PARTIYA PENSIONEROV ZA SPRAVEDLIVOST’"
134-
4. VSEROSSIYSKAYA POLITICHESKAYA PARTIYA "EDINAYA ROSSIYA"
135-
5. POLITICHESKAYA PARTIYA "ROSSIYSKAYA EKOLOGICHESKAYA PARTIYA "ZELENYE"
136-
6. POLITICHESKAYA PARTIYA "GRAZHDANSKAYA PLATFORMA"
137-
7. POLITICHESKAYA PARTIYA LDPR - LIBERAL’NO-DEMOKRATICHESKAYA PARTIYA ROSSII
138-
8. POLITICHESKAYA PARTIYA "PARTIYA NARODNOY SVOBODY" (PARNAS)
139-
9. VSEROSSIYSKAYA POLITICHESKAYA PARTIYA "PARTIYA ROSTA"
140-
10. OBSHCHESTVENNAYA ORGANIZATSIYA VSEROSSIYSKAYA POLITICHESKAYA PARTIYA "GRAZHDANSKAYA SILA"
141-
11. POLITICHESKAYA PARTIYA "ROSSIYSKAYA OBEDINENNAYA DEMOKRATICHESKAYA PARTIYA ""YABLOKO"""
142-
12. POLITICHESKAYA PARTIYA "KOMMUNISTICHESKAYA PARTIYA ROSSIYSKOY FEDERATSII"
143-
13. POLITICHESKAYA PARTIYA "PATRIOTY ROSSII"
144-
14. POLITICHESKAYA PARTIYA SPRAVEDLIVAYA ROSSIYA
145-
146-
DANNYYE OKRUZHNYKH IZBIRATYEL’NYKH KOMISSIY O CHISLYE OTKRYEPITYEL’NYKH UDOSTOVYERYENIY
147-
148-
149-
CHISLO OTKREPITEL’NYKH UDOSTOVERENIY, POLUCHENNYKH OKRUZHNOY IZBIRATEL’NOY KOMISSIEY
150-
CHISLO OTKREPITEL’NYKH UDOSTOVERENIY, VYDANNYKH TERRITORIAL’NYM IZBIRATEL’NYM KOMISSIYAM
151-
CHISLO NEISPOL’ZOVANNYKH OTKREPITEL’NYKH UDOSTOVERENIY, POGASHENNYKH OKRUZHNOY IZBIRATEL’NOY KOMISSIEY
152-
CHISLO OTKREPITEL’NYKH UDOSTOVERENIY, UTRACHENNYKH V OKRUZHNOY IZBIRATEL’NOY KOMISSII
105+
Vybory deputatov Gosudarstvennoy Dumy Federal’nogo Sobraniya Rossiyskoy Federatsii sed’mogo sozyva
106+
Data golosovaniya: 18.09.2016
107+
108+
Naimenovaniye Izbiratel’noy komissii: TsIK Rossii
109+
110+
Svodnaya tablitsa rezul’tatov vyborov po federal’nomu izbiratel’nomu okrugu
111+
112+
113+
Chislo izbirateley, vnesennykh v spisok izbirateley na moment okonchaniya golosovaniya
114+
Chislo izbiratel’nykh byulleteney, poluchennykh uchastkovoy izbiratel’noy komissiyey
115+
Chislo izbiratel’nykh byulleteney, vydannykh izbiratelyam, progolosovavshim dosrochno
116+
Chislo izbiratel’nykh byulleteney, vydannykh v pomeshchenii dlya golosovaniya v den’ golosovaniya
117+
Chislo izbiratel’nykh byulleteney, vydannykh vne pomeshcheniya dlya golosovaniya v den’ golosovaniya
118+
Chislo pogashennykh izbiratel’nykh byulleteney
119+
Chislo izbiratel’nykh byulleteney, soderzhashchikhsya v perenosnykh yashchikakh dlya golosovaniya
120+
Chislo izbiratel’nykh byulleteney, soderzhashchikhsya v statsionarnykh yashchikakh dlya golosovaniya
121+
Chislo nedeystvitel’nykh izbiratel’nykh byulleteney
122+
Chislo deystvitel’nykh izbiratel’nykh byulleteney
123+
Chislo otkrepitel’nykh udostovereniy, poluchennykh uchastkovoy izbiratel’noy komissiyey
124+
Chislo otkrepitel’nykh udostovereniy, vydannykh na izbiratel’nom uchastke do dnya golosovaniya
125+
Chislo izbirateley, progolosovavshikh po otkrepitel’nym udostovereniyam na izbiratel’nom uchastke
126+
Chislo pogashennykh neispol’zovannykh otkrepitel’nykh udostovereniy
127+
Chislo otkrepitel’nykh udostovereniy, vydannykh izbiratelyam territorial’noy izbiratel’noy komissiyey
128+
Chislo utrachennykh otkrepitel’nykh udostovereniy
129+
Chislo utrachennykh izbiratel’nykh byulleteney
130+
Chislo izbiratel’nykh byulleteney, ne uchtennykh pri poluchenii
131+
1. VSEROSSIYSKAYa POLITIChESKAYa PARTIYa "RODINA"
132+
2. Politicheskaya partiya KOMMUNISTIChESKAYa PARTIYa KOMMUNISTY ROSSII
133+
3. Politicheskaya partiya "Rossiyskaya partiya pensionerov za spravedlivost’"
134+
4. Vserossiyskaya politicheskaya partiya "YEDINAYa ROSSIYa"
135+
5. Politicheskaya partiya "Rossiyskaya ekologicheskaya partiya "Zelenyye"
136+
6. Politicheskaya partiya "Grazhdanskaya Platforma"
137+
7. Politicheskaya partiya LDPR - Liberal’no-demokraticheskaya partiya Rossii
138+
8. Politicheskaya partiya "Partiya narodnoy svobody" (PARNAS)
139+
9. Vserossiyskaya politicheskaya partiya "PARTIYa ROSTA"
140+
10. Obshchestvennaya organizatsiya Vserossiyskaya politicheskaya partiya "Grazhdanskaya Sila"
141+
11. Politicheskaya partiya "Rossiyskaya ob"yedinennaya demokraticheskaya partiya "YaBLOKO"
142+
12. Politicheskaya partiya "KOMMUNISTIChESKAYa PARTIYa ROSSIYSKOY FEDERATsII"
143+
13. Politicheskaya partiya "PATRIOTY ROSSII"
144+
14. Politicheskaya partiya SPRAVEDLIVAYa ROSSIYa
145+
146+
Dannyye okruzhnykh izbiratel’nykh komissiy o chisle otkrepitel’nykh udostovereniy
147+
148+
149+
Chislo otkrepitel’nykh udostovereniy, poluchennykh okruzhnoy izbiratel’noy komissiyey
150+
Chislo otkrepitel’nykh udostovereniy, vydannykh territorial’nym izbiratel’nym komissiyam
151+
Chislo neispol’zovannykh otkrepitel’nykh udostovereniy, pogashennykh okruzhnoy izbiratel’noy komissiyey
152+
Chislo otkrepitel’nykh udostovereniy, utrachennykh v okruzhnoy izbiratel’noy komissii
153153
154154
map:
155155
rules:
156-
- pattern: ([ЄФІЦАаЕеИиЙйОоУуЫыЮюЯяії])\u0415
157-
result: "\\1YE"
156+
- pattern: (?<=[АaЕeЁёИиОоУуЫыЭэЮюЯяЙйЪъЬь])\u0415
157+
result: "YE"
158158
- pattern: \b\u0415
159159
result: YE
160-
- pattern: ([йьъ])\u0415
161-
result: "\\1YE"
162-
- pattern: ([ЄФІЦАаЕеИиЙйОоУуЫыЮюЯяії])\u0435
163-
result: "\\1ye"
160+
- pattern: (?<=[АaЕeЁёИиОоУуЫыЭэЮюЯяЙйЪъЬь])\u0435
161+
result: "ye"
164162
- pattern: \b\u0435
165163
result: ye
166-
- pattern: ([йьъ])\u0435
167-
result: "\\1ye"
164+
- pattern: (?<=[АaЕeЁёИиОоУуЫыЭэЮюЯяЙйЪъЬь])\u0401 # Ё
165+
result: Y\u00cb
166+
- pattern: \b\u0401
167+
result: Y\u00cb
168+
- pattern: (?<=[АaЕeЁёИиОоУуЫыЭэЮюЯяЙйЪъЬь])\u0451 # ё
169+
result: Y\u00eb
170+
- pattern: \b\u0451
171+
result: y\u00eb
172+
- pattern: \u0419(?=[АаУуЫыЭэ]) # Й before а, у, ы, or э
173+
result: Y\u00b7
174+
- pattern: \u0439(?<=[АаУуЫыЭэ]) # й before а, у, ы, or э
175+
result: y\u00b7
176+
# - pattern: ([АaЕeЁёИиОоУуЫыЭэЮюЯя])\u042b([АаУуЫыЭэ]) # Ы after any vowel character and before а, у, ы, or э
177+
# result: "\\1\u00b7Y\u00b7\\2"
178+
# - pattern: ([АaЕeЁёИиОоУуЫыЭэЮюЯя])\u044b([АаУуЫыЭэ]) # ы after any vowel character and before а, у, ы, or э
179+
# result: "\\1\u00b7y\u00b7\\2"
180+
- pattern: \u042b(?=[АаУуЫыЭэ]) # Ы before а, у, ы, or э
181+
result: Y\u00b7
182+
- pattern: \u044b(?=[АаУуЫыЭэ]) # ы before а, у, ы, or э
183+
result: y\u00b7
184+
- pattern: (?<=[АaЕeЁёИиОоУуЫыЭэЮюЯя])\u042b # Ы after any vowel character
185+
result: \u00b7Y
186+
- pattern: (?<=[АaЕeЁёИиОоУуЫыЭэЮюЯя])\u044b # ы after any vowel character
187+
result: \u00b7y
188+
- pattern: (?<=[БбВвГгДдЖжЗзКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщ])\u042d # Э after any consonant character except й
189+
result: \u00b7E
190+
- pattern: (?<=[БбВвГгДдЖжЗзКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщ])\u044d # э after any consonant character except й
191+
result: \u00b7e
192+
- pattern: (Т|т)(С|с) # тс => t·s
193+
result: "\\1\u00b7\\2"
194+
- pattern: (Ш|ш)(Ч|ч) # шч => sh·ch
195+
result: "\\1\u00b7\\2"
168196

169197
characters:
170198
"\u0410": "A"
@@ -173,7 +201,7 @@ map:
173201
"\u0413": "G"
174202
"\u0414": "D"
175203
"\u0415": "E"
176-
"\u0435": "e"
204+
"\u0401": "\u00cb" # Ё
177205
"\u0416": "Zh"
178206
"\u0417": "Z"
179207
"\u0418": "I"
@@ -194,9 +222,9 @@ map:
194222
"\u0427": "Ch"
195223
"\u0428": "Sh"
196224
"\u0429": "Shch"
197-
"\u042a": "\""
225+
"\u042a": "\"" # Ъ
198226
"\u042b": "Y"
199-
"\u042c": "\u2019"
227+
"\u042c": "\u2019" # Ь => ’
200228
"\u042d": "E"
201229
"\u042e": "Yu"
202230
"\u042f": "Ya"
@@ -205,6 +233,8 @@ map:
205233
"\u0432": "v"
206234
"\u0433": "g"
207235
"\u0434": "d"
236+
"\u0435": "e"
237+
"\u0451": "\u00eb" # ё
208238
"\u0436": "zh"
209239
"\u0437": "z"
210240
"\u0438": "i"
@@ -225,9 +255,9 @@ map:
225255
"\u0447": "ch"
226256
"\u0448": "sh"
227257
"\u0449": "shch"
228-
"\u044a": "\""
258+
"\u044a": "\"" # ъ
229259
"\u044b": "y"
230-
"\u044c": "\u2019"
260+
"\u044c": "\u2019" # ь => ’
231261
"\u044d": "e"
232262
"\u044e": "yu"
233263
"\u044f": "ya"

spec/interscript_spec.rb

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
# frozen_string_literal: true
22

33
RSpec.describe Interscript do
4-
it "converts rus using bgnpcgn-rus-Cyrl-Latn-1947" do
5-
system = YAML.load_file "maps/bgnpcgn-rus-Cyrl-Latn-1947.yaml"
6-
system["tests"].each do |test|
7-
result = Interscript.transliterate "bgnpcgn-rus-Cyrl-Latn-1947", test["source"]
8-
expect(result).to eq test["expected"]
4+
context "bgnpcgn-rus-Cyrl-Latn-1947" do
5+
it "convert internal test text" do
6+
system = YAML.load_file "maps/bgnpcgn-rus-Cyrl-Latn-1947.yaml"
7+
system["tests"].each do |test|
8+
result = Interscript.transliterate "bgnpcgn-rus-Cyrl-Latn-1947", test["source"]
9+
expect(result).to eq test["expected"]
10+
end
911
end
1012
end
1113
end

0 commit comments

Comments
 (0)