Using pandas to do a text mining with a large book

Using Pandas to iterate through a large book.

Note: The text is in Arabic, i will later on use an English book example

The book we will use here has almost 114 chapters, every chapter has its own number of versets  and every chapter has its own descendant location. I converted it the whole book into Excel, putting every verset in one column (with a title of column = 'الآيات'), the number of verset ('رقم الآية'), the chapter name ('السورة'), the macca or madina ('المكي والمدني').

 

 I will offer the downloading of the book later on here

 

The goal here is to show you how to extract specific string or word based on derives of specific verb in different chapter and bring them all together to extract some concordance or anything else to get a clearer understanding of any subject.

 

>>> import pandas as pd  # Pandas is a very important liberary in python used in data analysis, here we have a text but I transformed as a data where we can extract some idea and come together in some conclusion

>>> coran = pd.read_excel('bookexcelcoran.xlsx') # Pandas is going to open my excel file and read it

>>> len(coran) # I can see the length of the rows which correspond exactly the total verset of whole book in different chapters.

6236

>>> coran.columns   # The title of the column

Index(['Unnamed: 0', 'الآيات ', 'رقم الآية', 'السورة', 'المكي والمدني'], dtype='object')

>>> coran.head() # The top ten rows of the whole book

   Unnamed: 0                  الآيات   رقم الآية    السورة المكي والمدني

0         NaN   بسم الله الرحمن الرحيم          1  الفاتحة           مكية

1         NaN    الحمد لله رب العالمين          2  الفاتحة           مكية

2         NaN            الرحمن الرحيم          3  الفاتحة           مكية

3         NaN           مالك يوم الدين          4  الفاتحة           مكية

4         NaN   إياك نعبد وإياك نستعين          5  الفاتحة           مكية

 

>>> alaayaat = coran['الآيات '] # I created a variable alaayat here to make it easier for future iteration as the next of every following columns

>>> assura = coran['السورة']

>>> raqmalaaya = coran['رقم الآية']

>>> almakkiwalmadani = coran['المكي والمدني']

>>> alaayaat.value_counts() # I can find the length of the most repeated verset, I just choosed a few here

 فبأي آلاء ربكما تكذبان                                                                                                                                                                                      31

 ويل يومئذ للمكذبين                                                                                                                                                                                          11

 وإن ربك لهو العزيز الرحيم                                                                                                                                                                                    8

 فاتقوا الله وأطيعون                                                                                                                                                                                          8

 بسم الله الرحمن الرحيم حم                                                                                                                                                                                    7

 ويقولون متى هذا الوعد إن كنتم صادقين                                                                                                                                                                         6

 بسم الله الرحمن الرحيم الم                                                                                                                                                                                   6

 إن في ذلك لآية وما كان أكثرهم مؤمنين                                                                                                                                                                         6

 وما أسألكم عليه من أجر إن أجري إلا على رب العالمين                                                                                                                                                           5

 إني لكم رسول أمين                                                                                                                                                                                            5

 إنا كذلك نجزي المحسنين                                                                                                                                                                                       4

 

Before going for extraction, I would try to verify the exact follow of the column, because we read from right to left here, I use to techniques here, iteration and list method:

>>> for i in coran.columns:

          print(i)

 

         

Unnamed: 0

الآيات

رقم الآية

السورة

المكي والمدني

>>> [i for i in coran.columns]

['Unnamed: 0', 'الآيات ', 'رقم الآية', 'السورة', 'المكي والمدني']

Here, I clearly didn’t used pandas yet to extract the derives of the verb sarata “صرط” as in my previous articles (there I’ve done this), because pandas is not having the tool of split, python so far works with text mostly in split method.

I imported the following variable from my previous article :

>>> صرط = [( ' صراط ' , 32), ( ' الصراط ' , 6), ( ' صراطا ' , 5), ( ' صراطي ' , 1), ( ' صراطك ' , 1)]

I have a string and number , every word with its total frequency (or appearance) in the whole book. Example we have ‘صراط’ 32 times in the whole book. How to find there presences within each verset in different chapters, here we go:

First I will show you each key (word or string in the variable) and its value:

>>> for k,v in صرط:

          print(k,v)    

 صراط  32

 الصراط  6

 صراطا  5

 صراطي  1

 صراطك  1

 

I use a,b,c,d , and zip à it’s all a techniques: a correspond alaayat, b correspond raqmalaayaat, b correspond assura, c correspond almakkiwalmadani and zip to combine them together. I’m looking the string or word in a only because  its representing the versets or it’s the column of verset.

For k,v in the next line: k correspond the key (string of variable صرط ) and v it’s value.

>>> for a,b,c,d in zip(alaayaat, raqmalaaya, assura, almakkiwalmadani):

          for k,v in صرط:

                    if k in a:

                              print(k, "      ", a.partition(k), b, c, d)

 

    صراط         ('', ' صراط ', 'الذين أنعمت عليهم غير المغضوب عليهم ولا الضالين') 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 الصافات مكية

 صراطا           (' ولهديناهم', ' صراطا ', 'مستقيما') 68 النساء 

مدنية

 صراطا           (' فأما الذين آمنوا بالله واعتصموا به فسيدخلهم في رحمة منه وفضل ويهديهم إليه', ' صراطا ', 'مستقيما') 175 النساء 

مدنية

 صراطا           (' يا أبت إني قد جاءني من العلم ما لم يأتك فاتبعني أهدك', ' صراطا ', 'سويا') 43 مريم مكية

 صراطا           (' ليغفر لك الله ما تقدم من ذنبك وما تأخر ويتم نعمته عليك ويهديك', ' صراطا ', 'مستقيما') 2 الفتح مدنية

 صراطا           (' وعدكم الله مغانم كثيرة تأخذونها فعجل لكم هذه وكف أيدي الناس عنكم ولتكون آية للمؤمنين ويهديكم', ' صراطا ', 'مستقيما') 20 الفتح مدنية

 صراطي          (' وأن هذا', ' صراطي ', 'مستقيما فاتبعوه ولا تتبعوا السبل فتفرق بكم عن سبيله ذلكم وصاكم به لعلكم تتقون') 153 الأنعام مكية

 صراطك          (' قال فبما أغويتني لأقعدن لهم', ' صراطك ', 'المستقيم') 16 الأعراف  مكية

  • If you had to do this for all the total derives of all verbs in one book, that would be extremely a big job as creating a dictionary for any language. There are a very easy method in python which can helps to accelerate the work in a very few weeks  depends on your timing.

Just to notify you, there are a very great functions in Pandas dealing with any kind of text extremely brilliant, just go and try them.  


Comments

Popular posts from this blog

Farming land size owned by households per region in Senegal