Python and Theological text
This is my first blog, i will show here how to use python to deal with a very important text taking in consideration with the following methods:
- Opening the text
- Processing the text from word document to text document without converting the text, or using it in a text file
- Splitting the text (both word split and line split)
- Extracting the derives of words
- Finding the concordances of the derives in different lines in the text.
- Many other useful techniques in python dealing with text.
Extracting derives of word (name, verb, etc...) in a text. The text i will use here is a Coran.
You can download the version of the book here, it's very important to know that in Python dealing with text is better to keep the text in .txt format.
We will look today the derives of verb صرط (sarata) in the whole book and apply a very nice techniques in python to gain a very good knowledge.
Let's first load our book here by:
>>> filename = open('coranworktext.txt', encoding = 'utf-8')
>>> coran = filename.read()
>>> sp_coran = coran.split() # splitting the book into words
>>> verset_coran = coran.split('.') # splitting the whole book into verset
>>> len(verset_coran)
6237>>> verset_coran[:7] # Extracting the first 7 versets of the book
['\ufeffبسم الله الرحمن الرحيم (1 الفَاتِحَة - مكية)', ' الحمد لله رب العالمين (2 الفَاتِحَة - مكية)', ' الرحمن الرحيم (3 الفَاتِحَة - مكية)', ' مالك يوم الدين (4 الفَاتِحَة - مكية)', ' إياك نعبد وإياك نستعين (5 الفَاتِحَة - مكية)', ' اهدنا الصراط المستقيم (6 الفَاتِحَة - مكية)', ' صراط الذين أنعمت عليهم غير المغضوب عليهم ولا الضالين (7 الفَاتِحَة - مكية)']
Here in the last output, you can see the presence of derives of sarata (صرط) almost 2 but the first is الصراط (assirat) and the second is صراط (sirat). (There are techniques in NLTK packages for semantic but we will do it differently here).
Here, we will find the derives of verb SARATA or in arabic صرط in the whole book. We will predict different appearance of sarata or صرط in the whole book. I have 5 hypothesis here and we just look those who match in the book and the rest doesn't matter and will not appear here. We will find them in the splited coran sp_coran
>>> for w in sp_coran:
if "صرط" in w or "صراط" in w or "صروط" in w or "صريط" in w or "صارط" in w or "صوارط" in w:
print(w, end = ' , ')
الصراط , صراط , صراط , صراط , صراط , صراط , صراطا , صراطا , صراط , صراط , صراط , صراط , صراطي , صراط , صراطك , صراط , صراط , صراط , صراط , صراط , صراط , صراط , صراط , صراطا , الصراط , صراط , صراط , صراط , الصراط , صراط , صراط , صراط , صراط , الصراط , صراط , الصراط , الصراط , صراط , صراط , صراط , صراط , صراط , صراطا , صراطا , صراط ,
The output here is important, there are different repetitions of the same string because one word can be mroe presence in one Chapter (or Surat) or in different chapters (or different surats). We will create a variable to keep them.
>>> sirat = []
>>> for w in sp_coran:
if "صرط" in w or "صراط" in w or "صروط" in w or "صريط" in w or "صارط" in w or "صوارط" in w:
sirat.append(w)
To see the total words without repetition, we can do this:
>>> set(sirat)
{'صراطا', 'صراط', 'الصراط', 'صراطي', 'صراطك'}
We will keep sirat without using set because we need to count every word to get the total
>>> sirat
['الصراط', 'صراط', 'صراط', 'صراط', 'صراط', 'صراط', 'صراطا', 'صراطا', 'صراط', 'صراط', 'صراط', 'صراط', 'صراطي', 'صراط', 'صراطك', 'صراط', 'صراط', 'صراط', 'صراط', 'صراط', 'صراط', 'صراط', 'صراط', 'صراطا', 'الصراط', 'صراط', 'صراط', 'صراط', 'الصراط', 'صراط', 'صراط', 'صراط', 'صراط', 'الصراط', 'صراط', 'الصراط', 'الصراط', 'صراط', 'صراط', 'صراط', 'صراط', 'صراط', 'صراطا', 'صراطا', 'صراط']
We will import a library called collections, which is a very important library in python for counting words and many others techniques.
>>> import collections
>>> counted_sarata = collections.Counter(sirat).most_common()
>>> counted_sarata
[('صراط', 32), ('الصراط', 6), ('صراطا', 5), ('صراطي', 1), ('صراطك', 1)]
To verify that one of the output has the same total number, we can take one of them in sp_coran and use the count method.
>>> sp_coran.count('صراط')
32A non python technique here, but if you have yours please notify me:
It's very important to note here, i will manually create space between apostrophe and strings (or words) to separate them clearly and to avoid the similarity while iterating through the different versets.
I will create in a variable in Arabic "صرط" which is the initial verb of the output here and create the distanciation of apostrophe and strings:
صرط =
[( ' صراط ' , 32), ( ' الصراط ' , 6), ( ' صراطا ' , 5), ( ' صراطي ' , 1), ( ' صراطك ' , 1)]
Here, there is a clear difference between the counted_sarata and our new variable صرط
[(' صراط' , 32), (' الصراط ', 6), (' صراطا ', 5), (' صراطي ', 1), (' صراطك ', 1)]
Now, we can locate every string in the book by the following method (but there are different techniques):
for k,v in صرط:
for w in verset_coran:
if k in w:
print(k, " ", w.partition(k), file = open('sarata_in_coran.txt', 'a+', encoding = 'utf-8'))
I saved my output into a specific text file named ' sarata_in_coran.txt', because the output can be large and not necessary to take huge space in my shell
صراط ('', ' صراط ', 'الذين أنعمت عليهم غير المغضوب عليهم ولا الضالين (7 الفَاتِحَة - مكية)')
صراط (' سيقول السفهاء من الناس ما ولاهم عن قبلتهم التي كانوا عليها قل لله المشرق والمغرب يهدي من يشاء إلى', ' صراط ', 'مستقيم (142 الًبَقَرَة - مدنية)')
صراط (' كان الناس أمة واحدة فبعث الله النبيين مبشرين ومنذرين وأنزل معهم الكتاب بالحق ليحكم بين الناس فيما اختلفوا فيه وما اختلف فيه إلا الذين أوتوه من بعد ما جاءتهم البينات بغيا بينهم فهدى الله الذين آمنوا لما اختلفوا فيه من الحق بإذنه والله يهدي من يشاء إلى', ' صراط ', 'مستقيم (213 الًبَقَرَة - مدنية)')
صراط (' إن الله ربي وربكم فاعبدوه هذا', ' صراط ', 'مستقيم (51 آلِ عِمرَان - مدنية)')
صراط (' وكيف تكفرون وأنتم تتلى عليكم آيات الله وفيكم رسوله ومن يعتصم بالله فقد هدي إلى', ' صراط ', 'مستقيم (101 آلِعِمرَان - مدنية)')
صراط (' يهدي به الله من اتبع رضوانه سبل السلام ويخرجهم من الظلمات إلى النور بإذنه ويهديهم إلى', ' صراط ', 'مستقيم (16 الْمَائِدَة - مدنية)')
صراط (' والذين كذبوا بآياتنا صم وبكم في الظلمات من يشإ الله يضلله ومن يشأ يجعله على', ' صراط ', 'مستقيم (39 الْأَنْعَام - مكية)')
صراط (' ومن آبائهم وذرياتهم وإخوانهم واجتبيناهم وهديناهم إلى', ' صراط ', 'مستقيم (87 الْأَنْعَام - مكية)')
صراط (' وهذا', ' صراط ', 'ربك مستقيما قد فصلنا الآيات لقوم يذكرون (126 الْأَنْعَام - مكية)')
صراط (' قل إنني هداني ربي إلى', ' صراط ', 'مستقيم دينا قيما ملة إبراهيم حنيفا وما كان من المشركين (161 الْأَنْعَام - مكية)')
صراط (' ولا تقعدوا بكل', ' صراط ', 'توعدون وتصدون عن سبيل الله من آمن به وتبغونها عوجا واذكروا إذ كنتم قليلا فكثركم وانظروا كيف كان عاقبة المفسدين (86 الْأَعْرَاف - مكية)')
صراط (' والله يدعو إلى دار السلام ويهدي من يشاء إلى', ' صراط ', 'مستقيم (25 يُونُسْ - مكية)')
صراط (' إني توكلت على الله ربي وربكم ما من دابة إلا هو آخذ بناصيتها إن ربي على', ' صراط ', 'مستقيم (56 هُود - مكية)')
صراط (' بسم الله الرحمن الرحيم الر كتاب أنزلناه إليك لتخرج الناس من الظلمات إلى النور بإذن ربهم إلى', ' صراط ', 'العزيز الحميد (1 إِبْرَاهِيم - مكية)')
صراط (' قال هذا', ' صراط ', 'علي مستقيم (41 الْحِجْر - مكية)')
صراط (' وضرب الله مثلا رجلين أحدهما أبكم لا يقدر على شيء وهو كل على مولاه أينما يوجهه لا يأت بخير هل يستوي هو ومن يأمر بالعدل وهو على', ' صراط ', 'مستقيم (76 النَّحْل - مكية)')
صراط (' شاكرا لأنعمه اجتباه وهداه إلى', ' صراط ', 'مستقيم (121 النَّحْل - مكية)')
صراط (' وإن الله ربي وربكم فاعبدوه هذا', ' صراط ', 'مستقيم (36 مَرْيَم - مكية)')
صراط (' وهدوا إلى الطيب من القول وهدوا إلى', ' صراط ', 'الحميد (24 الْحَج - مدنية)')
صراط (' وليعلم الذين أوتوا العلم أنه الحق من ربك فيؤمنوا به فتخبت له قلوبهم وإن الله لهاد الذين آمنوا إلى', ' صراط ', 'مستقيم (54 الْحَج - مدنية)')
صراط (' وإنك لتدعوهم إلى', ' صراط ', 'مستقيم (73 الْمُؤْمِنُون - مكية)')
صراط (' لقد أنزلنا آيات مبينات والله يهدي من يشاء إلى', ' صراط ', 'مستقيم (46 النُّورُ - مدنية)')
صراط (' ويرى الذين أوتوا العلم الذي أنزل إليك من ربك هو الحق ويهدي إلى', ' صراط ', 'العزيز الحميد (6 سَبَإ - مكية)')
صراط (' على', ' صراط ', 'مستقيم (4 يَس - مكية)')
صراط (' وأن اعبدوني هذا', ' صراط ', 'مستقيم (61 يَس - مكية)')
صراط (' من دون الله فاهدوهم إلى', ' صراط ', 'الجحيم (23 الصَّافَّات - مكية)')
صراط (' وكذلك أوحينا إليك روحا من أمرنا ما كنت تدري ما الكتاب ولا الإيمان ولكن جعلناه نورا نهدي به من نشاء من عبادنا وإنك لتهدي إلى', ' صراط ', 'مستقيم (52 الشُّورَى - مكية)')
صراط ('', ' صراط ', 'الله الذي له ما في السماوات وما في الأرض ألا إلى الله تصير الأمور (53 الشُّورَى - مكية)')
صراط (' فاستمسك بالذي أوحي إليك إنك على', ' صراط ', 'مستقيم (43 الزُّخْرُف - مكية)')
صراط (' وإنه لعلم للساعة فلا تمترن بها واتبعون هذا', ' صراط ', 'مستقيم (61 الزُّخْرُف - مكية)')
صراط (' إن الله هو ربي وربكم فاعبدوه هذا', ' صراط ', 'مستقيم (64 الزُّخْرُف - مكية)')
صراط (' أفمن يمشي مكبا على وجهه أهدى أمن يمشي سويا على', ' صراط ', 'مستقيم (22 المُلك - مكية)')
الصراط (' اهدنا', ' الصراط ', 'المستقيم (6 الفَاتِحَة - مكية)')
الصراط (' قل كل متربص فتربصوا فستعلمون من أصحاب', ' الصراط ', 'السوي ومن اهتدى (135 طَه - مكية)')
الصراط (' وإن الذين لا يؤمنون بالآخرة عن', ' الصراط ', 'لناكبون (74 الْمُؤْمِنُون - مكية)')
الصراط (' ولو نشاء لطمسنا على أعينهم فاستبقوا', ' الصراط ', 'فأنى يبصرون (66 يَس - مكية)')
الصراط (' وهديناهما', ' الصراط ', 'المستقيم (118 الصَّافَّات - مكية)')
الصراط (' إذ دخلوا على داوود ففزع منهم قالوا لا تخف خصمان بغى بعضنا على بعض فاحكم بيننا بالحق ولا تشطط واهدنا إلى سواء', ' الصراط ', '(22 صَ - مكية)')
صراطا (' ولهديناهم', ' صراطا ', 'مستقيما (68 النِّسَاء - مدنية)')
صراطا (' فأما الذين آمنوا بالله واعتصموا به فسيدخلهم في رحمة منه وفضل ويهديهم إليه', ' صراطا ', 'مستقيما (175 النِّسَاء - مدنية)')
صراطا (' يا أبت إني قد جاءني من العلم ما لم يأتك فاتبعني أهدك', ' صراطا ', 'سويا (43 مَرْيَم - مكية)')
صراطا (' ليغفر لك الله ما تقدم من ذنبك وما تأخر ويتم نعمته عليك ويهديك', ' صراطا ', 'مستقيما (2 الْفَتْح - مدنية)')
صراطا (' وعدكم الله مغانم كثيرة تأخذونها فعجل لكم هذه وكف أيدي الناس عنكم ولتكون آية للمؤمنين ويهديكم', ' صراطا ', 'مستقيما (20 الْفَتْح - مدنية)')
صراطي (' وأن هذا', ' صراطي ', 'مستقيما فاتبعوه ولا تتبعوا السبل فتفرق بكم عن سبيله ذلكم وصاكم به لعلكم تتقون (153 الْأَنْعَام - مكية)')
صراطك (' قال فبما أغويتني لأقعدن لهم', ' صراطك ', 'المستقيم (16 الْأَعْرَاف - مكية)')
It's my first blog here, i will ameliorate it later
Comments
Post a Comment