PDA

View Full Version : حرفه ای: خواندن اعداد به فارسی



morteza271
یک شنبه 03 اردیبهشت 1391, 13:25 عصر
سلام دوستان.

من توی برنامه ای دارم مینویسم لازم دارم که کاری کنم که برنامه یه عدد رو به فارسی بخونه.
مثلا عدد 1000 رو بگه هزار
یا عدد 550 رو بگه پانصدوپنجاه.

ولی هیچ ایده ای ندارم و نمیدونم اصلا همچین کاری امکان پذیر هست یا نه؟

کسی نمونه برنامه ای dll ای نداره که بتونه کمکم کنه؟

با تشکر

Beginner2013
یک شنبه 03 اردیبهشت 1391, 13:48 عصر
من تو اینترنت فراوان دیدم از این کد،به C#‎ ام نباشه به زبونای دیگه هست فقط سرچ کنید،تبدیل ارقام به حروف

dorna20-30
یک شنبه 03 اردیبهشت 1391, 13:56 عصر
سلام دوستان.

من توی برنامه ای دارم مینویسم لازم دارم که کاری کنم که برنامه یه عدد رو به فارسی بخونه.
مثلا عدد 1000 رو بگه هزار
یا عدد 550 رو بگه پانصدوپنجاه.

ولی هیچ ایده ای ندارم و نمیدونم اصلا همچین کاری امکان پذیر هست یا نه؟

کسی نمونه برنامه ای dll ای نداره که بتونه کمکم کنه؟

با تشکر

سلام این برنامه اییه که من نوشتم امیدوارم به دردتون بخوره




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace tabdil2
{
public partial class Form1 : Form
{
public string yekan(Int64 ad)
{
switch (ad)
{
case 0:
return "";
case 1:
return "یک";
case 2:
return "دو";
case 3:
return "سه";
case 4:
return "چهار";
case 5:
return "پنج";
case 6:
return "شش";
case 7:
return "هفت";
case 8:
return "هشت";
case 9:
return "نه";
default:
return "";
}
}
public string dahgan2(Int64 m)
{
switch (m)
{
case 0:
return "ده";
case 1:
return "یازده";
case 2:
return "دوازده";
case 3:
return "سیزده";
case 4:
return "چهارده";
case 5:
return "پانزده";
case 6:
return "شانزده";
case 7:
return "هفده";
case 8:
return "هجده";
case 9:
return "نوزده";
default:
return "";
}
}
public string dah(Int64 m)
{
switch (m)
{
case 2:
return "بیست";
case 3:
return "سی";
case 4:
return "چهل";
case 5:
return "پنجاه";
case 6:
return "شصت";
case 7:
return "هفتاد";
case 8:
return "هشتاد";
case 9:
return "نود";
default:
return "";
}
}
public string sad(Int64 m)
{
switch (m)
{
case 1:
return "صد";
case 2:
return "دویست";
case 3:
return "سیصد";
case 4:
return "چهارصد";
case 5:
return "پانصد";
case 6:
return "ششصد";
case 7:
return "هفتصد";
case 8:
return "هشتصد";
case 9:
return "نهصد";
default:
return "";
}
}
public string dahgan(Int64 m)
{
Int64 b = m % 10;
Int64 k = m / 10; if (k == 0) { return yekan(m); }
else
{
if (k == 1)
{
return dahgan2(b);
}
else
{
dah(k);
yekan(b); if (yekan(b) == "")
{
return dah(k) + yekan(b);
}else{return dah(k)+" و"+yekan(b);
}
}
}
}
public string sadgan(Int64 m)
{
Int64 b = m % 100;
Int64 k = m / 100; if (k == 0) { return dahgan(m); }
else
{
sad(k);
dahgan(b); if (dahgan(b) == "")
{
return sad(k) + dahgan(b);
}
else
{return sad(k)+" و"+dahgan(b); }
}
}
public string hezargan(Int64 m)
{
Int64 b = m % 1000;
Int64 k = m / 1000;
if (k == 0)
{
return "";
}
else
{
sadgan(k);
sadgan(b); if (sadgan(b) == "")
{

return sadgan(k) + " هزار" + sadgan(b);
}
else { return sadgan(k) + " هزارو" + sadgan(b); }
}
}
public string milion(Int64 m)
{
Int64 b = m % 1000000;
Int64 k = m / 1000000;
if (k == 0)
{
return "";
}
else
{
sadgan(k);
hezargan(b);if(hezargan(b)==""){
return sadgan(k) + " میلیون " + hezargan(b);}
else{
return sadgan(k)+" میلیون و"+hezargan(b);}
}
}
public string milyard(Int64 m)
{
Int64 b = m % 1000000000;
Int64 k = m / 1000000000;
if (k == 0)
{
return "";
}
else
{
sadgan(k);
milion(b); if (milion(b) == "")
{
return sadgan(k) + "میلیارد" + milion(b);
}
else { return sadgan(k) + " میلیاردو" + milion(b); }
}
}

public Form1()
{
InitializeComponent();
}

public void button1_Click(object sender, EventArgs e)
{
convert();
}
public void convert() {

Int64 ad = int.Parse(textBox1.Text);
listBox1.Items.Clear();
listBox1.Items.Add(milyard(ad));
if (milyard(ad) == "")
{
listBox1.Items.Clear();
listBox1.Items.Add(milion(ad));
if (milion(ad) == "")
{
listBox1.Items.Clear();
listBox1.Items.Add(hezargan(ad));
if (hezargan(ad) == "")
{
listBox1.Items.Clear();
listBox1.Items.Add(sadgan(ad));
if (sadgan(ad) == "")
{
listBox1.Items.Clear();
listBox1.Items.Add(dahgan(ad));
if (dahgan(ad) == "")
{
listBox1.Items.Clear();
listBox1.Items.Add(yekan(ad));
if (ad == 0)
{
listBox1.Items.Add("صفر");
}
else
{
listBox1.Items.Clear();
listBox1.Items.Add(yekan(ad));
}
}
}
}
}
}
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
Int64 i;
try {
i = Int64.Parse(textBox1.Text.Trim());
convert();
}catch(Exception ex){
MessageBox.Show("please insert correct number!");
}

}
}

private void Form1_Load(object sender, EventArgs e)
{

}
}
}

