PDA

View Full Version : مشكل در محاسبه n-gramها



Pari_Programmer
سه شنبه 14 اردیبهشت 1389, 20:54 عصر
سلام دوستان

من چند وقتيه كه به پردازش متن خيلي علاقمند شدم اما توي برنامه نويسيش خيلي مشكل دارم.
يكي از مسائلي كه تازگي ها بهش برخوردم چگونگي محاسبه ngramها هستش.

مسئله ما اينه كه يه متن بسيار بزرگ داريم. كه مثلا يه جمله از اون اين طوريه:
this sentence is a test one. I wrote this sentence just for fun.

مثلا ميخوايم 2gram هاي اين جمله رو به همراه تعداد تكرار اونها محاسبه كنيم. خروجي اين ميشه:
this , sentence , 2
sentence , is , 1
is , a , 1
a , test, 1
test , one , 1
.
.
.
الا آخر.
از لحاظ تئوري انجامش راحته. كلمه به كلمه متن رو ميخونيم. به ازاري هر كلمه اي كه خونديم كل متن رو از اول تا انتها نگاه ميكنيم و هر بار كه اين كلمه رو ديديم، اون رو به همراه كلمه بعديش يه جا ذخيره ميكنيم.
اما مشكل اينجاست كه وقتي واسه يه 2gram مثلا this و sentence اين مقدار محاسبه شد. دفعه بعد كه توي متن اين 2gram رو ديديم ديگه نبايد محاسبش بكنيم.
شما چه راهي پيشنهاد ميكنين؟ يه راه اينه كه هر كلمه اي رو كه ديديم اون رو حذف كنيم كه مجددا محاسبه نشه. اما اين راه درستي نيست.


چيكارش بايد بكنم؟ الان چند روزه كه درگيرشم. ديگه دارم قاط ميزنم.:عصبانی++: :گریه:

qwerty11
سه شنبه 14 اردیبهشت 1389, 22:34 عصر
سلام،

خوب من نه ngram میدونم چیه و نه 2گرم :لبخند::لبخند: اما تقریباً میفهمم چی میخواین ! خوب با چه زبانی برنامه مینویسید !؟

راه اول : هر 2gram که به دست میارید اونو به یه لیست اضافه کنید و هر وقت به یه 2gram رسیدید چک کنید که داخل لیستتون وجود داره یا نه ! اگه وجود نداشت به لیست اضافه کنید و اگر وجود داشت به مقدر اون 2gram یکی اضافه کنید ! البته غیر از کار با لیست راه حل بهتری هم داره که هر وقت زبان برنامه نویسیتون رو گفتید میگم ...

راه دوم : ابتدا تمام 2gram ها رو به دست بیارید و داخل یه آرایه قرارشون بدین و بعدش آرایه رو مرتب کنید و بعدشم فکر کنم دیگه واضح باشه !؟

Pari_Programmer
چهارشنبه 15 اردیبهشت 1389, 09:24 صبح
سلام
فعلا مشكل من در حد كيلوگرم و اين حرفاس.
من دارم با C++ كد ميزنم.
از آرايه كه نميتونم استفاده كنم چون تعداد اعضاي آرايه خيلي وحشتناك زياده. بسته به اينكه متن چه حجمي داشته متغيره ولي براي يه كار معمولي كه متنمون در حدود 100مگابايته:لبخند:، فايل حاوي 2gramها يه چيزي در حدود 300 ، 400 مگ ميشه.
من دارم فكر ميكنم كه بايد به جاي آرايه و ليست، از فايل استفاده كنم. يعني هر 2gram رو بريزم توي فايل. و بعد براي تصميم گيري در مورد اين كه 2gram بعدي رو اضافه كنم يا نه بايد يه بار كل فايل رو از اول تا آخر بخونم. اين هم خيلي وحشتناك و زمانبره.
به نظر شما ديگه چه كاري ميشه كرد؟