PDA

View Full Version : سوال: اصلاح کردن اشکالات گرامری یک جمله انگلیسی



کارآموز کوچک
یک شنبه 09 فروردین 1394, 13:55 عصر
سلام
من باید برنامه ای بنویسم که اشکالات گرامری یک جمله زبان انگلیسی رو تصحیح کنه.این جمله حداکثر از چهار بخش اصلی فاعل، فعل، مفعول و قید تشکیل شده.این برنامه رو فقط میتون با رشته ها حل کنم باید چطوری بنویسم.
خواهش میکنم کمک کنید فوریه:افسرده:

drsina
یک شنبه 09 فروردین 1394, 14:09 عصر
این برای vb ولی خب از dll هاش میشه توو سی شارپ استفاده کرد.
http://devcity.net/Articles/89/1/spellcheck.aspx

برای چک spell هم ، اینو ببین از ورد استفاده می کنه :
http://stackoverflow.com/questions/11182606/check-english-grammar

اگه اشتباه نکنم قبلا یه پروژه ی open source به نام abiword برا این کار بود ، ببین سورسش پیدا می کنی . ازش میتونی استفاده کنی .
وگرنه اگر خودت بخوای بسازی زیاد جالب در نمی آد ، اگر میخواستی بنویسی اول یه سرچ بزن کل فعل های انگلیسی رو در بیار بعد از چک کردن spell یکی یکی اجزارو جدا کن و grammer شو چک کنم .
موفق باشی

کارآموز کوچک
یک شنبه 09 فروردین 1394, 14:42 عصر
خیلی ممنون از راهنمایی تون
ولی تمرینی که استادم داده باید با C#‎‎‎ اون فقط از رشته ها استفاده کنم و از بقیه چیزا مثل dll نمی تونم استفاده کنم.
تو تمرین باید براساس فاعل، فعل درست بشه مثلاکاربر میزنه I is من باید درستش کنم I am و فعل هم باید در همان زمان بمونه.
اگه بخوام این جوری بنویسم چطوری بنویسم.
نظر من اینجوری که برای فاعل ها switch بزنم بعد براساس فاعل فعل رو درست کنم. فعل ها اینطوری که با متدهای مقایسه بفهمم که تو کدوم زمانه(مثلا داریم I is go من با متدهای مقایسه بفهمم باید قسمت am,is,areبرم بعدبکنمش I am going) اما این یکم گیج کننده نمیشه؟؟؟

reza_noei
یک شنبه 09 فروردین 1394, 14:47 عصر
سلام
من باید برنامه ای بنویسم که اشکالات گرامری یک جمله زبان انگلیسی رو تصحیح کنه.این جمله حداکثر از چهار بخش اصلی فاعل، فعل، مفعول و قید تشکیل شده.این برنامه رو فقط میتون با رشته ها حل کنم باید چطوری بنویسم.
خواهش میکنم کمک کنید فوریه:افسرده:

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

کارآموز کوچک
یک شنبه 09 فروردین 1394, 15:02 عصر
درسته با آرایه کار راحتتر میشه ولی همونطوری که گفتم فقط فقط میتونم از متدهای رشته ها استفاده کنم و حق استفاده از موارد دیگه رو ندارم حتی آرایه ها.

reza_noei
یک شنبه 09 فروردین 1394, 16:37 عصر
درسته با آرایه کار راحتتر میشه ولی همونطوری که گفتم فقط فقط میتونم از متدهای رشته ها استفاده کنم و حق استفاده از موارد دیگه رو ندارم حتی آرایه ها.

اگر نتونید از آرایه استفاده کنید باید از if ها استفاده کنید که کدتون رو طولانی میکنه :

if (Part == "Am" || Part == "Is" || Part == "Are || ...)
...


میتونید این کار را با توابعی انجام دهید که خوتون نوشتید :
برای مفعول و فاعل حرف N برای فعل حرف V و برای قید حرف A را داشته بشیم.


char Detect (string Part)
{
char Type = 0;
Type = CheckIfVer(Part);
if(!Type)
Type = CheckIfNoun(Part);
if (!Type)
Type = CheckIfAdverb(Part);
return Type;
}


برای هر کدوم از Checkها یک تابع مینویسید که حالا میتونه یک if بزرگ یا چند if پشت سر هم داشته باشه که بتوانید نوع یک جزء رو مشخص کنید.

بدون آرایه هم میشه پیش رفت به شرطی که تک تک اجزا رو جدا کنید و خروحی Type ها را به یک رشته خروجی به نام Structure منتصب کنید :

string Structure = "";
while(Text!= "")
{
Part = Text.substring(0,Text.indexof(' '));
Structure += Detect(Part);
Text = Text.substring(Text.indexof(' ')+1);
}

حالا کافیه قالب Structure را با گرامر زبان انگلیسی تطبیق بدهید.