libindic / payyans

This library helps to convert ascii texts to unicode.
10 stars 15 forks source link

When there are two prebase characters, the first one is dropped #10

Closed asdofindia closed 1 year ago

asdofindia commented 4 years ago

As reported on Telegram

പയ്യൻസ് ഉപയോഗിച്ച് ആസ്‌കിയിൽ നിന്നും യൂണികോഡിലേക്ക് കൺവേർട്ട് ചെയ്യുമ്പോൾ ഒരു ചെറിയ പ്രശ്നം. "ഡ്രൈ", "ട്രൈ", "സ്ത്രൈ", "ഫ്രൈ" തുടങ്ങിയവയുടെ കൺവെർഷൻ ശരിയാവുന്നില്ല. smc-യിൽ നിന്ന് ഡൗൺലോഡ് ചെയ്ത പഴയ പയ്യൻസ് ആണ് ഞാൻ ഉപയോഗിക്കുന്നത്. കാർത്തിക ഫോണ്ടിൽ ഉള്ള ഒരു ടെക്സ്റ്റ് ഫയൽ ആണ് മാറ്റാൻ ശ്രമിക്കുന്നത്. മാപ്പ് ഫയൽ മാറ്റിയും തിരുത്തിയും ഞാൻ കുറച്ച് നോക്കി. ഒന്നും ശരിയാകുന്നില്ല. അറിയുന്നവർ ഒന്ന് ഉപദേശിക്കാമോ? ഇതാണ് അവസ്ഥ.

From .map file, ss=ൈ {=്ര U=ഡ ]=പ S=ട ^=ഫ

Ascii input, ss{U ss{] ss{S ss{^

payyans returns, ഡ്ര പ്ര ട്ര ഫ്ര

Confirmed thus:

Python 2.7.17 (default, Apr 15 2020, 17:20:14) 
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from libindic.payyans import Payyans
>>> instance = Payyans()
>>> result = instance.ASCII2Unicode('ss{U', 'karthika')
>>> result
u'\u0d21\u0d4d\u0d30'
>>> print(result)
ഡ്ര
asdofindia commented 4 years ago
>>> print(instance.ASCII2Unicode('sU', 'karthika'))
ഡെ
>>> print(instance.ASCII2Unicode('s{U', 'karthika'))
ഡ്ര

I think this is caused by this line

    if(self.isPrebase(unicode_letter)):  # സ്വരചിഹ്നമാണോ?
                        prebase_letter = unicode_letter

If there are two prebase letters, the first one gets replaced by the second one in the loop.

toolpost commented 4 years ago

Some more examples of this issue are here with smc version of payyans,

Ascii inputs, t{]aw kvs{sXWX Nn¡³ s{s^ s{sU ¢o³ sslt{UmfnIv

Expected results, പ്രേമം സ്ത്രൈണത ചിക്കൻ ഫ്രൈ ഡ്രൈ ക്ലീൻ ഹൈഡ്രോളിക്

Payyans returns, പ്രമം സ്‌തെണത ചിക്കന്‍ ഫെ ഡെ ക്ലീന്‍ ഹൈഡ്രാളിക്‌