Package: qalsadi
Qalsadi Arabic Morphological Analyzer and Lemmatizer for PythonDeveloppers:  Taha Zerrouki:http://tahadz.comtaha dot zerrouki at gmail dot comFeaturesvalueAuthorsAuthors.mdRelease0.5LicenseGPLTrackerlinuxscout/qalsadi/IssuesWebsitehttps://pypi.python.org/pypi/qalsadiDocpackage DocumentaionSourceGithubDownloadsourceforgeFeedbacksCommentsAccounts@Twitter@SourceforgeCitationIf you would cite it in academic work, can you use this citationT. Zerrouki‏, Qalsadi, Arabic mophological analyzer Library for python.,  https://pypi.python.org/pypi/qalsadi/Another Citation:Zerrouki, Taha. "Towards An Open Platform For Arabic Language Processing." (2020).or in bibtex format@misc{zerrouki2012qalsadi,title={qalsadi, Arabic mophological analyzer Library for python.},author={Zerrouki, Taha},url={https://pypi.python.org/pypi/qalsadi},year={2012}}```bibtex@thesis{zerrouki2020towards,title={Towards An Open Platform For Arabic Language Processing},author={Zerrouki, Taha},year={2020}}Features  مزاياLemmatizationVocalized Text Analyzer,Use Qutrub library to analyze verbs.give word frequency in Arabic modern use.ApplicationsStemming textsText Classification and categorizationSentiment AnalysisNamed Entities RecognitionInstallationpip install qalsadiRequirementspip install -r requirements.txtUsageDemoThe demo is available onTahadz.com>Tools/َAnalysis قسم أدوات - تحليلExampleLemmatization>>>importqalsadi.lemmatizer>>>text=u"""هل تحتاج إلى ترجمة كي تفهم خطاب الملك؟ اللغة "الكلاسيكية" (الفصحى) موجودة في كل اللغات وكذلك اللغة "الدارجة" .. الفرنسية التي ندرس في المدرسة ليست الفرنسية التي يستخدمها الناس في شوارع باريس .. وملكة بريطانيا لا تخطب بلغة شوارع لندن .. لكل مقام مقال""">>>lemmer=qalsadi.lemmatizer.Lemmatizer()>>># lemmatize a word...lemmer.lemmatize("يحتاج")'احتاج'>>># lemmatize a word with a specific pos>>>lemmer.lemmatize("وفي")'في'>>>lemmer.lemmatize("وفي",pos="v")'وفى'>>>lemmas=lemmer.lemmatize_text(text)>>>print(lemmas)['هل','احتاج','إلى','ترجمة','كي','تفهم','خطاب','ملك','؟','لغة','"','كلاسيكي','"(','فصحى',')','موجود','في','كل','لغة','ذلك','لغة','"','دارج','"..','فرنسي','التي','درس','في','مدرسة','ليست','فرنسي','التي','استخدم','ناس','في','شوارع','باريس','..','ملك','بريطانيا','لا','خطب','بلغة','شوارع','دنو','..','كل','مقام','مقالي']>>># lemmatize a text and return lemma pos...lemmas=lemmer.lemmatize_text(text,return_pos=True)>>>print(lemmas)[('هل','stopword'),('احتاج','verb'),('إلى','stopword'),('ترجمة','noun'),('كي','stopword'),('تفهم','noun'),('خطاب','noun'),('ملك','noun'),'؟',('لغة','noun'),'"',('كلاسيكي','noun'),'"(',('فصحى','noun'),')',('موجود','noun'),('في','stopword'),('كل','stopword'),('لغة','noun'),('ذلك','stopword'),('لغة','noun'),'"',('دارج','noun'),'"..',('فرنسي','noun'),('التي','stopword'),('درس','verb'),('في','stopword'),('مدرسة','noun'),('ليست','stopword'),('فرنسي','noun'),('التي','stopword'),('استخدم','verb'),('ناس','noun'),('في','stopword'),('شوارع','noun'),('باريس','all'),'..',('ملك','noun'),('بريطانيا','noun'),('لا','stopword'),('خطب','verb'),('بلغة','noun'),('شوارع','noun'),('دنو','verb'),'..',('كل','stopword'),('مقام','noun'),('مقالي','noun')]>>># Get vocalized output lemmas>>>lemmer.set_vocalized_lemma()>>>lemmas=lemmer.lemmatize_text(text)>>>print(lemmas)['هَلْ','اِحْتَاجَ','إِلَى','تَرْجَمَةٌ','كَيْ','تَفَهُّمٌ','خَطَّابٌ','مَلَكٌ','؟','لُغَةٌ','"','كِلاَسِيكِيٌّ','"(','فُصْحَى',')','مَوْجُودٌ','فِي','كُلَّ','لُغَةٌ','ذَلِكَ','لُغَةٌ','"','دَارِجٌ','"..','فَرَنْسِيّ','الَّتِي','دَرَسَ','فِي','مَدْرَسَةٌ','لَيْسَتْ','فَرَنْسِيّ','الَّتِي','اِسْتَخْدَمَ','نَاسٌ','فِي','شَوَارِعٌ','باريس','..','مَلَكٌ','برِيطانِيا','لَا','خَطَبَ','بَلَغَةٌ','شَوَارِعٌ','أَدَانَ','..','كُلَّ','مَقَامٌ','مَقَالٌ']>>>Morphology analysisfilename="samples/text.txt"importqalsadi.analexasqatry:myfile=open(filename)text=(myfile.read()).decode('utf8');iftext==None:text=u"السلام عليكم"except:text=u"أسلم"print" given text"debug=False;limit=500analyzer=qa.Analex()analyzer.set_debug(debug);result=analyzer.check_text(text);print'----------------python format result-------'printresultforiinrange(len(result)):#       print "--------تحليل كلمة  ------------", word.encode('utf8');print"-------------One word detailed case------";foranalyzedinresult[i]:print"-------------one case for word------";printrepr(analyzed);Output descriptionCategoryApplied onfeatureexample         aشرحaffixallaffix_keyال--َاتُ-       aمفتاح الزوائدaffixallaffixaالزوائدinputallwordالبيانات        aالكلمة المدخلةinputallunvocalizedaغير مشكولmorphologynountag_mamnou30                aممنوع من الصرفmorphologyverbtag_confirmed0                aخاصية الفعل المؤكدmorphologyverbtag_mood0                aحالة الفعل المضارع (منصوب، مجزوم، مرفوع)morphologyverbtag_pronoun0                aالضميرmorphologyverbtag_transitive0                aالتعدي اللزومmorphologyverbtag_voice0                aالبناء للمعلوم/ البناء للمجهولmorphologynountag_regular1                aقياسي/ سماعيmorphologynoun/verbtag_gender3                aالنوع ( مؤنث مذكر)morphologyverbtag_person4                aالشخص (المتكلم الغائب المخاطب)morphologynountag_number21               aالعدد(فرد/مثنى/جمع)originalnoun/verbfreq694644           aدرجة شيوع الكلمةoriginalalloriginal_tags(u              aخصائص الكلمة الأصليةoriginalalloriginalبَيَانٌ         aالكلمة الأصليةoriginalallrootبين             aالجذرoriginalalltag_original_genderمذكر            aجنس الكلمة الأصليةoriginalnountag_original_numberمفرد            aعدد الكلمة الأصليةoutputalltypeNoun:مصدر       aنوع الكلمةoutputallsemivocalizedالْبَيَانَات    aالكلمة مشكولة بدون علامة الإعرابoutputallvocalizedالْبَيَانَاتُ   aالكلمةمشكولةoutputallstemبيان            aالجذعsyntaxalltag_break0                aالكلمة منفصلة عمّا قبلهاsyntaxalltag_initial0                aخاصية نحوية، الكلمة في بداية الجملةsyntaxalltag_transparent0                aالبدلsyntaxnountag_added0                aخاصية نحوية، الكلمة مضافsyntaxallneedaالكلمة تحتاج إلى كلمة أخرى (المتعدي، العوامل) غير منجزةsyntaxtoolactionaالعملsyntaxtoolobject_typeaنوع المعمول، بالنسبة للعامل، مثلا اسم لحرف الجرUnsing CacheQalsadi can use Cache to speed up the process, there are 4 kinds of cache,Memory cachePickle cachePickledb cacheCodernityDB cache.To use one of it, you can see the followng examples:Using a factory method>>>importqalsadi.analex>>>fromqalsadi.cache_factoryimportCache_Factory>>>analyzer=qalsadi.analex.Analex()>>># list available cache names>>>Cache_Factory.list()['','memory','pickle','pickledb','codernity']>>># configure cacher>>># configure path used to store the cache>>>path='cache/qalsasicache.pickledb'>>>cacher=Cache_Factory.factory("pickledb",path)>>>analyzer.set_cacher(cacher)>>># to enable the use of cacher>>>analyzer.enable_allow_cache_use()Memory cache>>>importqalsadi.analex>>>analyzer=qalsadi.analex.Analex()>>># configure cacher>>>importqalsadi.cache>>>cacher=qalsadi.cache.Cache()>>>analyzer.set_cacher(cacher)>>># to enable the use of cacher>>>analyzer.enable_allow_cache_use()>>># to disable the use of cacher>>>analyzer.disable_allow_cache_use()Pickle cache>>>importqalsadi.analex>>>fromqalsadi.cache_pickleimportCache>>>analyzer=qalsadi.analex.Analex()>>># configure cacher>>># configure path used to store the cache>>>path='cache/qalsadiCache.pickle'>>>cacher=Cache(path)>>>analyzer.set_cacher(cacher)>>># to enable the use of cacher>>>analyzer.enable_allow_cache_use()Pickledb cache>>>importqalsadi.analex>>>fromqalsadi.cache_pickledbimportCache>>>analyzer=qalsadi.analex.Analex()>>># configure cacher>>># configure path used to store the cache>>>path='cache/qalsadiCache.pickledb'>>>cacher=Cache(path)>>>analyzer.set_cacher(cacher)>>># to enable the use of cacher>>>analyzer.enable_allow_cache_use()CodernityDB cache>>>importqalsadi.analex>>>fromqalsadi.cache_codernityimportCache>>>analyzer=qalsadi.analex.Analex()>>># configure cacher>>># configure path used to store the cache>>>path='cache'>>>cacher=Cache(path)>>>analyzer.set_cacher(cacher)>>># to enable the use of cacher>>>analyzer.enable_allow_cache_use()