PDA

View Full Version : سوال: حذف کلمات مشخص و کاراکترهای اضافی از متن



f_g1348
یک شنبه 08 مرداد 1391, 10:04 صبح
سلام دوستان
حقیقتش من یه برنامه نوشتم که یک متن چند جمله ای را از ورودی میگیرد ( متن فارسی ) ونیز یکسری کلمات مشخص و پرکاربرد را نیز از ورودی میگیرد و از داخل متن اولیه ، کلمات پرکاربرد را حذف می کند و در نهایت لیست کلمات باقی مانده را در خروجی به صورت فایل نمایش می دهد .
من برنامه را روی دوفایل fulltext ( متن اصلی ) و stop1 ( کلمات پرکاربرد ) اجرا کردم ولی نتایج جالبی نگرفتم
مثلاً از کلمه " سوال " وا را حذف می کند و الی آخر
اگر دوستان محبت کنند و این برنامه را ببینند و اشکالش را بیان کنند ممنون میشوم

ali_habibi1384
یک شنبه 08 مرداد 1391, 11:09 صبح
لازم به split كردن نبوده! با استفاده از replace كلماتو يكي يكي از توي بازدارنده بخوان و با كاراكتر تهي جايگزين كن. نكته اينكه موقع جابجايي حتما فضاي خالي سمت چپ و راست جمله بذار كه خود كلمه رو جايگزين كنه نه كلماتي كه شامل اون كاركتر باشن. اميدوارم منظورمو رسونده باشم

f_g1348
یک شنبه 08 مرداد 1391, 12:25 عصر
چه فرقی می کنه ؟
من برای این کار اول در همین سایت از دوستان نظرخواهی کردم تا به اینجا رسیدم ولی حالا به این مشکل بزرگ برخوردم و برنامه ام در ادامه درست کار نمی کند

ali_habibi1384
یک شنبه 08 مرداد 1391, 12:43 عصر
چه فرقی می کنه ؟
من برای این کار اول در همین سایت از دوستان نظرخواهی کردم تا به اینجا رسیدم ولی حالا به این مشکل بزرگ برخوردم و برنامه ام در ادامه درست کار نمی کند
فرقش كاملا واضحه! وقتي شما split ميكني داري فضاهاي خالي رو حذف ميكني و به آرايه تبديل ميكني.وقتي جاگزيني با كاراكترهاي space هم همراه باشه دقيقا خود كلمه جابجا ميشه نه اونايي كه مثل اون داره اين مثال رو ببين. مثلا اين جمله:
من ميخواهم بروم.
حالا اگر به روش شما كلمه (خواه) بازدارنده باشه جمله اين ميشه: "من ميم بروم." كه غلطه حالا اگر جايگزيني بصورت " خواه " باشه چنين كلمه اي پيدا نميشه و جمله دست نخورده باقي ميمونه.مگر اينكه شما چيز ديگه اي لازم داشته باشين.

f_g1348
یک شنبه 08 مرداد 1391, 12:48 عصر
میشه کد تقریبیش رو برام بنویسی ؟

spring69
یک شنبه 08 مرداد 1391, 13:22 عصر
سلام
آقای حبیبی درست میفرمایند
شما باید مشخص کنید که آیا میخواید اگر نشانه حذف وسط یه کلمه هم اومد حذف بشه؟
مثلا شما توی لیستتون یه کلمه دارید به این شکل: "آاو و و و" بعد شما میاید متن اصلی رو طبق کاراکتر فاصله اسپلیت میکنید که این معنیش اینه که: هیچوقت کلمه "آاو و و و" در متن پیدا نمیشه چون الان دیگه شما توی متن اصلیتون این قسمت رو به چهار کلمه ("آاو" ، "و" ، "و" ، "و") تبدیل کردین که اینا هیچکدوم تک تک با اون رشته برابر نمیشه.
پس
شما خودتون اول باید بدونید دقیقا چی میخواید
ویرایش:پیشنهاد من اینه که شما کلمات حذفی رو به دو قسمت تقسیم کنید: 1- کلمه هایی مثل "به" ، یا حروفی مثل "ی" که فاصله ندارند و اونها رو با همچین کدی از متنتون حذف کنید:
if (txt_Stop_Words.Text == string.Empty || txt_Orig.Text == string.Empty) return;
var stopWords = txt_Stop_Words.Text.Split(new[] { '\n' }).Select(b => b.Replace("\r", "")).ToList();
var wordsOfOriginal = txt_Orig.Text.Split(new[] { ' ', '\n' }).ToList();
var wordsAfterDelete = (from orginWord in wordsOfOriginal
let index = stopWords.ToList().FindIndex(a => a == orginWord)
where index == -1 select orginWord).ToList();
txt_Orig.Text = string.Join(" ", wordsAfterDelete);
2- اون متونی که چند کلمه ای هستند و برای اینها با استفاده از Replace کارتون رو کامل کنید

f_g1348
یک شنبه 08 مرداد 1391, 13:25 عصر
من چطور می تونم از دستور replace استفاده کنم که بتونم تک تک کلمات اضافی را حذف کنم ؟
کلمه "او و و " اشتباه تایپی است و باید " اووو" باشد

spring69
یک شنبه 08 مرداد 1391, 13:31 عصر
پس اگر هیچ عبارت دو کلمه ای ندارید که بخواید حذف کنید همون کدی که گذاشتم احتمالا کارتون رو راه بندازه. تو مایه های کدی هست که خودتون نوشتید ولی کمی کوتاه تر