pragmatic_segmenter 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/lib/pragmatic_segmenter/abbreviation_replacer.rb +6 -6
  4. data/lib/pragmatic_segmenter/between_punctuation.rb +6 -4
  5. data/lib/pragmatic_segmenter/cleaner.rb +51 -47
  6. data/lib/pragmatic_segmenter/cleaner/rules.rb +86 -0
  7. data/lib/pragmatic_segmenter/languages.rb +21 -30
  8. data/lib/pragmatic_segmenter/languages/arabic.rb +0 -13
  9. data/lib/pragmatic_segmenter/languages/common.rb +67 -44
  10. data/lib/pragmatic_segmenter/languages/common/ellipsis.rb +37 -0
  11. data/lib/pragmatic_segmenter/languages/common/numbers.rb +90 -0
  12. data/lib/pragmatic_segmenter/languages/deutsch.rb +25 -48
  13. data/lib/pragmatic_segmenter/languages/english.rb +3 -3
  14. data/lib/pragmatic_segmenter/languages/japanese.rb +5 -13
  15. data/lib/pragmatic_segmenter/languages/persian.rb +0 -14
  16. data/lib/pragmatic_segmenter/languages/russian.rb +0 -25
  17. data/lib/pragmatic_segmenter/languages/spanish.rb +0 -9
  18. data/lib/pragmatic_segmenter/list.rb +60 -58
  19. data/lib/pragmatic_segmenter/{process.rb → processor.rb} +47 -26
  20. data/lib/pragmatic_segmenter/punctuation_replacer.rb +41 -20
  21. data/lib/pragmatic_segmenter/segmenter.rb +19 -5
  22. data/lib/pragmatic_segmenter/version.rb +1 -1
  23. data/pragmatic_segmenter.gemspec +1 -0
  24. data/spec/pragmatic_segmenter/languages/amharic_spec.rb +18 -0
  25. data/spec/pragmatic_segmenter/languages/arabic_spec.rb +59 -0
  26. data/spec/pragmatic_segmenter/languages/armenian_spec.rb +160 -0
  27. data/spec/pragmatic_segmenter/languages/burmese_spec.rb +18 -0
  28. data/spec/pragmatic_segmenter/languages/chinese_spec.rb +11 -0
  29. data/spec/pragmatic_segmenter/languages/deutsch_spec.rb +189 -0
  30. data/spec/pragmatic_segmenter/languages/dutch_spec.rb +23 -0
  31. data/spec/pragmatic_segmenter/languages/english_spec.rb +1348 -0
  32. data/spec/pragmatic_segmenter/languages/french_spec.rb +31 -0
  33. data/spec/pragmatic_segmenter/languages/greek_spec.rb +18 -0
  34. data/spec/pragmatic_segmenter/languages/hindi_spec.rb +18 -0
  35. data/spec/pragmatic_segmenter/languages/italian_spec.rb +190 -0
  36. data/spec/pragmatic_segmenter/languages/japanese_spec.rb +53 -0
  37. data/spec/pragmatic_segmenter/languages/persian_spec.rb +18 -0
  38. data/spec/pragmatic_segmenter/languages/polish_spec.rb +11 -0
  39. data/spec/pragmatic_segmenter/languages/russian_spec.rb +219 -0
  40. data/spec/pragmatic_segmenter/languages/spanish_spec.rb +189 -0
  41. data/spec/pragmatic_segmenter/languages/urdu_spec.rb +18 -0
  42. data/spec/pragmatic_segmenter/languages_spec.rb +31 -0
  43. data/spec/pragmatic_segmenter_spec.rb +24 -2583
  44. metadata +59 -8
  45. data/lib/pragmatic_segmenter/number.rb +0 -35
  46. data/lib/pragmatic_segmenter/rules.rb +0 -168
  47. data/lib/pragmatic_segmenter/rules/ellipsis.rb +0 -35
  48. data/lib/pragmatic_segmenter/rules/html.rb +0 -13
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PragmaticSegmenter::Languages::French, '(fr)' do
4
+
5
+ describe '#segment' do
6
+ it 'correctly segments text #001' do
7
+ ps = PragmaticSegmenter::Segmenter.new(text: "Après avoir été l'un des acteurs du projet génome humain, le Genoscope met aujourd'hui le cap vers la génomique environnementale. L'exploitation des données de séquences, prolongée par l'identification expérimentale des fonctions biologiques, notamment dans le domaine de la biocatalyse, ouvrent des perspectives de développements en biotechnologie industrielle.", language: 'fr')
8
+ expect(ps.segment).to eq(["Après avoir été l'un des acteurs du projet génome humain, le Genoscope met aujourd'hui le cap vers la génomique environnementale.", "L'exploitation des données de séquences, prolongée par l'identification expérimentale des fonctions biologiques, notamment dans le domaine de la biocatalyse, ouvrent des perspectives de développements en biotechnologie industrielle."])
9
+ end
10
+
11
+ it 'correctly segments text #002' do
12
+ ps = PragmaticSegmenter::Segmenter.new(text: "\"Airbus livrera comme prévu 30 appareils 380 cette année avec en ligne de mire l'objectif d'équilibre financier du programme en 2015\", a-t-il ajouté.", language: 'fr')
13
+ expect(ps.segment).to eq(["\"Airbus livrera comme prévu 30 appareils 380 cette année avec en ligne de mire l'objectif d'équilibre financier du programme en 2015\", a-t-il ajouté."])
14
+ end
15
+
16
+ it 'correctly segments text #003' do
17
+ ps = PragmaticSegmenter::Segmenter.new(text: "À 11 heures ce matin, la direction ne décomptait que douze grévistes en tout sur la France : ce sont ceux du site de Saran (Loiret), dont l’effectif est de 809 salariés, dont la moitié d’intérimaires. Elle assure que ce mouvement « n’aura aucun impact sur les livraisons ».", language: 'fr')
18
+ expect(ps.segment).to eq(["À 11 heures ce matin, la direction ne décomptait que douze grévistes en tout sur la France : ce sont ceux du site de Saran (Loiret), dont l’effectif est de 809 salariés, dont la moitié d’intérimaires.", "Elle assure que ce mouvement « n’aura aucun impact sur les livraisons »."])
19
+ end
20
+
21
+ it 'correctly segments text #004' do
22
+ ps = PragmaticSegmenter::Segmenter.new(text: "Ce modèle permet d’afficher le texte « LL.AA.II.RR. » pour l’abréviation de « Leurs Altesses impériales et royales » avec son infobulle.", language: 'fr')
23
+ expect(ps.segment).to eq(["Ce modèle permet d’afficher le texte « LL.AA.II.RR. » pour l’abréviation de « Leurs Altesses impériales et royales » avec son infobulle."])
24
+ end
25
+
26
+ it 'correctly segments text #005' do
27
+ ps = PragmaticSegmenter::Segmenter.new(text: "Les derniers ouvrages de Intercept Ltd. sont ici.", language: 'fr')
28
+ expect(ps.segment).to eq(["Les derniers ouvrages de Intercept Ltd. sont ici."])
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PragmaticSegmenter::Languages::Greek, '(el)' do
4
+
5
+ context "Golden Rules" do
6
+ it "Question mark to end sentence #001" do
7
+ ps = PragmaticSegmenter::Segmenter.new(text: "Με συγχωρείτε· πού είναι οι τουαλέτες; Τις Κυριακές δε δούλευε κανένας. το κόστος του σπιτιού ήταν £260.950,00.", language: "el")
8
+ expect(ps.segment).to eq(["Με συγχωρείτε· πού είναι οι τουαλέτες;", "Τις Κυριακές δε δούλευε κανένας.", "το κόστος του σπιτιού ήταν £260.950,00."])
9
+ end
10
+ end
11
+
12
+ describe '#segment' do
13
+ it 'correctly segments text #001' do
14
+ ps = PragmaticSegmenter::Segmenter.new(text: "Με συγχωρείτε· πού είναι οι τουαλέτες; Τις Κυριακές δε δούλευε κανένας. το κόστος του σπιτιού ήταν £260.950,00.", language: 'el')
15
+ expect(ps.segment).to eq(["Με συγχωρείτε· πού είναι οι τουαλέτες;", "Τις Κυριακές δε δούλευε κανένας.", "το κόστος του σπιτιού ήταν £260.950,00."])
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PragmaticSegmenter::Languages::Hindi, '(hi)' do
4
+
5
+ context "Golden Rules" do
6
+ it "Full stop #001" do
7
+ ps = PragmaticSegmenter::Segmenter.new(text: "सच्चाई यह है कि इसे कोई नहीं जानता। हो सकता है यह फ़्रेन्को के खिलाफ़ कोई विद्रोह रहा हो, या फिर बेकाबू हो गया कोई आनंदोत्सव।", language: "hi")
8
+ expect(ps.segment).to eq(["सच्चाई यह है कि इसे कोई नहीं जानता।", "हो सकता है यह फ़्रेन्को के खिलाफ़ कोई विद्रोह रहा हो, या फिर बेकाबू हो गया कोई आनंदोत्सव।"])
9
+ end
10
+ end
11
+
12
+ describe '#segment' do
13
+ it 'correctly segments text #001' do
14
+ ps = PragmaticSegmenter::Segmenter.new(text: "सच्चाई यह है कि इसे कोई नहीं जानता। हो सकता है यह फ़्रेन्को के खिलाफ़ कोई विद्रोह रहा हो, या फिर बेकाबू हो गया कोई आनंदोत्सव।", language: 'hi')
15
+ expect(ps.segment).to eq(["सच्चाई यह है कि इसे कोई नहीं जानता।", "हो सकता है यह फ़्रेन्को के खिलाफ़ कोई विद्रोह रहा हो, या फिर बेकाबू हो गया कोई आनंदोत्सव।"])
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,190 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PragmaticSegmenter::Languages::Italian, "(it)" do
4
+
5
+ context "Golden Rules" do
6
+ it "Abbreviations #001" do
7
+ ps = PragmaticSegmenter::Segmenter.new(text: "Salve Sig.ra Mengoni! Come sta oggi?", language: "it")
8
+ expect(ps.segment).to eq(["Salve Sig.ra Mengoni!", "Come sta oggi?"])
9
+ end
10
+
11
+ it "Quotations #002" do
12
+ ps = PragmaticSegmenter::Segmenter.new(text: "Una lettera si può iniziare in questo modo «Il/la sottoscritto/a.».", language: "it")
13
+ expect(ps.segment).to eq(["Una lettera si può iniziare in questo modo «Il/la sottoscritto/a.»."])
14
+ end
15
+
16
+ it "Numbers #003" do
17
+ ps = PragmaticSegmenter::Segmenter.new(text: "La casa costa 170.500.000,00€!", language: "it")
18
+ expect(ps.segment).to eq(["La casa costa 170.500.000,00€!"])
19
+ end
20
+ end
21
+
22
+ # Thanks to Davide Fornelli for the Italian test examples.
23
+ describe '#segment' do
24
+
25
+ it 'correctly segments text #001' do
26
+ ps = PragmaticSegmenter::Segmenter.new(text: "Salve Sig.ra Mengoni! Come sta oggi?", language: 'it')
27
+ expect(ps.segment).to eq(["Salve Sig.ra Mengoni!", "Come sta oggi?"])
28
+ end
29
+
30
+ it 'correctly segments text #002' do
31
+ ps = PragmaticSegmenter::Segmenter.new(text: "Buongiorno! Sono l'Ing. Mengozzi. È presente l'Avv. Cassioni?", language: 'it')
32
+ expect(ps.segment).to eq(["Buongiorno!", "Sono l'Ing. Mengozzi.", "È presente l'Avv. Cassioni?"])
33
+ end
34
+
35
+ it 'correctly segments text #003' do
36
+ ps = PragmaticSegmenter::Segmenter.new(text: "Mi fissi un appuntamento per mar. 23 Nov.. Grazie.", language: 'it')
37
+ expect(ps.segment).to eq(["Mi fissi un appuntamento per mar. 23 Nov..", "Grazie."])
38
+ end
39
+
40
+ it 'correctly segments text #004' do
41
+ ps = PragmaticSegmenter::Segmenter.new(text: "Ecco il mio tel.:01234567. Mi saluti la Sig.na Manelli. Arrivederci.", language: 'it')
42
+ expect(ps.segment).to eq(["Ecco il mio tel.:01234567.", "Mi saluti la Sig.na Manelli.", "Arrivederci."])
43
+ end
44
+
45
+ it 'correctly segments text #005' do
46
+ ps = PragmaticSegmenter::Segmenter.new(text: "La centrale meteor. si è guastata. Gli idraul. son dovuti andare a sistemarla.", language: 'it')
47
+ expect(ps.segment).to eq(["La centrale meteor. si è guastata.", "Gli idraul. son dovuti andare a sistemarla."])
48
+ end
49
+
50
+ it 'correctly segments text #006' do
51
+ ps = PragmaticSegmenter::Segmenter.new(text: "Hanno creato un algoritmo allo st. d. arte. Si ringrazia lo psicol. Serenti.", language: 'it')
52
+ expect(ps.segment).to eq(["Hanno creato un algoritmo allo st. d. arte.", "Si ringrazia lo psicol. Serenti."])
53
+ end
54
+
55
+ it 'correctly segments text #007' do
56
+ ps = PragmaticSegmenter::Segmenter.new(text: "Chiamate il V.Cte. delle F.P., adesso!", language: 'it')
57
+ expect(ps.segment).to eq(["Chiamate il V.Cte. delle F.P., adesso!"])
58
+ end
59
+
60
+ it 'correctly segments text #008' do
61
+ ps = PragmaticSegmenter::Segmenter.new(text: "Giancarlo ha sostenuto l'esame di econ. az..", language: 'it')
62
+ expect(ps.segment).to eq(["Giancarlo ha sostenuto l'esame di econ. az.."])
63
+ end
64
+
65
+ it 'correctly segments text #009' do
66
+ ps = PragmaticSegmenter::Segmenter.new(text: "Stava viaggiando a 90 km/h verso la provincia di TR quando il Dott. Mesini ha sentito un rumore e si fermò!", language: 'it')
67
+ expect(ps.segment).to eq(["Stava viaggiando a 90 km/h verso la provincia di TR quando il Dott. Mesini ha sentito un rumore e si fermò!"])
68
+ end
69
+
70
+ it 'correctly segments text #010' do
71
+ ps = PragmaticSegmenter::Segmenter.new(text: "Egregio Dir. Amm., le faccio sapere che l'ascensore non funziona.", language: 'it')
72
+ expect(ps.segment).to eq(["Egregio Dir. Amm., le faccio sapere che l'ascensore non funziona."])
73
+ end
74
+
75
+ it 'correctly segments text #011' do
76
+ ps = PragmaticSegmenter::Segmenter.new(text: "Stava mangiando e/o dormendo.", language: 'it')
77
+ expect(ps.segment).to eq(["Stava mangiando e/o dormendo."])
78
+ end
79
+
80
+ it 'correctly segments text #012' do
81
+ ps = PragmaticSegmenter::Segmenter.new(text: "Ricordatevi che dom 25 Set. sarà il compleanno di Maria; dovremo darle un regalo.", language: 'it')
82
+ expect(ps.segment).to eq(["Ricordatevi che dom 25 Set. sarà il compleanno di Maria; dovremo darle un regalo."])
83
+ end
84
+
85
+ it 'correctly segments text #013' do
86
+ ps = PragmaticSegmenter::Segmenter.new(text: "La politica è quella della austerità; quindi verranno fatti tagli agli sprechi.", language: 'it')
87
+ expect(ps.segment).to eq(["La politica è quella della austerità; quindi verranno fatti tagli agli sprechi."])
88
+ end
89
+
90
+ it 'correctly segments text #014' do
91
+ ps = PragmaticSegmenter::Segmenter.new(text: "Nel tribunale, l'Avv. Fabrizi ha urlato \"Io, l'illustrissimo Fabrizi, vi si oppone!\".", language: 'it')
92
+ expect(ps.segment).to eq(["Nel tribunale, l'Avv. Fabrizi ha urlato \"Io, l'illustrissimo Fabrizi, vi si oppone!\"."])
93
+ end
94
+
95
+ it 'correctly segments text #015' do
96
+ ps = PragmaticSegmenter::Segmenter.new(text: "Le parti fisiche di un computer (ad es. RAM, CPU, tastiera, mouse, etc.) sono definiti HW.", language: 'it')
97
+ expect(ps.segment).to eq(["Le parti fisiche di un computer (ad es. RAM, CPU, tastiera, mouse, etc.) sono definiti HW."])
98
+ end
99
+
100
+ it 'correctly segments text #016' do
101
+ ps = PragmaticSegmenter::Segmenter.new(text: "La parola 'casa' è sinonimo di abitazione.", language: 'it')
102
+ expect(ps.segment).to eq(["La parola 'casa' è sinonimo di abitazione."])
103
+ end
104
+
105
+ it 'correctly segments text #017' do
106
+ ps = PragmaticSegmenter::Segmenter.new(text: "La \"Mulino Bianco\" fa alimentari pre-confezionati.", language: 'it')
107
+ expect(ps.segment).to eq(["La \"Mulino Bianco\" fa alimentari pre-confezionati."])
108
+ end
109
+
110
+ it 'correctly segments text #018' do
111
+ ps = PragmaticSegmenter::Segmenter.new(text: "\"Ei fu. Siccome immobile / dato il mortal sospiro / stette la spoglia immemore / orba di tanto spiro / [...]\" (Manzoni).", language: 'it')
112
+ expect(ps.segment).to eq(["\"Ei fu. Siccome immobile / dato il mortal sospiro / stette la spoglia immemore / orba di tanto spiro / [...]\" (Manzoni)."])
113
+ end
114
+
115
+ it 'correctly segments text #019' do
116
+ ps = PragmaticSegmenter::Segmenter.new(text: "Una lettera si può iniziare in questo modo «Il/la sottoscritto/a ... nato/a a ...».", language: 'it')
117
+ expect(ps.segment).to eq(["Una lettera si può iniziare in questo modo «Il/la sottoscritto/a ... nato/a a ...»."])
118
+ end
119
+
120
+ it 'correctly segments text #020' do
121
+ ps = PragmaticSegmenter::Segmenter.new(text: "Per casa, in uno degli esercizi per i bambini c'era \"3 + (14/7) = 5\"", language: 'it')
122
+ expect(ps.segment).to eq(["Per casa, in uno degli esercizi per i bambini c'era \"3 + (14/7) = 5\""])
123
+ end
124
+
125
+ it 'correctly segments text #021' do
126
+ ps = PragmaticSegmenter::Segmenter.new(text: "Ai bambini è stato chiesto di fare \"4:2*2\"", language: 'it')
127
+ expect(ps.segment).to eq(["Ai bambini è stato chiesto di fare \"4:2*2\""])
128
+ end
129
+
130
+ it 'correctly segments text #022' do
131
+ ps = PragmaticSegmenter::Segmenter.new(text: "La maestra esclamò: \"Bambini, quanto fa '2/3 + 4/3?'\".", language: 'it')
132
+ expect(ps.segment).to eq(["La maestra esclamò: \"Bambini, quanto fa \'2/3 + 4/3?\'\"."])
133
+ end
134
+
135
+ it 'correctly segments text #023' do
136
+ ps = PragmaticSegmenter::Segmenter.new(text: "Il motore misurava 120°C.", language: 'it')
137
+ expect(ps.segment).to eq(["Il motore misurava 120°C."])
138
+ end
139
+
140
+ it 'correctly segments text #024' do
141
+ ps = PragmaticSegmenter::Segmenter.new(text: "Il volume era di 3m³.", language: 'it')
142
+ expect(ps.segment).to eq(["Il volume era di 3m³."])
143
+ end
144
+
145
+ it 'correctly segments text #025' do
146
+ ps = PragmaticSegmenter::Segmenter.new(text: "La stanza misurava 20m².", language: 'it')
147
+ expect(ps.segment).to eq(["La stanza misurava 20m²."])
148
+ end
149
+
150
+ it 'correctly segments text #026' do
151
+ ps = PragmaticSegmenter::Segmenter.new(text: "1°C corrisponde a 33.8°F.", language: 'it')
152
+ expect(ps.segment).to eq(["1°C corrisponde a 33.8°F."])
153
+ end
154
+
155
+ it 'correctly segments text #027' do
156
+ ps = PragmaticSegmenter::Segmenter.new(text: "Oggi è il 27-10-14.", language: 'it')
157
+ expect(ps.segment).to eq(["Oggi è il 27-10-14."])
158
+ end
159
+
160
+ it 'correctly segments text #028' do
161
+ ps = PragmaticSegmenter::Segmenter.new(text: "La casa costa 170.500.000,00€!", language: 'it')
162
+ expect(ps.segment).to eq(["La casa costa 170.500.000,00€!"])
163
+ end
164
+
165
+ it 'correctly segments text #029' do
166
+ ps = PragmaticSegmenter::Segmenter.new(text: "Il corridore 103 è arrivato 4°.", language: 'it')
167
+ expect(ps.segment).to eq(["Il corridore 103 è arrivato 4°."])
168
+ end
169
+
170
+ it 'correctly segments text #030' do
171
+ ps = PragmaticSegmenter::Segmenter.new(text: "Oggi è il 27/10/2014.", language: 'it')
172
+ expect(ps.segment).to eq(["Oggi è il 27/10/2014."])
173
+ end
174
+
175
+ it 'correctly segments text #031' do
176
+ ps = PragmaticSegmenter::Segmenter.new(text: "Ecco l'elenco: 1.gelato, 2.carne, 3.riso.", language: 'it')
177
+ expect(ps.segment).to eq(["Ecco l'elenco: 1.gelato, 2.carne, 3.riso."])
178
+ end
179
+
180
+ it 'correctly segments text #032' do
181
+ ps = PragmaticSegmenter::Segmenter.new(text: "Devi comprare : 1)pesce 2)sale.", language: 'it')
182
+ expect(ps.segment).to eq(["Devi comprare : 1)pesce 2)sale."])
183
+ end
184
+
185
+ it 'correctly segments text #033' do
186
+ ps = PragmaticSegmenter::Segmenter.new(text: "La macchina viaggiava a 100 km/h.", language: 'it')
187
+ expect(ps.segment).to eq(["La macchina viaggiava a 100 km/h."])
188
+ end
189
+ end
190
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PragmaticSegmenter::Languages::Japanese, "(ja)" do
4
+
5
+ context "Golden Rules" do
6
+ it "Simple period to end sentence #001" do
7
+ ps = PragmaticSegmenter::Segmenter.new(text: "これはペンです。それはマーカーです。", language: "ja")
8
+ expect(ps.segment).to eq(["これはペンです。", "それはマーカーです。"])
9
+ end
10
+
11
+ it "Question mark to end sentence #002" do
12
+ ps = PragmaticSegmenter::Segmenter.new(text: "それは何ですか?ペンですか?", language: "ja")
13
+ expect(ps.segment).to eq(["それは何ですか?", "ペンですか?"])
14
+ end
15
+
16
+ it "Exclamation point to end sentence #003" do
17
+ ps = PragmaticSegmenter::Segmenter.new(text: "良かったね!すごい!", language: "ja")
18
+ expect(ps.segment).to eq(["良かったね!", "すごい!"])
19
+ end
20
+
21
+ it "Quotation #004" do
22
+ ps = PragmaticSegmenter::Segmenter.new(text: "自民党税制調査会の幹部は、「引き下げ幅は3.29%以上を目指すことになる」と指摘していて、今後、公明党と合意したうえで、30日に決定する与党税制改正大綱に盛り込むことにしています。2%台後半を目指すとする方向で最終調整に入りました。", language: "ja")
23
+ expect(ps.segment).to eq(["自民党税制調査会の幹部は、「引き下げ幅は3.29%以上を目指すことになる」と指摘していて、今後、公明党と合意したうえで、30日に決定する与党税制改正大綱に盛り込むことにしています。", "2%台後半を目指すとする方向で最終調整に入りました。"])
24
+ end
25
+
26
+ it "Errant newlines in the middle of sentences #005" do
27
+ ps = PragmaticSegmenter::Segmenter.new(text: "これは父の\n家です。", language: "ja")
28
+ expect(ps.segment).to eq(["これは父の家です。"])
29
+ end
30
+ end
31
+
32
+ describe '#segment' do
33
+ it 'correctly segments text #001' do
34
+ ps = PragmaticSegmenter::Segmenter.new(text: "これは山です \nこれは山です \nこれは山です(「これは山です」) \nこれは山です(これは山です「これは山です」)これは山です・これは山です、これは山です。 \nこれは山です(これは山です。これは山です)。これは山です、これは山です、これは山です、これは山です(これは山です。これは山です)これは山です、これは山です、これは山です「これは山です」これは山です(これは山です:0円)これは山です。 \n1.)これは山です、これは山です(これは山です、これは山です6円(※1))これは山です。 \n※1 これは山です。 \n2.)これは山です、これは山です、これは山です、これは山です。 \n3.)これは山です、これは山です・これは山です、これは山です、これは山です、これは山です(これは山です「これは山です」)これは山です、これは山です、これは山です、これは山です。 \n4.)これは山です、これは山です(これは山です、これは山です、これは山です。これは山です)これは山です、これは山です(これは山です、これは山です)。 \nこれは山です、これは山です、これは山です、これは山です、これは山です(者)これは山です。 \n(1) 「これは山です」(これは山です:0円) (※1) \n① これは山です", language: 'ja')
35
+ expect(ps.segment).to eq(["これは山です", "これは山です", "これは山です(「これは山です」)", "これは山です(これは山です「これは山です」)これは山です・これは山です、これは山です。", "これは山です(これは山です。これは山です)。", "これは山です、これは山です、これは山です、これは山です(これは山です。これは山です)これは山です、これは山です、これは山です「これは山です」これは山です(これは山です:0円)これは山です。", "1.)これは山です、これは山です(これは山です、これは山です6円(※1))これは山です。", "※1 これは山です。", "2.)これは山です、これは山です、これは山です、これは山です。", "3.)これは山です、これは山です・これは山です、これは山です、これは山です、これは山です(これは山です「これは山です」)これは山です、これは山です、これは山です、これは山です。", "4.)これは山です、これは山です(これは山です、これは山です、これは山です。これは山です)これは山です、これは山です(これは山です、これは山です)。", "これは山です、これは山です、これは山です、これは山です、これは山です(者)これは山です。", "(1) 「これは山です」(これは山です:0円) (※1)", "① これは山です"])
36
+ end
37
+
38
+ it 'correctly segments text #002' do
39
+ ps = PragmaticSegmenter::Segmenter.new(text: "フフーの\n主たる債務", language: 'ja')
40
+ expect(ps.segment).to eq(["フフーの主たる債務"])
41
+ end
42
+
43
+ it 'correctly segments text #003' do
44
+ ps = PragmaticSegmenter::Segmenter.new(text: "これは山です \nこれは山です \nこれは山です(「これは山です」) \nこれは山です(これは山です「これは山です」)これは山です・これは山です、これは山です. \nこれは山です(これは山です.これは山です).これは山です、これは山です、これは山です、これは山です(これは山です.これは山です)これは山です、これは山です、これは山です「これは山です」これは山です(これは山です:0円)これは山です. \n1.)これは山です、これは山です(これは山です、これは山です6円(※1))これは山です. \n※1 これは山です. \n2.)これは山です、これは山です、これは山です、これは山です. \n3.)これは山です、これは山です・これは山です、これは山です、これは山です、これは山です(これは山です「これは山です」)これは山です、これは山です、これは山です、これは山です. \n4.)これは山です、これは山です(これは山です、これは山です、これは山です.これは山です)これは山です、これは山です(これは山です、これは山です). \nこれは山です、これは山です、これは山です、これは山です、これは山です(者)これは山です. \n(1) 「これは山です」(これは山です:0円) (※1) \n① これは山です", language: 'ja')
45
+ expect(ps.segment).to eq(["これは山です", "これは山です", "これは山です(「これは山です」)", "これは山です(これは山です「これは山です」)これは山です・これは山です、これは山です.", "これは山です(これは山です.これは山です).", "これは山です、これは山です、これは山です、これは山です(これは山です.これは山です)これは山です、これは山です、これは山です「これは山です」これは山です(これは山です:0円)これは山です.", "1.)これは山です、これは山です(これは山です、これは山です6円(※1))これは山です.", "※1 これは山です.", "2.)これは山です、これは山です、これは山です、これは山です.", "3.)これは山です、これは山です・これは山です、これは山です、これは山です、これは山です(これは山です「これは山です」)これは山です、これは山です、これは山です、これは山です.", "4.)これは山です、これは山です(これは山です、これは山です、これは山です.これは山です)これは山です、これは山です(これは山です、これは山です).", "これは山です、これは山です、これは山です、これは山です、これは山です(者)これは山です.", "(1) 「これは山です」(これは山です:0円) (※1)", "① これは山です"])
46
+ end
47
+
48
+ it 'correctly segments text #004' do
49
+ ps = PragmaticSegmenter::Segmenter.new(text: "これは山です \nこれは山です \nこれは山です(「これは山です」) \nこれは山です(これは山です「これは山です」)これは山です・これは山です、これは山です! \nこれは山です(これは山です!これは山です)!これは山です、これは山です、これは山です、これは山です(これは山です!これは山です)これは山です、これは山です、これは山です「これは山です」これは山です(これは山です:0円)これは山です! \n1.)これは山です、これは山です(これは山です、これは山です6円(※1))これは山です! \n※1 これは山です! \n2.)これは山です、これは山です、これは山です、これは山です! \n3.)これは山です、これは山です・これは山です、これは山です、これは山です、これは山です(これは山です「これは山です」)これは山です、これは山です、これは山です、これは山です! \n4.)これは山です、これは山です(これは山です、これは山です、これは山です!これは山です)これは山です、これは山です(これは山です、これは山です)! \nこれは山です、これは山です、これは山です、これは山です、これは山です(者)これは山です! \n(1) 「これは山です」(これは山です:0円) (※1) \n① これは山です", language: 'ja')
50
+ expect(ps.segment).to eq(["これは山です", "これは山です", "これは山です(「これは山です」)", "これは山です(これは山です「これは山です」)これは山です・これは山です、これは山です!", "これは山です(これは山です!これは山です)!", "これは山です、これは山です、これは山です、これは山です(これは山です!これは山です)これは山です、これは山です、これは山です「これは山です」これは山です(これは山です:0円)これは山です!", "1.)これは山です、これは山です(これは山です、これは山です6円(※1))これは山です!", "※1 これは山です!", "2.)これは山です、これは山です、これは山です、これは山です!", "3.)これは山です、これは山です・これは山です、これは山です、これは山です、これは山です(これは山です「これは山です」)これは山です、これは山です、これは山です、これは山です!", "4.)これは山です、これは山です(これは山です、これは山です、これは山です!これは山です)これは山です、これは山です(これは山です、これは山です)!", "これは山です、これは山です、これは山です、これは山です、これは山です(者)これは山です!", "(1) 「これは山です」(これは山です:0円) (※1)", "① これは山です"])
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PragmaticSegmenter::Languages::Persian, '(fa)' do
4
+
5
+ context "Golden Rules" do
6
+ it "Sentence ending punctuation #001" do
7
+ ps = PragmaticSegmenter::Segmenter.new(text: "خوشبختم، آقای رضا. شما کجایی هستید؟ من از تهران هستم.", language: 'fa')
8
+ expect(ps.segment).to eq(["خوشبختم، آقای رضا.", "شما کجایی هستید؟", "من از تهران هستم."])
9
+ end
10
+ end
11
+
12
+ describe '#segment' do
13
+ it 'correctly segments text #001' do
14
+ ps = PragmaticSegmenter::Segmenter.new(text: "خوشبختم، آقای رضا. شما کجایی هستید؟ من از تهران هستم.", language: 'fa')
15
+ expect(ps.segment).to eq(["خوشبختم، آقای رضا.", "شما کجایی هستید؟", "من از تهران هستم."])
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PragmaticSegmenter::Languages::Polish, '(pl)' do
4
+
5
+ describe '#segment' do
6
+ it 'correctly segments text #001' do
7
+ ps = PragmaticSegmenter::Segmenter.new(text: "To słowo bałt. jestskrótem.", language: 'pl')
8
+ expect(ps.segment).to eq(["To słowo bałt. jestskrótem."])
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,219 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PragmaticSegmenter::Languages::Russian, "(ru)" do
4
+
5
+ context "Golden Rules" do
6
+ it "Abbreviations #001" do
7
+ ps = PragmaticSegmenter::Segmenter.new(text: "Объем составляет 5 куб.м.", language: "ru")
8
+ expect(ps.segment).to eq(["Объем составляет 5 куб.м."])
9
+ end
10
+
11
+ it "Quotations #002" do
12
+ ps = PragmaticSegmenter::Segmenter.new(text: "Маленькая девочка бежала и кричала: «Не видали маму?».", language: "ru")
13
+ expect(ps.segment).to eq(["Маленькая девочка бежала и кричала: «Не видали маму?»."])
14
+ end
15
+
16
+ it "Numbers #003" do
17
+ ps = PragmaticSegmenter::Segmenter.new(text: "Сегодня 27.10.14", language: "ru")
18
+ expect(ps.segment).to eq(["Сегодня 27.10.14"])
19
+ end
20
+ end
21
+
22
+ # Thanks to Anastasiia Tsvitailo for the Russian test examples.
23
+ describe '#segment' do
24
+ it 'correctly segments text #001' do
25
+ ps = PragmaticSegmenter::Segmenter.new(text: "Маленькая девочка бежала и кричала: «Не видали маму?».", language: 'ru')
26
+ expect(ps.segment).to eq(["Маленькая девочка бежала и кричала: «Не видали маму?»."])
27
+ end
28
+
29
+ it 'correctly segments text #002' do
30
+ ps = PragmaticSegmenter::Segmenter.new(text: "«Я приду поздно», — сказал Андрей.", language: 'ru')
31
+ expect(ps.segment).to eq(["«Я приду поздно», — сказал Андрей."])
32
+ end
33
+
34
+ it 'correctly segments text #003' do
35
+ ps = PragmaticSegmenter::Segmenter.new(text: "«К чему ты готовишься? – спросила мама. – Завтра ведь выходной».", language: 'ru')
36
+ expect(ps.segment).to eq(["«К чему ты готовишься? – спросила мама. – Завтра ведь выходной»."])
37
+ end
38
+
39
+ it 'correctly segments text #004' do
40
+ ps = PragmaticSegmenter::Segmenter.new(text: "По словам Пушкина, «Привычка свыше дана, замена счастью она».", language: 'ru')
41
+ expect(ps.segment).to eq(["По словам Пушкина, «Привычка свыше дана, замена счастью она»."])
42
+ end
43
+
44
+ it 'correctly segments text #005' do
45
+ ps = PragmaticSegmenter::Segmenter.new(text: "Он сказал: «Я очень устал», и сразу же замолчал.", language: 'ru')
46
+ expect(ps.segment).to eq(["Он сказал: «Я очень устал», и сразу же замолчал."])
47
+ end
48
+
49
+ it 'correctly segments text #006' do
50
+ ps = PragmaticSegmenter::Segmenter.new(text: "Мне стало как-то ужасно грустно в это мгновение; однако что-то похожее на смех зашевелилось в душе моей.", language: 'ru')
51
+ expect(ps.segment).to eq(["Мне стало как-то ужасно грустно в это мгновение; однако что-то похожее на смех зашевелилось в душе моей."])
52
+ end
53
+
54
+ it 'correctly segments text #007' do
55
+ ps = PragmaticSegmenter::Segmenter.new(text: "Шухов как был в ватных брюках, не снятых на ночь (повыше левого колена их тоже был пришит затасканный, погрязневший лоскут, и на нем выведен черной, уже поблекшей краской номер Щ-854), надел телогрейку…", language: 'ru')
56
+ expect(ps.segment).to eq(["Шухов как был в ватных брюках, не снятых на ночь (повыше левого колена их тоже был пришит затасканный, погрязневший лоскут, и на нем выведен черной, уже поблекшей краской номер Щ-854), надел телогрейку…"])
57
+ end
58
+
59
+ it 'correctly segments text #008' do
60
+ ps = PragmaticSegmenter::Segmenter.new(text: "Слово «дом» является синонимом жилища", language: 'ru')
61
+ expect(ps.segment).to eq(["Слово «дом» является синонимом жилища"])
62
+ end
63
+
64
+ it 'correctly segments text #009' do
65
+ ps = PragmaticSegmenter::Segmenter.new(text: "В Санкт-Петербург на гастроли приехал театр «Современник»", language: 'ru')
66
+ expect(ps.segment).to eq(["В Санкт-Петербург на гастроли приехал театр «Современник»"])
67
+ end
68
+
69
+ it 'correctly segments text #010' do
70
+ ps = PragmaticSegmenter::Segmenter.new(text: "Машина едет со скоростью 100 км/ч.", language: 'ru')
71
+ expect(ps.segment).to eq(["Машина едет со скоростью 100 км/ч."])
72
+ end
73
+
74
+ it 'correctly segments text #011' do
75
+ ps = PragmaticSegmenter::Segmenter.new(text: "Я поем и/или лягу спать.", language: 'ru')
76
+ expect(ps.segment).to eq(["Я поем и/или лягу спать."])
77
+ end
78
+
79
+ it 'correctly segments text #012' do
80
+ ps = PragmaticSegmenter::Segmenter.new(text: "Он не мог справиться с примером \"3 + (14:7) = 5\"", language: 'ru')
81
+ expect(ps.segment).to eq(["Он не мог справиться с примером \"3 + (14:7) = 5\""])
82
+ end
83
+
84
+ it 'correctly segments text #013' do
85
+ ps = PragmaticSegmenter::Segmenter.new(text: "Вот список: 1.мороженое, 2.мясо, 3.рис.", language: 'ru')
86
+ expect(ps.segment).to eq(["Вот список: 1.мороженое, 2.мясо, 3.рис."])
87
+ end
88
+
89
+ it 'correctly segments text #014' do
90
+ ps = PragmaticSegmenter::Segmenter.new(text: "Квартира 234 находится на 4-ом этаже.", language: 'ru')
91
+ expect(ps.segment).to eq(["Квартира 234 находится на 4-ом этаже."])
92
+ end
93
+
94
+ it 'correctly segments text #015' do
95
+ ps = PragmaticSegmenter::Segmenter.new(text: "В это время года температура может подниматься до 40°C.", language: 'ru')
96
+ expect(ps.segment).to eq(["В это время года температура может подниматься до 40°C."])
97
+ end
98
+
99
+ it 'correctly segments text #016' do
100
+ ps = PragmaticSegmenter::Segmenter.new(text: "Объем составляет 5м³.", language: 'ru')
101
+ expect(ps.segment).to eq(["Объем составляет 5м³."])
102
+ end
103
+
104
+ it 'correctly segments text #017' do
105
+ ps = PragmaticSegmenter::Segmenter.new(text: "Объем составляет 5 куб.м.", language: 'ru')
106
+ expect(ps.segment).to eq(["Объем составляет 5 куб.м."])
107
+ end
108
+
109
+ it 'correctly segments text #018' do
110
+ ps = PragmaticSegmenter::Segmenter.new(text: "Площадь комнаты 14м².", language: 'ru')
111
+ expect(ps.segment).to eq(["Площадь комнаты 14м²."])
112
+ end
113
+
114
+ it 'correctly segments text #019' do
115
+ ps = PragmaticSegmenter::Segmenter.new(text: "Площадь комнаты 14 кв.м.", language: 'ru')
116
+ expect(ps.segment).to eq(["Площадь комнаты 14 кв.м."])
117
+ end
118
+
119
+ it 'correctly segments text #020' do
120
+ ps = PragmaticSegmenter::Segmenter.new(text: "1°C соответствует 33.8°F.", language: 'ru')
121
+ expect(ps.segment).to eq(["1°C соответствует 33.8°F."])
122
+ end
123
+
124
+ it 'correctly segments text #021' do
125
+ ps = PragmaticSegmenter::Segmenter.new(text: "Сегодня 27.10.14", language: 'ru')
126
+ expect(ps.segment).to eq(["Сегодня 27.10.14"])
127
+ end
128
+
129
+ it 'correctly segments text #022' do
130
+ ps = PragmaticSegmenter::Segmenter.new(text: "Сегодня 27 октября 2014 года.", language: 'ru')
131
+ expect(ps.segment).to eq(["Сегодня 27 октября 2014 года."])
132
+ end
133
+
134
+ it 'correctly segments text #023' do
135
+ ps = PragmaticSegmenter::Segmenter.new(text: "Эта машина стоит 150 000 дол.!", language: 'ru')
136
+ expect(ps.segment).to eq(["Эта машина стоит 150 000 дол.!"])
137
+ end
138
+
139
+ it 'correctly segments text #024' do
140
+ ps = PragmaticSegmenter::Segmenter.new(text: "Эта машина стоит $150 000!", language: 'ru')
141
+ expect(ps.segment).to eq(["Эта машина стоит $150 000!"])
142
+ end
143
+
144
+ it 'correctly segments text #025' do
145
+ ps = PragmaticSegmenter::Segmenter.new(text: "Вот номер моего телефона: +39045969798. Передавайте привет г-ну Шапочкину. До свидания.", language: 'ru')
146
+ expect(ps.segment).to eq(["Вот номер моего телефона: +39045969798.", "Передавайте привет г-ну Шапочкину.", "До свидания."])
147
+ end
148
+
149
+ it 'correctly segments text #026' do
150
+ ps = PragmaticSegmenter::Segmenter.new(text: "Постойте, разве можно указывать цены в у.е.!", language: 'ru')
151
+ expect(ps.segment).to eq(["Постойте, разве можно указывать цены в у.е.!"])
152
+ end
153
+
154
+ it 'correctly segments text #027' do
155
+ ps = PragmaticSegmenter::Segmenter.new(text: "Едем на скорости 90 км/ч в сторону пгт. Брагиновка, о котором мы так много слышали по ТВ!", language: 'ru')
156
+ expect(ps.segment).to eq(["Едем на скорости 90 км/ч в сторону пгт. Брагиновка, о котором мы так много слышали по ТВ!"])
157
+ end
158
+
159
+ it 'correctly segments text #028' do
160
+ ps = PragmaticSegmenter::Segmenter.new(text: "Д-р ветеринарных наук А. И. Семенов и пр. выступали на этом семинаре.", language: 'ru')
161
+ expect(ps.segment).to eq(["Д-р ветеринарных наук А. И. Семенов и пр. выступали на этом семинаре."])
162
+ end
163
+
164
+ it 'correctly segments text #029' do
165
+ ps = PragmaticSegmenter::Segmenter.new(text: "Уважаемый проф. Семенов! Просьба до 20.10 сдать отчет на кафедру.", language: 'ru')
166
+ expect(ps.segment).to eq(["Уважаемый проф. Семенов!", "Просьба до 20.10 сдать отчет на кафедру."])
167
+ end
168
+
169
+ it 'correctly segments text #030' do
170
+ ps = PragmaticSegmenter::Segmenter.new(text: "Первоначальная стоимость этого комплекта 30 долл., но сейчас действует скидка. Предъявите дисконтную карту, пожалуйста!", language: 'ru')
171
+ expect(ps.segment).to eq(["Первоначальная стоимость этого комплекта 30 долл., но сейчас действует скидка.", "Предъявите дисконтную карту, пожалуйста!"])
172
+ end
173
+
174
+ it 'correctly segments text #031' do
175
+ ps = PragmaticSegmenter::Segmenter.new(text: "Виктор съел пол-лимона и ушел по-английски из дома на ул. 1 Мая.", language: 'ru')
176
+ expect(ps.segment).to eq(["Виктор съел пол-лимона и ушел по-английски из дома на ул. 1 Мая."])
177
+ end
178
+
179
+ it 'correctly segments text #032' do
180
+ ps = PragmaticSegmenter::Segmenter.new(text: "Напоминаю Вам, что 25.10 день рождения у Маши К., нужно будет купить ей подарок.", language: 'ru')
181
+ expect(ps.segment).to eq(["Напоминаю Вам, что 25.10 день рождения у Маши К., нужно будет купить ей подарок."])
182
+ end
183
+
184
+ it 'correctly segments text #033' do
185
+ ps = PragmaticSegmenter::Segmenter.new(text: "В 2010-2012 гг. Виктор посещал г. Волгоград неоднократно.", language: 'ru')
186
+ expect(ps.segment).to eq(["В 2010-2012 гг. Виктор посещал г. Волгоград неоднократно."])
187
+ end
188
+
189
+ it 'correctly segments text #034' do
190
+ ps = PragmaticSegmenter::Segmenter.new(text: "Маленькая девочка бежала и кричала: «Не видали маму?»", language: 'ru')
191
+ expect(ps.segment).to eq(["Маленькая девочка бежала и кричала: «Не видали маму?»"])
192
+ end
193
+
194
+ it 'correctly segments text #035' do
195
+ ps = PragmaticSegmenter::Segmenter.new(text: "Кв. 234 находится на 4 этаже.", language: 'ru')
196
+ expect(ps.segment).to eq(["Кв. 234 находится на 4 этаже."])
197
+ end
198
+
199
+ it 'correctly segments text #036' do
200
+ ps = PragmaticSegmenter::Segmenter.new(text: "В это время года температура может подниматься до 40°C.", language: 'ru')
201
+ expect(ps.segment).to eq(["В это время года температура может подниматься до 40°C."])
202
+ end
203
+
204
+ it 'correctly segments text #037' do
205
+ ps = PragmaticSegmenter::Segmenter.new(text: "Нужно купить 1)рыбу 2)соль.", language: 'ru')
206
+ expect(ps.segment).to eq(["Нужно купить 1)рыбу 2)соль."])
207
+ end
208
+
209
+ it 'correctly segments text #038' do
210
+ ps = PragmaticSegmenter::Segmenter.new(text: "Машина едет со скоростью 100 км/ч.", language: 'ru')
211
+ expect(ps.segment).to eq(["Машина едет со скоростью 100 км/ч."])
212
+ end
213
+
214
+ it 'correctly segments text #039' do
215
+ ps = PragmaticSegmenter::Segmenter.new(text: "Л.Н. Толстой написал \"Войну и мир\". Кроме Волконских, Л. Н. Толстой состоял в близком родстве с некоторыми другими аристократическими родами. Дом, где родился Л.Н.Толстой, 1898 г. В 1854 году дом продан по распоряжению писателя на вывоз в село Долгое.", language: 'ru')
216
+ expect(ps.segment).to eq(["Л.Н. Толстой написал \"Войну и мир\".", "Кроме Волконских, Л. Н. Толстой состоял в близком родстве с некоторыми другими аристократическими родами.", "Дом, где родился Л.Н.Толстой, 1898 г. В 1854 году дом продан по распоряжению писателя на вывоз в село Долгое."])
217
+ end
218
+ end
219
+ end