persian 0.0.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.editorconfig +9 -0
- data/.gitignore +51 -0
- data/.rspec +3 -0
- data/.rubocop.yml +32 -0
- data/.travis.yml +8 -0
- data/Gemfile +10 -0
- data/Rakefile +36 -0
- data/lib/persian/counter.rb +61 -0
- data/lib/persian/date.rb +150 -0
- data/lib/persian/dynamic.rb +38 -0
- data/lib/persian/list/alphabet.rb +107 -0
- data/lib/persian/list/character.rb +193 -0
- data/lib/persian/list/homonyms.rb +59 -0
- data/lib/persian/list/number.rb +168 -0
- data/lib/persian/num_text.rb +53 -0
- data/lib/persian/number.rb +81 -0
- data/lib/persian/text/keyboard.rb +22 -0
- data/lib/persian/text/text.rb +214 -0
- data/lib/persian/tokenizer.rb +56 -0
- data/lib/persian/unicode.rb +42 -0
- data/lib/persian/url.rb +25 -0
- data/lib/persian/version.rb +2 -1
- data/lib/persian.rb +16 -39
- data/persian.gemspec +26 -0
- data/readme.md +48 -0
- data/spec/counter_spec.rb +83 -0
- data/spec/dynamic_spec.rb +6 -0
- data/spec/num_text_spec.rb +17 -0
- data/spec/number_spec.rb +129 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/text_spec.rb +258 -0
- data/spec/tokenizer_spec.rb +31 -0
- data/spec/unicode_spec.rb +25 -0
- data/spec/url_spec.rb +11 -0
- metadata +42 -12
data/spec/number_spec.rb
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'persian number methods' do
|
6
|
+
it 'should convert english numbers ( numeric ) to persian numbers' do
|
7
|
+
before = 1_000
|
8
|
+
after = '۱۰۰۰'
|
9
|
+
expect(Persian::Number.number(before)).to eq(after)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should convert english numbers (string) to persian numbers' do
|
13
|
+
before = '1234567890'
|
14
|
+
after = '۱۲۳۴۵۶۷۸۹۰'
|
15
|
+
expect(Persian::Number.number(before)).to eq(after)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should convert arabic numbers to persian numbers' do
|
19
|
+
before = '٠١٢٣٤٥٦٧٨٩'
|
20
|
+
after = '۰۱۲۳۴۵۶۷۸۹'
|
21
|
+
expect(Persian::Number.number(before)).to eq(after)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should convert arabic and english numbers in strings to persian numbers' do
|
25
|
+
before = 'عدد 1 و ٥ دو عدد زیبا هستند'
|
26
|
+
after = 'عدد ۱ و ۵ دو عدد زیبا هستند'
|
27
|
+
expect(Persian::Number.number(before)).to eq(after)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should convert english numbers ( numeric ) to arabic numbers' do
|
31
|
+
before = 1_000
|
32
|
+
after = '١٠٠٠'
|
33
|
+
expect(Persian::Number.number(before, lang: 'ar')).to eq(after)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should convert english numbers (string) to arabic numbers' do
|
37
|
+
before = '1234567890'
|
38
|
+
after = '١٢٣٤٥٦٧٨٩٠'
|
39
|
+
expect(Persian::Number.number(before, lang: 'ar')).to eq(after)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should convert persian numbers to arabic numbers' do
|
43
|
+
before = '۰۱۲۳۴۵۶۷۸۹'
|
44
|
+
after = '٠١٢٣٤٥٦٧٨٩'
|
45
|
+
expect(Persian::Number.number(before, lang: 'ar')).to eq(after)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should convert persian and english numbers in strings to arabic numbers' do
|
49
|
+
before = 'عدد 1 و ۵ دو عدد زیبا هستند'
|
50
|
+
after = 'عدد ١ و ٥ دو عدد زیبا هستند'
|
51
|
+
expect(Persian::Number.number(before, lang: 'ar')).to eq(after)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should convert english numbers ( numeric ) to english numbers (string)' do
|
55
|
+
before = 1_000
|
56
|
+
after = '1000'
|
57
|
+
expect(Persian::Number.number(before, lang: 'en')).to eq(after)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should convert arabic numbers (string) to english numbers' do
|
61
|
+
before = '١٢٣٤٥٦٧٨٩٠'
|
62
|
+
after = '1234567890'
|
63
|
+
expect(Persian::Number.number(before, lang: 'en')).to eq(after)
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should convert persian numbers to english numbers' do
|
67
|
+
before = '۰۱۲۳۴۵۶۷۸۹'
|
68
|
+
after = '0123456789'
|
69
|
+
expect(Persian::Number.number(before, lang: 'en')).to eq(after)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should convert persian and arabic numbers in strings to english numbers' do
|
73
|
+
before = 'عدد ۱ و ٥ دو عدد زیبا هستند'
|
74
|
+
after = 'عدد 1 و 5 دو عدد زیبا هستند'
|
75
|
+
expect(Persian::Number.number(before, lang: 'en')).to eq(after)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should convert english numbers ( numeric ) to english numbers (int)' do
|
79
|
+
before = 1000
|
80
|
+
after = 1_000
|
81
|
+
expect(Persian::Number.number(before, lang: 'en', return: 'int')).to eq(after)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should convert arabic numbers (string) to english numbers (int)' do
|
85
|
+
before = '١٢٣٤٥٦٧٨٩٠'
|
86
|
+
after = 1_234_567_890
|
87
|
+
expect(Persian::Number.number(before, lang: 'en', return: 'int')).to eq(after)
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'should convert persian numbers to english numbers (int)' do
|
91
|
+
before = '۰۱۲۳۴۵۶۷۸۹'
|
92
|
+
after = 123_456_789
|
93
|
+
expect(Persian::Number.number(before, lang: 'en', return: 'int')).to eq(after)
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'should convert any number to persian number' do
|
97
|
+
before = '1234567890'
|
98
|
+
after = '۱۲۳۴۵۶۷۸۹۰'
|
99
|
+
|
100
|
+
expect(Persian::Number.to_persian(before)).to eq(after)
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should convert any number to english number' do
|
104
|
+
before = '١٢٣٤٥٦٧٨٩٠'
|
105
|
+
after = '1234567890'
|
106
|
+
|
107
|
+
expect(Persian::Number.to_english(before)).to eq(after)
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should convert any number to arabic number' do
|
111
|
+
before = '1234567890'
|
112
|
+
after = '١٢٣٤٥٦٧٨٩٠'
|
113
|
+
|
114
|
+
expect(Persian::Number.to_arabic(before)).to eq(after)
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'should return a random number in persian' do
|
118
|
+
range = 20
|
119
|
+
|
120
|
+
expect(Persian::Number.number(Persian::Number.random(range), lang: 'en', return: 'int')).to be <= range
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should return integer of any number' do
|
124
|
+
before = '۱۲۳۴۵۶۷۸۹۰'
|
125
|
+
after = 1_234_567_890
|
126
|
+
|
127
|
+
expect(Persian::Number.to_i(before)).to eq(after)
|
128
|
+
end
|
129
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/spec/text_spec.rb
ADDED
@@ -0,0 +1,258 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'persian character methods' do
|
6
|
+
it 'should convert arbaic characters to persian characters' do
|
7
|
+
before = 'ملوك'
|
8
|
+
after = 'ملوک'
|
9
|
+
expect(Persian::Text.character(before)).to eq(after)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should remove redundent spaces in strings' do
|
13
|
+
before = 'سلام من به تو یار قدیمی'
|
14
|
+
after = 'سلام من به تو یار قدیمی'
|
15
|
+
expect(Persian::Text.remove_extra_spaces(before)).to eq(after)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should remove all arabic harekats from strings' do
|
19
|
+
before = 'مَتَی ما تَلْقَ مَنْ تَهْوَی دَعِ الدُّنیا وأهْْمِلْها'
|
20
|
+
after = 'متی ما تلق من تهوی دع الدنیا وأهملها'
|
21
|
+
expect(Persian::Text.remove_harekats(before)).to eq(after)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should remove all brackets from text' do
|
25
|
+
before = 'سلام من به «تو»'
|
26
|
+
after = 'سلام من به تو'
|
27
|
+
expect(Persian::Text.remove_brackets(before)).to eq(after)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should remove all signs from text' do
|
31
|
+
before = 'مسلمان و دروغ؟!'
|
32
|
+
after = 'مسلمان و دروغ'
|
33
|
+
expect(Persian::Text.remove_signs(before)).to eq(after)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should replace all zwnjs with space ' do
|
37
|
+
before = 'مندرنیمفاصلهاتاسیرم'
|
38
|
+
after = 'من در نیم فاصله ات اسیرم'
|
39
|
+
|
40
|
+
expect(Persian::Text.replace_zwnj_with_space(before)).to eq(after)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should replace [ & ], { & }, ( & ), " & " with « & »' do
|
44
|
+
before_first = 'اگر اراده ای نباشد عشقی نیست. "گاندی"'
|
45
|
+
after_first = 'اگر اراده ای نباشد عشقی نیست. «گاندی»'
|
46
|
+
|
47
|
+
before_second = 'اگر اراده ای نباشد عشقی نیست. [گاندی]'
|
48
|
+
after_second = 'اگر اراده ای نباشد عشقی نیست. «گاندی»'
|
49
|
+
|
50
|
+
before_third = 'اگر اراده ای نباشد عشقی نیست. (گاندی)'
|
51
|
+
after_third = 'اگر اراده ای نباشد عشقی نیست. «گاندی»'
|
52
|
+
|
53
|
+
before_forth = 'اگر اراده ای نباشد عشقی نیست. {گاندی}'
|
54
|
+
after_forth = 'اگر اراده ای نباشد عشقی نیست. «گاندی»'
|
55
|
+
|
56
|
+
expect(Persian::Text.general_brackets(before_first)).to eq(after_first)
|
57
|
+
expect(Persian::Text.general_brackets(before_second)).to eq(after_second)
|
58
|
+
expect(Persian::Text.general_brackets(before_third)).to eq(after_third)
|
59
|
+
expect(Persian::Text.general_brackets(before_forth)).to eq(after_forth)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should replace "&" with ( & )' do
|
63
|
+
before = 'اگر اراده ای نباشد عشقی نیست. "گاندی"'
|
64
|
+
after = 'اگر اراده ای نباشد عشقی نیست. (گاندی)'
|
65
|
+
expect(Persian::Text.general_brackets(before, '(', ')')).to eq(after)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should add ی after names that ends with ا, و, ه' do
|
69
|
+
before_first = 'داریوش'
|
70
|
+
after_first = 'داریوش'
|
71
|
+
|
72
|
+
before_second = 'حیفا'
|
73
|
+
after_second = 'حیفای'
|
74
|
+
|
75
|
+
before_third = 'الهه'
|
76
|
+
after_third = 'الههی'
|
77
|
+
|
78
|
+
expect(Persian::Text.fix_y_after_vowel(before_first)).to eq(after_first)
|
79
|
+
expect(Persian::Text.fix_y_after_vowel(before_second)).to eq(after_second)
|
80
|
+
expect(Persian::Text.fix_y_after_vowel(before_third)).to eq(after_third)
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should replace english characters with it\'s same key persian characters on keyboard' do
|
84
|
+
before = ';ajd k,p'
|
85
|
+
after = 'کشتی نوح'
|
86
|
+
expect(Persian::Text.english_to_persian_char(before)).to eq(after)
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'should replace persian characters with it\'s same key english characters on keyboard' do
|
90
|
+
before = 'لخخلمث.زخپ'
|
91
|
+
after = 'google.com'
|
92
|
+
expect(Persian::Text.persian_to_english_char(before)).to eq(after)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'should replace space with zwnj after می and نمی' do
|
96
|
+
mi_before = 'بچه ها نگاه می کنند'
|
97
|
+
mi_after = 'بچه ها نگاه میکنند'
|
98
|
+
|
99
|
+
nmi_before = 'هنوز واژهها درد را نمی فهمند.'
|
100
|
+
nmi_after = 'هنوز واژهها درد را نمیفهمند.'
|
101
|
+
|
102
|
+
expect(Persian::Text.replace_zwnj_mi(mi_before)).to eq(mi_after)
|
103
|
+
expect(Persian::Text.replace_zwnj_mi(nmi_before)).to eq(nmi_after)
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should Resplace ست with \sاست if lastest character before \s is ا' do
|
107
|
+
first_before = 'امروز، فردا است.'
|
108
|
+
first_after = 'امروز، فرداست.'
|
109
|
+
|
110
|
+
second_before = 'نام او علی است.'
|
111
|
+
second_after = 'نام او علی است.'
|
112
|
+
|
113
|
+
expect(Persian::Text.ast(first_before)).to eq(first_after)
|
114
|
+
expect(Persian::Text.ast(second_before)).to eq(second_after)
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'should remove keshide characters' do
|
118
|
+
before = 'سلـــــــــــــــــــام چطوری؟'
|
119
|
+
after = 'سلام چطوری؟'
|
120
|
+
expect(Persian::Text.keshide(before)).to eq(after)
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should replace ئ with ی if next character is ی' do
|
124
|
+
before = 'پائیز'
|
125
|
+
after = 'پاییز'
|
126
|
+
expect(Persian::Text.replace_e_y(before)).to eq(after)
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'should replace 3 or more dots (.) with (…) character' do
|
130
|
+
before = 'خدانگهدار...'
|
131
|
+
after = 'خدانگهدار…'
|
132
|
+
expect(Persian::Text.three_dots(before)).to eq(after)
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'should fix zwnj for تر - تری - ترین - ها - های suffixes' do
|
136
|
+
before = 'آن زیبا ترین رویا'
|
137
|
+
after = 'آن زیباترین رویا'
|
138
|
+
expect(Persian::Text.suffix(before)).to eq(after)
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'should remove extra persian question marks' do
|
142
|
+
before = 'چی؟؟؟؟'
|
143
|
+
after = 'چی؟'
|
144
|
+
expect(Persian::Text.remove_extra_question_mark(before)).to eq(after)
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'should add zero-width none-joiner to specific index in string' do
|
148
|
+
before = 'دوستهایم'
|
149
|
+
after = 'دوستهایم'
|
150
|
+
expect(Persian::Text.add_zwnj(before, 4)).to eq(after)
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'should remove extra question and exclamation marks' do
|
154
|
+
before = 'نه بابا ؟؟!!!!!!!!!!!!!'
|
155
|
+
after = 'نه بابا ؟!'
|
156
|
+
|
157
|
+
expect(Persian::Text.remove_question_exclamation(before)).to eq(after)
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'should remove stopwords from text' do
|
161
|
+
before = 'چوب در آب افتاد'
|
162
|
+
after = 'چوب آب افتاد'
|
163
|
+
|
164
|
+
expect(Persian::Text.remove_stopwords(before)).to eq(after)
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'should remove space before noghtevirgool' do
|
168
|
+
before = 'تصور برخی از اعضای انجمن نسبت به تهران کاملا متفاوت با قبل شده است ؛ آنها فکر میکردند که تهران یک بیابان و منطقهای بی امکانات است.'
|
169
|
+
after = 'تصور برخی از اعضای انجمن نسبت به تهران کاملا متفاوت با قبل شده است؛ آنها فکر میکردند که تهران یک بیابان و منطقهای بی امکانات است.'
|
170
|
+
|
171
|
+
expect(Persian::Text.remove_space_noghtevirgool(before)).to eq(after)
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'should remove extra persian signs after noghtevirgool' do
|
175
|
+
before = 'آهان این شد؛!'
|
176
|
+
after = 'آهان این شد؛'
|
177
|
+
|
178
|
+
expect(Persian::Text.remove_signs_after_noghtevirgool(before)).to eq(after)
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'should add space after noghtevirgool' do
|
182
|
+
before = 'آهان این شد؛بیا بریم'
|
183
|
+
after = 'آهان این شد؛ بیا بریم'
|
184
|
+
|
185
|
+
expect(Persian::Text.space_after_noghtevirgool(before)).to eq(after)
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'should replace noghtevirgool`s at the end of paragraphs with dot' do
|
189
|
+
before_first = 'این آخر کار است؛'
|
190
|
+
after_first = 'این آخر کار است.'
|
191
|
+
|
192
|
+
expect(Persian::Text.remove_noghtevirgool_para_end(before_first)).to eq(after_first)
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'should remove noghtevirgool after brackets' do
|
196
|
+
before = 'این یک مثال(؛برای تست) است'
|
197
|
+
after = 'این یک مثال(برای تست) است'
|
198
|
+
|
199
|
+
expect(Persian::Text.remove_noghtevirgool_baz_start(before)).to eq(after)
|
200
|
+
end
|
201
|
+
|
202
|
+
it 'should remove spaces before virgool' do
|
203
|
+
before = 'لئوناردو یک نقاش پرکار نبود ، در حقیقت او پرکارترین نقشهکش و طراح بود.'
|
204
|
+
after = 'لئوناردو یک نقاش پرکار نبود، در حقیقت او پرکارترین نقشهکش و طراح بود.'
|
205
|
+
|
206
|
+
expect(Persian::Text.remove_space_before_virgool(before)).to eq(after)
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'should remove extra signs after virgool' do
|
210
|
+
before = 'لئوناردو یک نقاش پرکار نبود، !در حقیقت او پرکارترین نقشهکش و طراح بود.'
|
211
|
+
after = 'لئوناردو یک نقاش پرکار نبود، در حقیقت او پرکارترین نقشهکش و طراح بود.'
|
212
|
+
|
213
|
+
expect(Persian::Text.remove_signs_after_virgool(before)).to eq(after)
|
214
|
+
end
|
215
|
+
|
216
|
+
it 'should add space after virgool if missing' do
|
217
|
+
before = 'لئوناردو یک نقاش پرکار نبود،در حقیقت او پرکارترین نقشهکش و طراح بود.'
|
218
|
+
after = 'لئوناردو یک نقاش پرکار نبود، در حقیقت او پرکارترین نقشهکش و طراح بود.'
|
219
|
+
|
220
|
+
expect(Persian::Text.space_after_virgool(before)).to eq(after)
|
221
|
+
end
|
222
|
+
|
223
|
+
it 'should remove specific character from every words in text' do
|
224
|
+
before = 'این برای پاک کردن نون است'
|
225
|
+
char = 'ن'
|
226
|
+
after = 'ای برای پاک کرد و است'
|
227
|
+
|
228
|
+
expect(Persian::Text.rm_char(before, char)).to eq(after)
|
229
|
+
end
|
230
|
+
|
231
|
+
it 'should replace end of line virgool with dot' do
|
232
|
+
text = 'جمله با ویرگول پایان نمیپذیرد،'
|
233
|
+
after = 'جمله با ویرگول پایان نمیپذیرد.'
|
234
|
+
|
235
|
+
expect(Persian::Text.rm_virgool_in_end(text)).to eq(after)
|
236
|
+
end
|
237
|
+
|
238
|
+
it 'should add space after dot\'s ends with no space character' do
|
239
|
+
text = 'سلام.اسپیس کو؟'
|
240
|
+
after = 'سلام. اسپیس کو؟'
|
241
|
+
expect(Persian::Text.space_after_dot(text)).to eq(after)
|
242
|
+
end
|
243
|
+
|
244
|
+
it 'should remove all repeated characters from text' do
|
245
|
+
text = 'سلااااااام.چی میکنییی؟؟؟؟؟'
|
246
|
+
after = 'سلام.چی میکنی؟'
|
247
|
+
|
248
|
+
expect(Persian::Text.squeeze(text)).to eq(after)
|
249
|
+
end
|
250
|
+
|
251
|
+
it 'should remove text postfix' do
|
252
|
+
text = 'پسره'
|
253
|
+
postfix = 'ه'
|
254
|
+
result = 'پسر'
|
255
|
+
|
256
|
+
expect(Persian::Text.remove_postfix(text, postfix)).to eq(result)
|
257
|
+
end
|
258
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'persian tokenizers' do
|
6
|
+
it 'should return list of words and special persian characters ' do
|
7
|
+
before = 'آیا روزی به اسرار این اتفاقات ماوراء طبیعی، این انعکاس سایهٔ روح که در حالت اغماء و برزخ بین خواب و بیداری جلوه میکند کسی پی خواهد برد؟'
|
8
|
+
after = ['آیا', 'روزی', 'به', 'اسرار', 'این', 'اتفاقات', 'ماوراء', 'طبیعی', '،', 'این', 'انعکاس', 'سایهٔ', 'روح', 'که', 'در', 'حالت', 'اغماء', 'و', 'برزخ', 'بین', 'خواب', 'و', 'بیداری', 'جلوه', 'میکند', 'کسی', 'پی', 'خواهد', 'برد', '؟']
|
9
|
+
|
10
|
+
expect(Persian::Tokenizer.tokenize(before)).to eq(after)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should tokenize as a serie' do
|
14
|
+
text = 'سلام من به تو یار قدیمی'
|
15
|
+
parts = 3
|
16
|
+
result = ['سلام من به', 'من به تو', 'به تو یار', 'تو یار قدیمی']
|
17
|
+
|
18
|
+
expect(Persian::Tokenizer.tokenize_more(text, parts)).to eq(result)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should split paragraphs' do
|
22
|
+
text = "
|
23
|
+
یوهانس برامس در سال ۱۸۳۳ در شهر هامبورگ آلمان در خانوادهای فقیر به دنیا آمد. تحصیلات ابتدایی موسیقی را نزد پدرش که نوازنده کنترباس بود فرا گرفت.
|
24
|
+
برامس با ویولونیستهای مشهوری چون رمنی و یواخیم آشنا شد و در طول این آشنایی بود که رمنی موسیقی محلی مجارستان را به برامس معرفی کرد و تحت تأثیر آن برامس رقصهای مجار خود را نوشت.
|
25
|
+
"
|
26
|
+
result = ['یوهانس برامس در سال ۱۸۳۳ در شهر هامبورگ آلمان در خانوادهای فقیر به دنیا آمد. تحصیلات ابتدایی موسیقی را نزد پدرش که نوازنده کنترباس بود فرا گرفت.',
|
27
|
+
'برامس با ویولونیستهای مشهوری چون رمنی و یواخیم آشنا شد و در طول این آشنایی بود که رمنی موسیقی محلی مجارستان را به برامس معرفی کرد و تحت تأثیر آن برامس رقصهای مجار خود را نوشت.']
|
28
|
+
|
29
|
+
expect(Persian::Tokenizer.split_paragraphs(text)).to eq(result)
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'persian character methods' do
|
6
|
+
it 'should return unicode character from codepoint hex' do
|
7
|
+
codepoint = 0x062B
|
8
|
+
char = 'ث'
|
9
|
+
|
10
|
+
expect(Persian::Unicode.codepoint_to_char(codepoint)).to eq(char)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should return text between RIGHT-TO-LETF EMBEDDING(U+202B) and Pop Directional Format(U+202C)' do
|
14
|
+
before = 'مست+'
|
15
|
+
after = 'مست+'
|
16
|
+
expect(Persian::Unicode.rle(before)).to eq(after)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should text between return LETF-TO-RIGHT EMBEDDING(U+202A) and Pop Directional Format(U+202C)' do
|
20
|
+
before = 'من c++ بلدم'
|
21
|
+
after = 'من c++ بلدم'
|
22
|
+
|
23
|
+
expect(Persian::Unicode.lre(before)).to eq(after)
|
24
|
+
end
|
25
|
+
end
|
data/spec/url_spec.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'persian url normalizer methods' do
|
6
|
+
it 'should normalize persian text fo use in url' do
|
7
|
+
text = '«دونالد ترامپ» پیروز انتخابات ایالات متحده شد'
|
8
|
+
normal = 'دونالد-ترامپ-پیروز-انتخابات-ایالات-متحده-شد'
|
9
|
+
expect(Persian::Url.urlify(text)).to eq(normal)
|
10
|
+
end
|
11
|
+
end
|
metadata
CHANGED
@@ -1,38 +1,70 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: persian
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dariush Abbasi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '3.4'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
27
|
-
description:
|
26
|
+
version: '3.4'
|
27
|
+
description: A set of utilities for Persian language.
|
28
28
|
email: poshtehani@gmail.com
|
29
29
|
executables: []
|
30
30
|
extensions: []
|
31
31
|
extra_rdoc_files: []
|
32
32
|
files:
|
33
|
+
- ".editorconfig"
|
34
|
+
- ".gitignore"
|
35
|
+
- ".rspec"
|
36
|
+
- ".rubocop.yml"
|
37
|
+
- ".travis.yml"
|
38
|
+
- Gemfile
|
39
|
+
- Rakefile
|
33
40
|
- lib/persian.rb
|
41
|
+
- lib/persian/counter.rb
|
42
|
+
- lib/persian/date.rb
|
43
|
+
- lib/persian/dynamic.rb
|
44
|
+
- lib/persian/list/alphabet.rb
|
45
|
+
- lib/persian/list/character.rb
|
46
|
+
- lib/persian/list/homonyms.rb
|
47
|
+
- lib/persian/list/number.rb
|
48
|
+
- lib/persian/num_text.rb
|
49
|
+
- lib/persian/number.rb
|
50
|
+
- lib/persian/text/keyboard.rb
|
51
|
+
- lib/persian/text/text.rb
|
52
|
+
- lib/persian/tokenizer.rb
|
53
|
+
- lib/persian/unicode.rb
|
54
|
+
- lib/persian/url.rb
|
34
55
|
- lib/persian/version.rb
|
35
|
-
|
56
|
+
- persian.gemspec
|
57
|
+
- readme.md
|
58
|
+
- spec/counter_spec.rb
|
59
|
+
- spec/dynamic_spec.rb
|
60
|
+
- spec/num_text_spec.rb
|
61
|
+
- spec/number_spec.rb
|
62
|
+
- spec/spec_helper.rb
|
63
|
+
- spec/text_spec.rb
|
64
|
+
- spec/tokenizer_spec.rb
|
65
|
+
- spec/unicode_spec.rb
|
66
|
+
- spec/url_spec.rb
|
67
|
+
homepage: http://github.com/dariubs/persian.rb
|
36
68
|
licenses:
|
37
69
|
- MIT
|
38
70
|
metadata: {}
|
@@ -51,10 +83,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
51
83
|
- !ruby/object:Gem::Version
|
52
84
|
version: '0'
|
53
85
|
requirements: []
|
54
|
-
|
55
|
-
rubygems_version: 2.4.6
|
86
|
+
rubygems_version: 3.2.5
|
56
87
|
signing_key:
|
57
88
|
specification_version: 4
|
58
|
-
summary: Persian language
|
89
|
+
summary: Persian language for ruby.
|
59
90
|
test_files: []
|
60
|
-
has_rdoc:
|