Skip to content

Instantly share code, notes, and snippets.

@burningTyger
Created October 20, 2011 18:52
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save burningTyger/1301958 to your computer and use it in GitHub Desktop.
Save burningTyger/1301958 to your computer and use it in GitHub Desktop.
how to remove short vowels from Arabic strings

How to remove short vowels from Arabic strings

sometimes you might want to search Arabic text. Don't just let the user decide on the search string. You never know how your target string is spelled (short vowels are optional).

One way of doing it is to keep a devowelized string of the target and whenever a user wants to search it, strip all short vowels again.

To do so use this method:

# this method removes kasra, fatha and damma from lemma
# by doing a unicode range check on the string
def devowelize(str)
  str.delete("\u064B-\u0655")
end

Example:

target = "الرَّبُّ رَاعِيَّ فَلَسْتُ أَحْتَاجُ إِلَى شَيْءٍ. فِي مَرَاعٍ خَضْرَاءَ يُرْبِضُنِي، وَإِلَى مِيَاهٍ هَادِئَةٍ يَقُودُنِي.
يُنْعِشُ نَفْسِي وَيُرْشِدُنِي إِلَى طُرُقِ الْبِرِّ إِكْرَاماً لاَِسْمِهِ. حَتَّى إِذَا اجْتَزْتُ وَادِي ظِلاَلِ الْمَوْتِ،
لاَ أَخَافُ سُوءاً لأَنَّكَ تُرَافِقُنِي. عَصَاكَ وَعُكَّازُكَ هُمَا مَعِي يُشَدِّدَانِ عَزِيمَتِي.
تَبْسُطُ أَمَامِي مَأْدُبَةً عَلَى مَرًْأى مِنْ أَعْدَائِي.
مَسَحْتَ بِالزَّيْتِ رَأْسِي، وَأَفَضْتَ كَأْسِي. إِنَّمَا خَيْرٌ وَرَحْمَةٌ يَتْبَعَانِنِي طَوَالَ حَيَاتِي، وَيَكُونُ بَيْتُ الرَّبِّ مَسْكَناً لِي مَدَى الأَيَّامِ."

devowelize target
=> "الرب راعي فلست أحتاج إلى شيء. في مراع خضراء يربضني، وإلى مياه هادئة يقودني.
ينعش نفسي ويرشدني إلى طرق البر إكراما لاسمه. حتى إذا اجتزت وادي ظلال الموت،
لا أخاف سوءا لأنك ترافقني. عصاك وعكازك هما معي يشددان عزيمتي.
تبسط أمامي مأدبة على مرأى من أعدائي.
مسحت بالزيت رأسي، وأفضت كأسي. إنما خير ورحمة يتبعانني طوال حياتي، ويكون بيت الرب مسكنا لي مدى الأيام."

So if a user wants to search for "الرب", "الرَبُّ" or "الربُّ" he will always find "الرَّبُّ" (at least in its stripped version but that should be mapped to the version with vowels).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment