«بسم الله الرحمن الرحیم»
Notepad Python txt files DataBase -Part2
چگونه داده ها را درنوت پد به صورت سطر وستون ذخیره کنیم ومانند پایگاه داده ازآن استفاده کنیم؟ بخش دوم
حالت2 : یک کلید چند مقدار ازنظر تعداد متغیر ازنظر مقدار یکسان یا غیریکسان
ازنظر تعداد متغیر یعنی تعداد ستون ها متغیرداشته باشد وازنظر مقدار یکسان یعنی مقادیر ستون ها یکسان باشد .وازنظر مقدارغیریکسان یعنی مقادیر ستون یکسان نباشد یا متفاوت باشد
این نوع ذخیره کردن با طرح یک مسئله توضیح داده می شود:
فرض کنید که 3 سند دارید وعملیات های زیر را می خواهید روی آن انجام دهید:
- واژه ها یا کلمه ها یا توکن های آن ها را می خواهید استخراج کنید.
- واژه ها درفایل نوشته وازفایل خوانده شود.
- تعداد واژه های هر سند برگردانده شود. (بازیابی )
منظور از سند هر نوع واژه پردازی که متن در آن قرار دارد.
مسائل مربوط به این حالت درقبل توضیح داده شده است . حال به پیاده سازی آن با استفاده از نوت پد و پایتون پرداخته می شود.
دراین جا نوع ذخیره سازی توضیح داده می شود. استخراج توکن ها از یک متن در قبل توضیح داده شده است . فرض کنید بعد از استخراج توکن ها از متن هر سند دارای واژه های زیر بود حال چطور این ها دریک پایگاه داده متنی ذخیره می شود. به صورتی که بهینه باشد.
ذخیره:بخش اول
برای ذخیره کارهای زیر انجام می شود:
مرحله 1:
استخراج واژه هایا توکن ها یا کلمات از هرسند وذخیره کردن دریک دیکشنری یا لیست .
{'dic_tokens=doc1': ['iran', 'pretty'], 'doc3': ['qom', 'star', 'moon', 'sky'], 'doc2': ['good', 'salam', 'salam']}
مرحله2:
ساخت یک نوع ساختار برای واژه ها وسندها به طوری که بتوان آن را بازیابی کرد.
ساختاربه این صورت می باشد:
doc_id:term1,term2,…|doc_id:term1,term2,…|doc_id3:term1,term2,…
برای سندهای ما :
1:iran,pretty|2:good,salam,salam|3:qom,start,moon,sky
جداکننده سطرها | وجداکننده واژه ها کاما می باشد.
مرحله 3:
تبدیل ساختار به رشته (خود ساختارتشکیل شده رشته می باشد).
مرحله 4:
خواند ن فایل و نوشتن ساختار درفایل.
def con(type): #line1 #------- f=open("test.txt",type) return f #line3 #step1 dic_tokens={} dic_tokens["doc1"]=["iran","pretty"] dic_tokens["doc2"]=["good","salam","salam"] dic_tokens["doc3"]=["qom","star","moon","sky"] #step2,3 str2="" for doc in dic_tokens: #line1 str1="" tokens=dic_tokens[doc] #line3 i=0 for token in tokens:#line5 if(i==len(tokens)-1):#for del extrac comma str1=str1+token else: str1=token+","+str1 i+=1 str2=doc+":"+str1+"|"+str2 #line11 #step4 f=con("w") f.write(str2) f.close()
مرحله 2و3 یک حلقه برای سند ها می باشد(خط1) . واژه های هرسنددریک لیست قرارمی گیرد(خط3). حلقه دوم لیست را می پیماید وواژه ها را به ساختارگفته شده تبدیل می کند(خط5). سپس درخط 11 واژه ها به سند خودمی چسبند.وساختاراصلی تشکیل می شود.درسه خط آخرساختاردرون فایل ذخیره می شود.
بازیابی:بخش دوم
:برای بازیابی از فایل واستفاده از واژه ها مراحل زیرانجام می شود
مرحله1:
خواندن از فایل و ذخیره کردن ساختار دریک متغیر به عنوان یک رشته .
مرحله2:
جدا کردن سطر ها ازیکدیگر با جداکننده ای که در فایل ذخیره کرده اید.
مرحله 3:
استفاده از سطرها برای دسترسی به واژه ها و سندها.
مرحله4:
عملیاتی که روی واژه ها انجام می شود (تعداد واژه های هرسند).
#step1 def con(type): #line1 #------- f=open("test.txt",type) return f #line3 f=con("r") str1=f.read() #------------------------------------ #step2 list_rows=str1.split("|") #--------------------------- #step3 for row in list_rows: #line1 list1=row.split(':') #list1[0]=document_id,list1[1]=tokens line2 if(list1[0]):#if not empty str_tokens=list1[1] #line4 doc_id=list1[0] #line5 #------------------ #step4 #convert str to list:'term1,term2,term3' to ['term1','term2','term3'] tokens=str_tokens.split(",")#line6 #str(len()) :return len then convert int to str print(doc_id,"num_tokens:"+str(len(tokens))) #line7
درمرحله2 رشته به لیست تبدیل می شود.درمرحله 3 توسط حلقه اول سطرها خوانده می شود(خط1) . هر سطر توسط جداکننده جدا می شود(خط2) . وبه دورشته، نام سند و توکن ها، که هر کدام رشته می باشند تبدیل می شوند.ودریک لیست قرارمیگیرد .عنصر اول لیست نام سند وعنصردوم لیست توکن ها می باشد(خط 4و5) .حال به مرحله4 می روید تا تعداد توکن های هرسند رابرگردانید .اما عنصردوم لیست رشته می باشد و به ما تعدادتوکن های هرسند را نمی دهد . برای رفع این مشکل ابتدا توکن ها توسط جداکننده کاماازهم جدا می شود ودرلیست قرارمی گیرد(خط6) . حال زمانی که طول لیست گرفته شود تعداد توکن های سند را برمی گرداند(خط7).
موفق باشید
«به امید خدا»