morteza271
یک شنبه 03 اردیبهشت 1391, 14:02 عصر
من تو اینترنت فراوان دیدم از این کد،به C#‎ ام نباشه به زبونای دیگه هست فقط سرچ کنید،تبدیل ارقام به حروف

نه دوست عزیز نمیخوام تبدیل کنه،به هرحال بابت پاسختون ممنونم ولی
میخوام تلفظ کنه یعنی بخونه اعداد رو نمیخوام به حروف تبدیلش کنم وگرنه کدشو دارم.
از دوستان دیگه کسی چیزی در این باره میدونه که منو کمک کنه؟؟
با تشکر

morteza271
یک شنبه 03 اردیبهشت 1391, 14:03 عصر
سلام این برنامه اییه که من نوشتم امیدوارم به دردتون بخوره




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace tabdil2
{
public partial class Form1 : Form
{
public string yekan(Int64 ad)
{
switch (ad)
{
case 0:
return "";
case 1:
return "یک";
case 2:
return "دو";
case 3:
return "سه";
case 4:
return "چهار";
case 5:
return "پنج";
case 6:
return "شش";
case 7:
return "هفت";
case 8:
return "هشت";
case 9:
return "نه";
default:
return "";
}
}
public string dahgan2(Int64 m)
{
switch (m)
{
case 0:
return "ده";
case 1:
return "یازده";
case 2:
return "دوازده";
case 3:
return "سیزده";
case 4:
return "چهارده";
case 5:
return "پانزده";
case 6:
return "شانزده";
case 7:
return "هفده";
case 8:
return "هجده";
case 9:
return "نوزده";
default:
return "";
}
}
public string dah(Int64 m)
{
switch (m)
{
case 2:
return "بیست";
case 3:
return "سی";
case 4:
return "چهل";
case 5:
return "پنجاه";
case 6:
return "شصت";
case 7:
return "هفتاد";
case 8:
return "هشتاد";
case 9:
return "نود";
default:
return "";
}
}
public string sad(Int64 m)
{
switch (m)
{
case 1:
return "صد";
case 2:
return "دویست";
case 3:
return "سیصد";
case 4:
return "چهارصد";
case 5:
return "پانصد";
case 6:
return "ششصد";
case 7:
return "هفتصد";
case 8:
return "هشتصد";
case 9:
return "نهصد";
default:
return "";
}
}
public string dahgan(Int64 m)
{
Int64 b = m % 10;
Int64 k = m / 10; if (k == 0) { return yekan(m); }
else
{
if (k == 1)
{
return dahgan2(b);
}
else
{
dah(k);
yekan(b); if (yekan(b) == "")
{
return dah(k) + yekan(b);
}else{return dah(k)+" و"+yekan(b);
}
}
}
}
public string sadgan(Int64 m)
{
Int64 b = m % 100;
Int64 k = m / 100; if (k == 0) { return dahgan(m); }
else
{
sad(k);
dahgan(b); if (dahgan(b) == "")
{
return sad(k) + dahgan(b);
}
else
{return sad(k)+" و"+dahgan(b); }
}
}
public string hezargan(Int64 m)
{
Int64 b = m % 1000;
Int64 k = m / 1000;
if (k == 0)
{
return "";
}
else
{
sadgan(k);
sadgan(b); if (sadgan(b) == "")
{

return sadgan(k) + " هزار" + sadgan(b);
}
else { return sadgan(k) + " هزارو" + sadgan(b); }
}
}
public string milion(Int64 m)
{
Int64 b = m % 1000000;
Int64 k = m / 1000000;
if (k == 0)
{
return "";
}
else
{
sadgan(k);
hezargan(b);if(hezargan(b)==""){
return sadgan(k) + " میلیون " + hezargan(b);}
else{
return sadgan(k)+" میلیون و"+hezargan(b);}
}
}
public string milyard(Int64 m)
{
Int64 b = m % 1000000000;
Int64 k = m / 1000000000;
if (k == 0)
{
return "";
}
else
{
sadgan(k);
milion(b); if (milion(b) == "")
{
return sadgan(k) + "میلیارد" + milion(b);
}
else { return sadgan(k) + " میلیاردو" + milion(b); }
}
}

public Form1()
{
InitializeComponent();
}

public void button1_Click(object sender, EventArgs e)
{
convert();
}
public void convert() {

Int64 ad = int.Parse(textBox1.Text);
listBox1.Items.Clear();
listBox1.Items.Add(milyard(ad));
if (milyard(ad) == "")
{
listBox1.Items.Clear();
listBox1.Items.Add(milion(ad));
if (milion(ad) == "")
{
listBox1.Items.Clear();
listBox1.Items.Add(hezargan(ad));
if (hezargan(ad) == "")
{
listBox1.Items.Clear();
listBox1.Items.Add(sadgan(ad));
if (sadgan(ad) == "")
{
listBox1.Items.Clear();
listBox1.Items.Add(dahgan(ad));
if (dahgan(ad) == "")
{
listBox1.Items.Clear();
listBox1.Items.Add(yekan(ad));
if (ad == 0)
{
listBox1.Items.Add("صفر");
}
else
{
listBox1.Items.Clear();
listBox1.Items.Add(yekan(ad));
}
}
}
}
}
}
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
Int64 i;
try {
i = Int64.Parse(textBox1.Text.Trim());
convert();
}catch(Exception ex){
MessageBox.Show("please insert correct number!");
}

}
}

private void Form1_Load(object sender, EventArgs e)
{

}
}
}

