PDA

View Full Version : نرمالیزه کردن کلمات



19216810047
سه شنبه 16 آبان 1391, 20:08 عصر
با سلام خدمت دوستان
من در برنامه زیر یک فایل text در richtextbox1می خونم و با کد زیر کلمات اون رو جدا می کنم و در richtextbox2قرار می دم.حالا سوالم اینه که اگه بخوام "ها " کلمات جمع حذف بشه باید چه کار کنم. یعنی خانه ها بشه خانه.و در richtextbox2قرار بگیره.
سوالم بعدیم اینه که یک چه جوری افعال رو ریشه یابی کنم. مثلا فعل می رود به رفتن تبدیل بشه.ایا برای ریشه یابی افعال باید با دیتابیس کار کنم؟
اگه میشه راهنمایی کنید.
اینم کد جداسازی کلماته:
private void button1_Click(object sender, EventArgs e)
{
string str = richTextBox1.Text;
str += " ";//
str += " ";
int last = 0, cnt = 0;
for (int a = 0; a < str.Length; a++)
{
cnt++;
if (str[a] == ' ' || str[a]=='.')

{
richTextBox2.Text += str.Substring(last, cnt) +" 1 "+ "\n";

last = a + 1;
cnt = 0;
}
}

}





.

مهرداد صفا
سه شنبه 16 آبان 1391, 21:04 عصر
با سلام خدمت دوستان
من در برنامه زیر یک فایل text در richtextbox1می خونم و با کد زیر کلمات اون رو جدا می کنم و در richtextbox2قرار می دم.حالا سوالم اینه که اگه بخوام "ها " کلمات جمع حذف بشه باید چه کار کنم. یعنی خانه ها بشه خانه.و در richtextbox2قرار بگیره.
سلام
رشته اصلی را به کلمات تجزیه کنید و اگر کلمه ای با "ها" تمام میشود، "ها"ی آن را حذف کنید:

private void button1_Click(object sender, EventArgs e)
{
string str = richTextBox1.Text;
str += " ";//
richTextBox1.Text = "";
foreach (string Word in str.Split(new char[] { ' ', '.' }))
{
string word = Word;
if (word != "ها" && word != "")
{
if (word.EndsWith("ها")) word = word.Substring(0, word.Length - 2);
richTextBox1.Text += word + " 1 \n";
}
}
}



سوالم بعدیم اینه که یک چه جوری افعال رو ریشه یابی کنم. مثلا فعل می رود به رفتن تبدیل بشه.ایا برای ریشه یابی افعال باید با دیتابیس کار کنم؟
اگه میشه راهنمایی کنید.در مورد افعال ماضی که فکر نمیکنم مشکلی داشته باشید، چون معمولا از یک قاعده خاص پیروی میکنند و شما میتوانید طبق آن قاعده افعال را به مصدر آنها تبدیل کنید. مثلا در مورد "می رفت"، "می" را از ابتدای آن حذف و "ن" را به انتهای آن اضافه کنید؛ ولی در مورد افعال مضارع فکر نمیکنم قاعده خاصی وجود داشته باشد، مثلا ارتباط "می روید" با "روییدن" شبیه به "می گوید" و "گفتن" نیست، در نتیجه یک بانک لازم است.

19216810047
سه شنبه 16 آبان 1391, 22:39 عصر
با سلام و تشکر
میشه در مورد طراحی بانک توضیح بدید.مثلا این درسته که در یک جدول فیلد اول هر ستون رو مصدر فعل رو قرار بدم بعد مشتقاتش.اما نمی دونم چه جوری سرچ و جایگزینی رو انجام بدم؟
در ضمن اگه میشه شرط اول کد بالا را توضیح بدید.

aboulfazl950
پنج شنبه 18 آبان 1391, 21:25 عصر
باید یک جدول سه ستونه درست کنی یکی برای آی دی کلمات و دومی برای فعل و سومی برای ریشه فعل و در دیتابیس براساس فعل جستجو کنی و ریشه معادل را برگردانی.

مهرداد صفا
یک شنبه 21 آبان 1391, 14:12 عصر
با سلام و تشکر
میشه در مورد طراحی بانک توضیح بدید.مثلا این درسته که در یک جدول فیلد اول هر ستون رو مصدر فعل رو قرار بدم بعد مشتقاتش.اما نمی دونم چه جوری سرچ و جایگزینی رو انجام بدم؟
در ضمن اگه میشه شرط اول کد بالا را توضیح بدید.
سلام
شرط اول حالتی را بررسی میکند که اسم و علامت جمع (ها) با یک فاصله از هم جدا شده باشند مثل "خانه ها". در این حالت چون متن با استفاده از فاصله Split شده "خانه" و "ها" هر یک به عنوان یک کلمه مجزا، یک عضو از آرایه هستند که ما در کد بالا از "ها" صرف نظر کردیم.
به نظر من با توجه به تعداد زیاد افعال نیازی به وارد کردن مشتقات در بانک نیست. شما در هر رکورد یک فیلد برای شناسه داشته باشید، یک فیلد برای مصدر ماضی و یک فیلد برای مصدر مضارع (فعل امر بدون "ب") و مشتقات را از طریق کد نویسی تشخیص دهید.
مثلا در یک رکورد از جدول "نوشتن" و "نویس" را دارید، حالا به کلمه "می نویسند" بر میخورید، در یک تابع "می" (شناسه مضارع استمراری) و "ند" (شناسه سوم شخص جمع) را از آن حذف میکنید، حالا مقدار برگشتی ما "نویس" است که به همین شکل در جدول موجود است.