PDA

View Full Version : مبتدی: تشخیص نوع شعر



MS.Worm
چهارشنبه 26 بهمن 1390, 00:27 صبح
سلام دوستان
یه برنامه استادمون گفته به این شکل که مثلا شعر بهش میدیم بگه این شعر غزل یا مثنوی یا قطعه.
چجوری باید این برنامه رو بنویسم.
الگوریتمی که من میگم آیا درسته که مثلا بیام کلمه آخر مصرع اول رو در بیاریم بعد مقایسه کنیم با بقیه مصرع ها اگه یکی بود میشه قطعه. حالا من نمیدونم چجوری از تو یک جمله کلمه آخر رو در بیارم. البته اگه این روش خوب باشه.
ممنون میشم کمک کنید.

amin1softco
چهارشنبه 26 بهمن 1390, 06:37 صبح
دوش مـی‌آمــد و رخـســاره بـر افـروخــتــه بـــود
تـا کـجــا بـاز دل غـمـــــزده‌ای سـوخــتــه بـــود
هر مصرع رو بریز داخل یک آرایه بعد آخرین اسپیس از آخر می شه کلمه مورد نظر برای فعل های دو کلمه ایی هم تقریباً کار می کنه . بعد متناسب با الگو چکشون کن.
یا می تونی با استفاده از عبارات منظم (http://www.johndcook.com/cpp_regex.html) این کار رو انجام بدی...

programset
چهارشنبه 26 بهمن 1390, 11:18 صبح
چه پروژه باحالی
الگوریتم اینجور پیاده سازی کن که مثلا ورودیش که شعر مورد نظره رو از یک فایل متنی بگیره سپس با هر بار خوندن space شروع کنه به ذخیره کردن در متغیری از نوع string (یا اشاره گر char *str ) اگر دوباره به space رسید متغیر string خالی کته و مجددا شروع به ذخیره کنه بر همین منوای تا حس کاراکتر n/
پس وارد متغیر لیست قافیه هاش کن در ضمن برای تشخیص رباعی بودن میتونی یه متغیر int ایجاد کنی و مقدار اولیه صفر شو با هر بار حس کاراکتر n/ یه واحد اضافه کنی در پایان اگر 4 بود یعنی رباعی بوده .....
فکر کنم زیادی توضیح دادم
به هر حال الگوریتم نویسی مثل حل مسائل ریاضی است راه حل های زیادی برای یه مسئله وجود داره فکر کنی حتما راه های جالتری هم خواهی یافت

MS.Worm
چهارشنبه 26 بهمن 1390, 14:08 عصر
سلام به دوستان و ممنون از پاسختون.
برادر امین منم دقیقا همین کارو میخوام بکنم یعنی هر مصرع رو بریم تو یه آرایه فقط نمیدونم تو یه جمله که همون مصرع من میشه چجوری آخرین کلمه رو پیدا کنم. کلا برنامه 4تا مصرع قبول کنه بعد وقتی آخرین کلمه هر مصرع رو پیدا کنم دیگه حله. مسرع ها رو هم خارجی مینویسیم. اگه اینو بگین ممنون میشم.

amin1softco
چهارشنبه 26 بهمن 1390, 15:58 عصر
ببنید ورودی رو می خونید موقعیت آخرین اسپیس وارد شده را دریافت می کنید اینجوری می تونید کلمه آخر رو پیدا کنید:
مثال :

#include <iostream>
#include <string>
using namespace std;
int ch=0,s=0;
char mychar;
string st,gh;
int main()
{
gh="";st="";
cout<<"mesar ra vared karde va enter ra bezanid:"<<endl;
while(mychar!='\n'){
cin.get(mychar);
if(mychar==' ') s=ch;
ch++;
st+=mychar;
}

for (int i=(s+1) ;i<st.length() ;i++)
gh+=st[i];
cout<<"ghafie in beit:"<<gh<<endl;
cout<<"s: "<<s<<" -"<<st<<endl;
return 0;
}

رشته gh قافیه می شه و st هم کله مصرع ...

Dr_Crazy
پنج شنبه 27 بهمن 1390, 03:16 صبح
دوست عزیز با حفظ حرمت استاد و شما ، ولی این برنامه تو سی پلاس پلاس یا سی ، سر کاریه
کامپایلر فارسی نمی خونه باید شعر رو فینگلیش بنویسی بعد دو تا کمله مثل "کاش " و "کنارش" هم قافیه در میان kaash , kenaarash هر دو آخرش "ash" داره
مگه تو ویژوال بنویسی که اولا ربطی به این تالار نداره ، دوما اونجا هم تا حدودی سر کاریه ، فرق غزل و قصیده رو چطوری می فهمه؟ رباعی و دو پیتی رو چطور ، مگه یه برنامه بنویسی که دیپلم انسانی داشته باشه ، وزن شعر رو بفهمه
زیاد خودتو در گیرش نکن

ayub_coder
پنج شنبه 27 بهمن 1390, 17:07 عصر
یعنی شما میگی که کامپایلر سی ++ یونیکد رو پشتیبانی نمیکنه؟ درسته از ورودی نمیشه خوند ولی از فایل متنی که میشه خوند.!!! :متفکر:

emadfa
پنج شنبه 27 بهمن 1390, 17:46 عصر
دوست عزیز با حفظ حرمت استاد و شما ، ولی این برنامه تو سی پلاس پلاس یا سی ، سر کاریه
کامپایلر فارسی نمی خونه باید شعر رو فینگلیش بنویسی بعد دو تا کمله مثل "کاش " و "کنارش" هم قافیه در میان kaash , kenaarash هر دو آخرش "ash" داره
مگه تو ویژوال بنویسی که اولا ربطی به این تالار نداره ، دوما اونجا هم تا حدودی سر کاریه ، فرق غزل و قصیده رو چطوری می فهمه؟ رباعی و دو پیتی رو چطور ، مگه یه برنامه بنویسی که دیپلم انسانی داشته باشه ، وزن شعر رو بفهمه
زیاد خودتو در گیرش نکن

مخالفم دوست عزیز.
به طور کلی در دنیای نرم افزار غیر ممکن وجود ندارد. به خصوص برای این پروژه که در زمره پروژه های تحقیقاتی قرار می گیرد.
پیاده سازی این سیستم با استفاده از ویژوال ++C و یا فریمورک Qt امکان پذیر است. Qt از Unicode به خوبی پشتیبانی می کند. برای طراحی این سیستم باید به طور کامل با ساختار اشعار در زبان فارسی و قالب ها آشنا باشی و از یک متخصص در این زمینه مشورت بگیری. بعد پیاده سازی چندان سخت نیست.

به نظر من پروژه جالبی هست. ادامه بدید. وقت بگذارید. حتما موفق می شید.

amin1softco
پنج شنبه 27 بهمن 1390, 19:08 عصر
دوست عزیز با حفظ حرمت استاد و شما ، ولی این برنامه تو سی پلاس پلاس یا سی ، سر کاریه
کامپایلر فارسی نمی خونه باید شعر رو فینگلیش بنویسی بعد دو تا کمله مثل "کاش " و "کنارش" هم قافیه در میان kaash , kenaarash هر دو آخرش "ash" داره
مگه تو ویژوال بنویسی که اولا ربطی به این تالار نداره ، دوما اونجا هم تا حدودی سر کاریه ، فرق غزل و قصیده رو چطوری می فهمه؟ رباعی و دو پیتی رو چطور ، مگه یه برنامه بنویسی که دیپلم انسانی داشته باشه ، وزن شعر رو بفهمه
زیاد خودتو در گیرش نکن
اینم از اون نظر های کاملاً ایرانی بود.
سی از یونیکد پشتیبانی می کنه ولی کنسول داس امکان نمایش کارکتر های فارسی/عربی رو نداره ولی ازشون پشتیبانی میک نه و در لینوکس این مشکلم وجود نداره!!!
به قول دوستمون هم شعر را در قالب یک فایل تکست در یافت می کنه بعد از تحلیل خروجی رو چاپ می کنه بدون هیچ فریم ورک یا دردسر دیگه ایی : اطلاعات بیشتر : http://msdn.microsoft.com/en-us/library/2dax2h36.aspx

Dr_Crazy
شنبه 29 بهمن 1390, 02:13 صبح
باید خدمت این دو عزیز عرض کنم من گفتم برنامه باید تحت محیط ویژوال باشه ، دوم اینکه خیر سی پلاس پلاس غیر از محیط ویژال چه borland و چه microsoft از فارسی پشتیبانی نمی کنن تاکید می کنم در محیط غیر ویژوال ، این رو با اطمینان می گم به خاطر این که حدود 8 ماه وقت یه گروه 5 نفره سرش تلف شده ، با استفاده از آرایه و keyloger و یونی کد می شه حروف فارسی رو نمایش داد (جهت اطلاع حتی در کنسول داس)، ولی کاملا بهم ریخته
در آخر منظور از این که می گم برنامه نمی شه ، نشدن مطلق نیست ، بله با پیش نیاز هایی که دوستمون فرمودن

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

amin1softco
شنبه 29 بهمن 1390, 09:23 صبح
با استفاده از آرایه و keyloger و یونی کد می شه حروف فارسی رو نمایش داد
به قول آقای نصیری شما باید یک Chuck Norris باشید!!!! :دی ولی برای اینکه ببنید چطور باید یک فایل یونیکد را خوند و قافیه سطر اول رو پیدا کرد این مثال رو نوشتم:
http://up3.iranblog.com/images/29663367933202901114.jpg



#include <iostream>
#include <fstream>
using namespace std;

void main(){

ifstream file("test.txt", ifstream::in|ifstream::binary);
int ch=0,s=0;
wchar_t buffer[2],st[100],gh[50];

wchar_t BOM = 0xFEFF;//for unicode!!!
ofstream debug( "debug.txt",ios::out|ios::binary);
debug.write((char *) &BOM,sizeof(wchar_t));
file.seekg(2);//BOM
do{
file.read((char*)buffer, sizeof(wchar_t));
if(buffer[0]==L' ') s=ch;
st[ch++]=buffer[0];
}while(buffer[0]!=L'\n');

for (int i=(s+1) ;i<(ch-1) ;i++) //extract sub string
gh[i-s-1]=st[i];

debug.write((char *) &gh,sizeof(wchar_t)*(ch-s-2));
wprintf(L"buf :%s\ngt :%s\n%d", buffer,gh,ch);
file.close();
debug.close();
}


ولی برای این کار ها شما باید یکمی داده کاوی کار کنید اما برای دانشجو در همین حد کافیه ولی در زبان هایی مثل سی شارپ شما با هیچ یک از این مشکلات مواجه نیستید و syntax خیلی شبیه سی خودمونه...

asheykh
یک شنبه 18 فروردین 1392, 09:45 صبح
ضمن تشکر از شما دوست عزیز (amin1softco)
باید بگم که منم خیلی وقت بود که دنبال پروژه تشخیص شعر در ++C می گشتم ولی انگار این پروژه کار نمی کنه!!!
اینکه مگه سورس پروژه ای رو که گذاشتی کامل نیست و بعد اینکه ولی من کامپایلش می کنم این ارورو میده ؟
که اینم عکسشه :

http://up.iranblog.com/images/fh25lpc6g1zfbq368vdo.jpg

البته خودم فکر میکنم مشکل از مسیر فایل های txt باشه انگار آدرس دهیم اشتباه بوده(اولش کار کرد عین هو کره ولی نمی دونم چرا دیگه کار نمی کنه!!!!!)
لطفا کمک کنید