ممنونم دوست عزیز ولی شما هم منظورمو درست متوجه نشدین!
لطفا با دقت بیشتر سوالمو بخونید..
با تشکر

C#.net
یک شنبه 03 اردیبهشت 1391, 16:26 عصر
ایده نوشتن چنین برنامه ای بسیار شبیه همین برنامه ای هست که دوستمون کدش رو فرستادن، این برنامه یه سری عدد numeric رو به alphabetic تبدیل می کنه، به ازایرقم های 1 تا 9 به ترتیب "یک" تا "نه" رو به صورت نوشتاری بر می گردونه و ترکیب های پیچیده تری مثل صد میلیون و دویست هزارو پنجاه و سه هم از طریق چند ساختار کلی پیاده سازی می شه.
شما برای نوشتن چنین برنامه ای باید 2 کار انجام بدید:
1- به ازای تمام مجموعه های صدگان و ده بریک و ... یه سری صوت رو با یه فرمت استاندارد ضبط کنید.
2- به جای برگردوندن رشته در مثال فوق، از طریق کدی مشابه زیر، صدای متناظر اون رو به ترتیب پخش کنید:(مثلا نه هزار)

new System.Media.SoundPlayer(@"d:\yourPatch\Yekan\9.wav").Play();
new System.Media.SoundPlayer(@"d:\yourPatch\Hezargan\1000.wav").Play();


من الگوریتم دوستمون رو دقیق مطالعه نکردم، ولی یه نمونه هم هست که مهندس وحید نصیری تو وبلاگشون گذاشتن که برای استفاده مناسب هست:

http://www.dotnettips.info/2011/09/blog-post_19.html

موفق باشید

morteza271
دوشنبه 04 اردیبهشت 1391, 10:35 صبح
ممنونم دوست عزیز.

یعنی شما می گین من باید یه عالمه صوت رو ذخیره کنم؟؟
برای هر عدد باید یه فایل صوتی داشته باشم؟
اینطوری که خیلی سخت میشه؟!!

هیچ کامپوننتی در این مورد نیست؟
دوستان لطفا راهنمایی کنید...

