PDA

View Full Version : سوال: یافتن کلمات استفاده شده در یک متن با سی شارپ



jebreily
یک شنبه 26 آبان 1398, 14:39 عصر
میشه با سی پشارپ گفت که کلمات فارسی استفاده شده در یک متن رو نمایش بده ؟؟؟
یه سوال دیگه : آیا می شه گفت که آیا متغیر s که از نوع string و مقدارش برابر با مثلا "امیر" است ، این کلمه یا این مقدار در متغیر s2 هم که string است وجود دارد ؟؟؟

ASHKANLAEI
یک شنبه 26 آبان 1398, 15:59 عصر
1. خوب متوجه سوالتون نشدم
2. اگر میخواید بفهمید s در s2 هست یا نه، این کد جواب رو به شکل بولین میده:
s2.Contains(s)

the king
یک شنبه 26 آبان 1398, 16:12 عصر
میشه با سی پشارپ گفت که کلمات فارسی استفاده شده در یک متن رو نمایش بده ؟؟؟
یه سوال دیگه : آیا می شه گفت که آیا متغیر s که از نوع string و مقدارش برابر با مثلا "امیر" است ، این کلمه یا این مقدار در متغیر s2 هم که string است وجود دارد ؟؟؟
دنبال کاراکتر های بهم چسبیده ای می گردیم که اولا در گروه کاراکتر های یونیکد عربی باشند و ثانیا جزو حروف الفبا باشند :


var regex = new System.Text.RegularExpressions.Regex("\\b((?=\\p{IsArabic})\\p{L})+");


با این Regex میشه کلمات فارسی داخل متن رو پیدا کرد، فرضا نمایش کلمات، هر کلمه در یک سطر جداگانه :


var regex = new System.Text.RegularExpressions.Regex("\\b((?=\\p{IsArabic})\\p{L})+");
var text = "متن فارسی english persian آزمایش test پایان.یافت";
var words = regex.Matches(text);
var s = new StringBuilder();
foreach (System.Text.RegularExpressions.Match word in words)
{
s.AppendLine(word.Value);
}
MessageBox.Show(s.ToString());


یا نمایش کلمات با حذف موارد تکرار یک کلمه :


var regex = new System.Text.RegularExpressions.Regex("\\b((?=\\p{IsArabic})\\p{L})+");
var text = "متن فارسی english persian متن جدید text متن";
var words = regex.Matches(text);
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
foreach (System.Text.RegularExpressions.Match word in words)
{
dic[word.Value] = 0;
}
var keys = new string[dic.Count];
dic.Keys.CopyTo(keys, 0);
MessageBox.Show(string.Join(Environment.NewLine, keys));


برای جستجوی یک کلمه یا عبارت در متن دیگری می توانید از همون Regex ها کمک بگیرید، b\ باعث میشه که عبارت جستجو رو بصورت یک مورد مستقل پیدا کنه، نه چسبیده به کاراکتر های کناری :


var s1 = "امیر";
var regex = new System.Text.RegularExpressions.Regex("\\b" + s1 + "\\b");
var s2 = "my name is امیر";
var result = regex.IsMatch(s2);
if (result)
{
MessageBox.Show("Found!");
}
else
{
MessageBox.Show("Not Found!");
}


فرضا کلمه امیر رو در متن مزامیر پیدا نخواهد کرد :


var s1 = "امیر";
var regex = new System.Text.RegularExpressions.Regex("\\b" + s1 + "\\b");
var s2 = "مزامیر";
var result = regex.IsMatch(s2);
if (result)
{
MessageBox.Show("Found!");
}
else
{
MessageBox.Show("Not Found!");
}

jebreily
سه شنبه 28 آبان 1398, 18:10 عصر
من با آرایه ها این رو امتحان کردم نشد ...
آرایه ام از جنس string بود آیا باید از جنس var باشه ؟؟؟


for (int i = 0; i <= 18; i++)
{
var s1 = stringArrey;
var regex = new System.Text.RegularExpressions.Regex("\\b" + s1 + "\\b");
var s2 = text;
var result = regex.IsMatch(s2);
if (result)
{
Return = s1+ " " + "فعل است";
}
else
{
Return = s1 + " " + "فعل نیست";
}

}

the king
سه شنبه 28 آبان 1398, 20:41 عصر
من با آرایه ها این رو امتحان کردم نشد ...
آرایه ام از جنس string بود آیا باید از جنس var باشه ؟؟؟


for (int i = 0; i <= 18; i++)
{
var s1 = stringArrey;
var regex = new System.Text.RegularExpressions.Regex("\\b" + s1 + "\\b");
var s2 = text;
var result = regex.IsMatch(s2);
if (result)
{
Return = s1+ " " + "فعل است";
}
else
{
Return = s1 + " " + "فعل نیست";
}

}

var نوع داده خاصی نیست، صرفا کد نویسی رو ساده تر می کنه. var از روی مقداری که بهش میدید خودش نوع داده مناسب رو تشخیص میده.
فرضا اگر یک مقدار "hello" بهش بدید var از نوع string میشه. اگر بهش مقدار 123 رو بدید، از نوع int میشه.
می توانید هر جا var هست حذفش کنید و بجاش نوع داده مناسب رو قرار بدید.

اگر با آرایه کار می کنید لابد اون for رو دارید برای اعضاء اون آرایه بکار می برید :


string[] stringArray = new string[] { "من", "رفتن", "و", "شخص", "خواستن", "سبز" };
var s2 = "آمدن دویدن رفتن ماندن گشتن خواستن خزیدن";
var output = new StringBuilder();
string Return;
foreach (var s1 in stringArray)
{
var regex = new System.Text.RegularExpressions.Regex("\\b" + s1 + "\\b");
var result = regex.IsMatch(s2);
if (result)
{
Return = s1 + " " + "فعل است";
}
else
{
Return = s1 + " " + "فعل نیست";
}
output.AppendLine(Return);
}
MessageBox.Show(output.ToString());