PDA

View Full Version : خواندن دیتابیس xml ویکی پدیا



samiasoft
یک شنبه 07 خرداد 1396, 04:02 صبح
سلام دوستان

من فایل دیتابیس ویکی پدیای فارسی که بصورت xml هست را دانلود کردم.

حال میخواستم محتویات این فایل رو بخونم و در برنامم استفاده کنم. ولی متاسفانه با هر برنامه ویرایشگری که بازش میکنم برنامه هنگ میکنه:ناراحت:. اعم از نت پد پلاس و....

حجم دیتابیس حدود 3 گیگ هست. برای این که بتونم محتویاتشو بخونم طبیعتا بایستی نام تگ های داخل فایل رو بدونیم. اما من هرکار کردم نتونستم محتویاتشو ببینم.

به نظرتون چیکار میتوان انجام داد؟

NasimBamdad
یک شنبه 07 خرداد 1396, 18:57 عصر
برای بنده هم جالبه که حجم بالا رو چه طوری میشه مدیریت کرد
فکر کنم فقط کد نویسی و Thread بشه این کار رو کرد . خط به خط خوند

Mahmoud.Afrad
یک شنبه 07 خرداد 1396, 20:17 عصر
برای بدست آوردن تگ ها میتونید چند سطر فایل را با استفاده از استریم بخوانید تا ساختار فایل رو متوجه بشید.


برای خواندن سطر ، تگ و ... میتونید یک استریم ایجاد و استفاده کنید
https://msdn.microsoft.com/en-us/library/system.xml.xmlreader.aspx
و یا
https://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.aspx

samiasoft
سه شنبه 09 خرداد 1396, 04:34 صبح
با تشکر از راهنمایی..ای کاش مثالی در رابطه با موارد بالا میزدید...در صفحات مربوطه من نتونستم کاری از پیش ببرم.

در دستور زیر من اولین خط را از فایلم خوندم....به نظرتون چطوری خط دوم یا سوم را هم بخونیم؟

textBox1.Text = File.ReadLines("D:/wikipedia/fawiki-20140403-pages-articles.xml").First();

یا

using (var reader = new StreamReader("D:/wikipedia/fawiki-20140403-pages-articles.xml")) {
textBox1.Text = reader.ReadLine();
}

با دستور زیر هم اگه بیام خط سوم رو بخونم هنگ میکنه!!!

string[] lines = File.ReadAllLines("myfile.txt"); //File is in System.IO
string firstLine = lines[3];

در کل میخواستم 10 سطر یا 20 سطر اول این فایل حجیم رو بخونم.

Mahmoud.Afrad
سه شنبه 09 خرداد 1396, 06:27 صبح
کاملا مشخصه، از StreamReader بایست استفاده کنید. یک حلقه نیاز دارید که متد ReadLine رو به تعداد مورد نظرتون فراخوانی کنید. در موردش مثال زیادی میتونید پیدا کنید.
https://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx#Examples
تکه کد اول و سوم ، کل فایل رو در حافظه لود میکنند که حتی اگر ram کافی داشته باشید، زمان زیادی نیازه و البته استفاده ازشون منطقی نیست.

barnamenevisjavan
سه شنبه 09 خرداد 1396, 10:21 صبح
سلام نرم افزار Kiwix یه نرم افزار متن باز برای همین ویکیپدیای افلاین هستش سورسش رو دریافت کنید و ببینید که چطوری عملیات رو انجام میدن

nunegandom
سه شنبه 09 خرداد 1396, 11:00 صبح
برای باز کردن فایل های متنی با حجم خیلی زیاد از EmEditor استفاده کنید

samiasoft
سه شنبه 09 خرداد 1396, 17:14 عصر
ممنون دوستان بابت نظرات.با دستور زیر تونستم چند خطی که میخواستم رو بخونم ولی متاسفانه آرایش متن طوری هست که کلادیگه منصرف شدم از دیتابیس استفاده کنم...یک سری تگ های خاصی داره که انگار بایستی کلا متن رو فیلتر کنم تا بشه ازش استفاده کرد.

using (var reader = new StreamReader("D:/wikipedia/fawiki-20140403-pages-articles.xml")) {

for (i = 0; i <= 400; i++) {
RichTextBox1.Text += reader.ReadLine();
}


}

در دستور بالا از خطا اول تا خط 400 را تونستم بخونم.....حالا اگر میخواستم از خط 500 تا 1000 را بخونم چگونه باید دستور رو مینوشتم؟

دوستان در مورد دستور زیر یه توضیحی میدید؟

RichTextBox1.Text = File.ReadLines("D:/wikipedia/fawiki-20140403-pages-articles.xml").Skip(2).Take(3).First()

منظور از Take و Skip چیه ؟

nunegandom
چهارشنبه 10 خرداد 1396, 16:07 عصر
skip میگه تا فلان جا رو کلا بیخیال شو
take میگه از اینجا تا فلان مقدار رو بگیر بیار
که اگه اشتباه نکنم iqueryable هست که میشه:
من با کل سطر ها کاری ندارم (یعنی همه رو اول load نکن) فقط همون قسمت به عبارتی استفاده بهینه از منابع رم و سرعت بیشتر

Mahmoud.Afrad
چهارشنبه 10 خرداد 1396, 21:07 عصر
...
منظور از Take و Skip چیه ؟

این متدها مربوط به LINQ هستند که میتونید در موردش مطالب زیادی پیدا کنید.


skip میگه تا فلان جا رو کلا بیخیال شو
take میگه از اینجا تا فلان مقدار رو بگیر بیار
که اگه اشتباه نکنم iqueryable هست که میشه:
من با کل سطر ها کاری ندارم (یعنی همه رو اول load نکن) فقط همون قسمت به عبارتی استفاده بهینه از منابع رم و سرعت بیشتر

IEnumerable<string> هست و در همان لحظه در حافظه load خواهد شد که برای این حجم از داده مناسب نیست.