C#.net
دوشنبه 04 اردیبهشت 1391, 10:53 صبح
ممنونم دوست عزیز.

یعنی شما می گین من باید یه عالمه صوت رو ذخیره کنم؟؟
برای هر عدد باید یه فایل صوتی داشته باشم؟
اینطوری که خیلی سخت میشه؟!!

هیچ کامپوننتی در این مورد نیست؟
دوستان لطفا راهنمایی کنید...

نه دوست عزیز، فقط یه سری اعدد خاص
مثلا فرض کنید اعداد یک تا 19 رو ضبط کردید، طبیعتا فقط 19 تا عدد رو می تونید پخش کنید
حالا فرض کنید اینها رو هم ضبط کردید:
"بیست " ، "سی " ..... تا .... "نود " (هشت مورد) به اضافه تک واژ "و" حالا مجموعا
19+ 8 + 1 = 28 تا فایل صوتی دارید، ولی می تونید باهاش اعداد 1 تا 99 رو باهاش پوشش بدید!
به همین ترتیب برای موارد دیگه: کافیه این ها رو ضبط کنید:
"صد"، "دویست"، "سیصد"،"هزار"، "میلیون"، "میلیارد"(6 مورد)
حالا با این 28+6 = 34 فایل صوتی می تونید اعداد 1 تا 999999999999 رو پوشش بدید! یعنی تقریبا 1 تیریلیارد!

morteza271
دوشنبه 04 اردیبهشت 1391, 11:00 صبح
اوکی دوست عزیز متوجه شدم ممنون.بازم اگه مشکلی باشه مزاحمتون میشم.

راستی کلا در مورد تلفظ متن فارسی کامپوننت خاصی وجود نداره؟کسی تا الان این کامپوننت رو نساخته؟
با تشکر

morteza271
پنج شنبه 07 اردیبهشت 1391, 10:07 صبح
دوستان کسی در مورد تلفظ متن فارسی چیزی نمیدونه؟

Hossenbor
پنج شنبه 07 اردیبهشت 1391, 10:27 صبح
چرا دوست من هست اسمه نرم افزارش هم پارس خوان هست فکر کنم دقیق یادم نیست کلا برای خواندن متنه

morteza271
پنج شنبه 07 اردیبهشت 1391, 11:05 صبح
ممنونم دوست عزیز.

خوب این دوستتون کی هست؟
ایمیلی چیزی ازش میتونین بهم بدین تا ببینم میتونن کمکم کنن یا نه؟
با تشکر

Sany_Pro
دوشنبه 02 مرداد 1391, 16:54 عصر
این فارسی خوان اعداد
http://www.etemadpardaz.com/Download/numberfarsi.rar (http://www.etemadpardaz.com/Download/numberfarsi.rar)

en.reza
دوشنبه 09 مرداد 1391, 17:37 عصر
فایلش dll تو اینترنت موجوده نتونستی پیداکنی ایمیل بده بفرستم
en.rezamahmoodi@yahoo.com

ya30ien2
پنج شنبه 04 آبان 1391, 16:08 عصر
دوستان برای خواندن چند فایل صوتی به ترتیب چیکار باید کرد؟

programerinfonet
پنج شنبه 04 آبان 1391, 21:22 عصر
دوست خوبم کامپونت فارسی موجود نیست یعنی هست یه چندتا شرکت نوشتن اما واسه خودشون نه فروش من هم یک مدت دنبالش رفتم چیزی نبود
در کل تنها راهش همینه که باید صوت ظبط کنی
از 1 تا99 و صد ، دویست ، سیصد و. ... هزار و میلیون
کلا میشه 110 تا فایل صوتی کم حجم که تا 9 رقم رو میتونه تلفظ کنه

afsharm
چهارشنبه 02 بهمن 1392, 15:38 عصر
تاریخ این پست کمی قدیمیه ولی چون ممکن است به درد بقیه هم بخورد جواب می‌دهم.

من یک پروژه کوچک ایجاد کردم که همین کار را انجام می‌دهد. یعنی اعداد را دریافت و آنها را به فارسی می‌خواند (تلفظ می‌کند). این dll قابل استفاده در ویندوز و وب هم هست و نیازی به دسترسی مستقیم به سیستم صوتی ماشین ندارد چون از Stream و قالب فایل wav استفاده کرده است.

جهت کسب اطلاعات بیشتر اینجا را ببینید: http://paysa.ir/blogs/sepidar/post/%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A8%D9%87-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C.aspx

samsam_ninja
چهارشنبه 02 بهمن 1392, 21:45 عصر
115798

دانلود (http://www.uplooder.net/cgi-bin/dl.cgi?key=29e252802cb7d5672e8ed20caef8df74)