نرم افزار مترجم

saalek110

Well-Known Member
دوستان اگر ایده ای برای ساخت چنین نرم افزاری دارند بدهند.
در یک بازی آنلاین ، در چت آن ، وقتی دکمه ترجمه را می زدی از هر زبانی که مخاطب نوشته بود به زبان شما ترجمه میشد.البته آنچنان کامل و بی نقص هم نبود.

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

و سوال دوم اینکه آیا بانک لغات این زبانها را میشه پیدا کرد تا به دیتابیس اضافه کرد؟

یک سوال دیگه هم در مورد کارآمد کردنش است. مثلا یک دیکشنری بود وقتی لغتی را انتخاب می کردی می آمد بالا ترجمه می کرد. برای اون مکانیسم ها هم اگر پیشنهادهایی دارید بدهید.
 
آخرین ویرایش:

the_king

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

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

و سوال دوم اینکه آیا بانک لغات این زبانها را میشه پیدا کرد تا به دیتابیس اضافه کرد؟

یک سوال دیگه هم در مورد کارآمد کردنش است. مثلا یک دیکشنری بود وقتی لغتی را انتخاب می کردی می آمد بالا ترجمه می کرد. برای اون مکانیسم ها هم اگر پیشنهادهایی دارید بدهید.

ما بازی سازی را با هم در همین تالار به جاهای خوبی رساندیم. این پروژه شخصی نیست و برای همه ایرانی هاست. با هم فکری شما یک چیز مفید و ماندگار برای همه ایرانیان بسازیم.
نرم افزار های دیکشنری معروف مثل Babylon مجموعه بزرگی از فرهنگ لغات زبان های مختلف رو دارند، که قاعدتا با ابزار هایی مثل BabylonToHtml لغات داخل glossary ها قابل استخراج ئه.
علاوه بر این منابع متفاوتی در اینترنت هست که بانک اطلاعاتی فرهنگ لغات در برخی زبان ها رو بشه ازشون دانلود کرد.
Download bilingual dictionaries
Dictionary Downloads

و همچنین نمونه کد برنامه و بانک اطلاعاتی آماده :
GitHub - free dictionary
 

saalek110

Well-Known Member
خیلی کمک کردید ، با داشتن دیتابیس اکثر کار انجام شده است.
فعلا می خواهم با زبان آلمانی شروع کنم ، بعدا میشه دیتابیس های دیگر را هم افزود.

من یکی دو سال پیش یک برنامه کار کردم که سورس سایت های غریبه را می گرفت و دوباره ازش سایت می ساخت. فعلا می خواهم همون روش را کار کنم. با توابع رشته ایphp می آیم عناصر سایت را پردازش می کنم و ترجمه لغات آلمانی را به انگلیسی زیرش اضافه می کنم. بعدا آلمانی به فارسی خواهد شد.

هدف من یادگیری لغات آلمانی است. اگر بتوانم سایتهای آلمانی را مطالعه کنم به یادگیری آلمانی کمک می کند.

باز هم اگر ایده و لینکی داشتید بزنید در تاپیک.
دوستان هر جیزی در این مورد به ذهنشان می رسه بگن. چون ایده های ده نفر بهتر از ایده های یک نفر است.


سایتش هر وقت ساخته شد ، در سایت می زنم. برای استفاده عموم.
 
آخرین ویرایش:

saalek110

Well-Known Member
این سایت 4 منبع مختلف دارد . من آلمانی به انگلیسی اولی یعنی یونیورسال را دانلود کردم 2000 لغت آلمانی دارد(دو هزار). برای شروع کارم عالی است ولی فکر کنم کمی بیشتر بود بهتر بود. دقیق نمی دونم با چندهزار لغت میشه کار راه انداخت. شاید در این مورد سرچ کنم بعدا.

دومی هنوز دانلود نشده.
سومی 5000 لغت داره. ممکن است همین فعلا کافی باشد.
چهارمی 7500 خط است.

d4.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
اما سایت زیر:
آلمانی به انگلیسی را دانلود کردم. یک فایل tei داشت با ادیتورم باز کردم 13 میلیون خط بود.woow

g6.jpg

جالبه.

یک نقشه(کد) می خواهد اینو به دیتابیس هاست منتقل کنم. کسی اگر روشی بلده کمک کنه. شاید هم همون 7500 خطی پست قبل که از لینک دیگری بود مناسب باشه.
 
آخرین ویرایش:

saalek110

Well-Known Member
برنامه دستکاری یک سایت و نمایش مجدد آن:


کد اینه:
PHP:
<?php

$str = file_get_contents('http://________');
$str= str_replace("welcome","welcome(khoshamad)",$str);
echo $str;

?>

کلمه welcome ترجمه اش داخل پرانتز به سایت اضافه شده.



پس فقط می مونه ارسال دیکشنری داخل دیتابیس هاست.
 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
$str = file_get_contents('http://---------');
$chars = preg_split('/<[^>]*[^\/]>/i', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
print_r($chars);

منبع:

کد بالا باعث میشه
اولا محتوای سایت تکه تکه بشه و
دوما خرت و پرت های سایت حذف بشه و فقط متن سایت باقی بماند.

منظور از خرت و پرت مثلا <td> و <tr> و کلا هر چیزی که جزو قالب سایت است نه مطالب خواندنی سایت.
چون ما که نمی خواهیم قالب سایت را ترجمه کنیم. می خواهیم متن و مقاله سایت را ترجمه کنیم.
ولی هنوز یک اشکال دارد.
تکه ها به شکل جمله است نه کلمه. در نتیجه دقت کنید مثلا داریم version mobile ولی کلمه کلمه می خواهیم تا ترجمه کنیم.

Array ( [0] => [1] => [2] => [3] => [4] => --- [5] => [6] => [7] => [8] => 72 [9] => Home [10] => Users [11] => [12] => ثبت نام [13] => register [14] => [15] => لوگین- ورود [16] => login [17] => welcome(khoshamad) [18] => number [19] => game name [20] => link [21] => made by [22] => sharh dar [23] => sabte emteyaz [24] => systeme bazi [25] => sharh [26] => version mobile [27] => tasvir [28] => 1 [29] => game 1 [30] => game1 [31] => by javascript w3schools.com [32] => w3schools [33] => ندارد [34] => ویندور برای موبایل برو به ستون بعدی [35] => w3schools [36] => این بازی بیشتر آموزشی است تا با کدهای جاوا اسکریپت آشنا شوید. در صفحه دیگر سایت بازی مناسب موبایل موجود بود که در ستون مربوطه لینک داده شد. [37] => number [38] => game name [39] => link [40] => made by [41] => sharh dar [42] => sabte emteyaz [43] => systeme bazi [44] => sharh [45] => version mobile [46] => tasvir [47] => 2 [48] => game 2 [49] => game2 [50] => by GDevelop [51] => ندارد [52] => mobile & windows [53] => بازی فوق توسط بازی ساز ذکر شده که بازی سازی بدون کدنویسی است ساخته شده و باید بقیه لول ساخته می شد. من مقداری لول را ادامه دادم ولی بهرحال ناتمام ماند. البته میشه یک بازی خالی را شروع کرد. من زیاد وقت نگذاشتم. [54] => number [55] => game name [56] => link [57] => made by [58] => sharh dar [59] => sabte emteyaz [60] => systeme bazi [61] => sharh [62] => version mobile [63] => tasvir [64] => 3 [65] => Stack game [66] => Stack game [67] => blog. devgenius.io [68] => blog.devgenius.io [69] => بازی خودش امتیاز می دهد. ولی در سایت ما ثبت نمی شود. [70] => فقط ویندوز [71] => این بازی با three js ساخته شده. در این بازی دقت نیاز است. [72] => number [73] => game name [74] => link [75] => made by [76] => sharh dar [77] => sabte emteyaz [78] => systeme bazi [79] => sharh [80] => version mobile [81] => tasvir [82] => 4 [83] => ماشین فیزیک ammo [84] => vehicle [85] => فیزیک ammo [86] => ندارد [87] => ویندوز [88] => bazi haye upload nashodeh. faghat link [89] => bazie sakhreh va derakhtan [90] => )
 
آخرین ویرایش:

saalek110

Well-Known Member
برای اینکه نتیجه اجرا مثل پست قبل شلوغ نباشه فقط یک تکه را چاپ می کنیم:


PHP:
$str = file_get_contents('http://----------');
$chars = preg_split('/<[^>]*[^\/]>/i', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
echo $chars[55];

نتیجه اجرا:
game name

پس یک بار دیگه اکسپلود می کنیم:
PHP:
$str = file_get_contents('http://----------');
$chars = preg_split('/<[^>]*[^\/]>/i', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$chars2=explode (" ", $chars[55]   );
echo $chars2[0];

نتیجه اجرا:
game

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

saalek110

Well-Known Member
برنامه چاپ جملات سایت زیر هم:
PHP:
$str = file_get_contents('http://----------');
$chars = preg_split('/<[^>]*[^\/]>/i', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

for ($x = 0; $x <= count($chars); $x++) {
  echo $chars[$x];
  echo"<br>";
}

نتیجه اجرا: (البته یک تکه اش را نوشتم چون طولانی بود)

version mobile
tasvir
3
Stack game
Stack game
blog. devgenius.io
sharh dar
sabte emteyaz
systeme bazi
sharh
version mobile
tasvir
4
ماشین فیزیک ammo
vehicle
فیزیک ammo
ندارد
ویندوز
bazi haye upload nashodeh. fa
 
آخرین ویرایش:

saalek110

Well-Known Member
برنامه چاپ کلمات سایت با حلقه تودرتو:
PHP:
$str = file_get_contents('http://--------');
$chars = preg_split('/<[^>]*[^\/]>/i', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

for ($x = 0; $x <= count($chars); $x++) {//first loop
    $chars2=explode (" ", $chars[$x]   );
   for ($x2 = 0; $x2 <= count($chars2); $x2++) {//inner loop
  echo $chars2[$x2];
  echo"<br>";
         }//inner loop
}//first loop

نتیجه اجرا:

فیزیک
ammo

ندارد

ویندوز

bazi
haye
upload
nashodeh.
faghat
link

bazie
sakhreh
va
derakhtan

خوب کلمات تکی آماده ترجمه است.
در دیتابیس باید بگردیم ببینیم این کلمه را داریم یا نه و اگر داشتیم معنی اش را بهش اضافه کنیم.

البته یک اشکالی هست. من وقتی دیکشنری ها را نگاه می کردم بعضی اصطلاحات دو کلمه ای یا بیشتر بود.

شرح: گاهی در سایت یک تکه 7 کلمه است. برنامه که نمی داند در آلمانی کدام ها دو کلمه ای هستند. پس برنامه همه را تک تک جدا می کند. و تک تک برای ترجمه می بریم.

یا باید این قضیه را ندیده گرفت یا معماری برنامه را تغییر داد. البته فعلا نمی خواهم به این قضیه بپردازم. بهتره برنامه را اول کامل کنیم بعد به فکر ارتقاها باشیم.
گاهی در سایت یک تکه 7 کلمه است. برنامه که نمی داند در آلمانی کدام ها دو کلمه ای هستند. شاید هم راه حلی داشته باشه این مشکل.
 
آخرین ویرایش:

saalek110

Well-Known Member
اشکال دیکشنری ها:

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

یک تکه اش را می گذارم ببینید:
HTML:
Client-Server-Modell    Client-server
Clive Staples Lewis    C. S. Lewis
Cobalt    Cobalt
Cocktail    Cocktail
Codein    Codeine
Coffein    Caffeine
Cognac (Weinbrand)    Cognac (drink)
Cola    Cola
Colin Powell    Colin Powell
Collage    Collage
Colombo    Colombo

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


ولی
اون 13 میلیون خطی خودش مشخص کرده کدوم کلمه آلمانی است و کدوم ترجمه و کدوم ارجاع.

g6.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
من دارم کد بار زدن دیکشنری 400 مگایی به دیتابیس را می نویسم.
 

saalek110

Well-Known Member
فایل را بار زدم در دیتابیس لوکال.
حدود 400 هزار ردیف شد.
یعنی 400 هزار لغت آلمانی با معنی انگلیسی آن.

فقط یک گام مونده. انتقال تیبل از لوکال به هاست. بهترین راه برای این کار چیه؟
 

saalek110

Well-Known Member
فایل را بار زدم در دیتابیس لوکال.
حدود 400 هزار ردیف شد.
یعنی 400 هزار لغت آلمانی با معنی انگلیسی آن.

فقط یک گام مونده. انتقال تیبل از لوکال به هاست. بهترین راه برای این کار چیه؟
فایل sql از دیتابیس گرفتم و در هاست sql را اجرا کردم. با وجود زیادی ردیف ها راحت در تیبل پر شد.

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

saalek110

Well-Known Member
aa.jpg

در این قسمت می خواهیم وارد بحث php و xml شویم . بحث ما خواندن فایلهای xml توسط php است.


XML چیست ؟​

XML مخفف عبارت Extensible Markup Language می باشد.

از XML به منظور ساختن اطلاعات، ذخیره و در نهایت انتقال اطلاعات از سیستمی به سیستم دیگر استفاده می شود.

XML زبانی است نزدیک به زبان HTML که در آن از تگ های باز و بسته استفاده می کنیم. اما برخلاف زبان برنامه نویسی HTML ، ما در این زبان می توانیم به خودی خود تگ هایی را تعریف کنیم. به گونه ایی که تا کنون وجود نداشتند.



فایل XML یا همان زبان نشانه‌گذاری گسترش‌پذیر، زبانی است که چارچوب کلی نشانه‌گذاری متن‌های الکترونیکی را مشخص می‌کند. به گونه‌ای که زبان XML هم برای انسان‌ها و هم برای سیستم‌ها، به‌راحتی خوانده می‌شود. زبان XML نسخه تغییر یافته از زبان برنامه‌نویسی HTML می‌باشد که با این هدف ساخته شده است که سادگی زبان ‏HTML و زبان SGML را در هم آمیخته و با استفاده از اینها یک زبان قدرتمند و بسیار عالی را ایجاد کند.

نصب XML​

از آنجایی که توابع XML بخشی از هسته خود PHP می باشند، نیازی به نصب XML نخواهید داشت.


خواندن XML در PHP می تواند به منظور دریافت اطلاعات RSS Feed سایت ها یا اطلاعات دقیق و لحظه ای از سایت های مرجع ارز , خبری , آب و هوا و غیره انجام شود

 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
<?php
$myXMLData =
"<?xml version='1.0' encoding='UTF-8'?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>";

$xml=simplexml_load_string($myXMLData) or die("Error: Cannot create object");
print_r($xml);
?>

در کد بالا یک متغیر داریم که حاوی اطلاعات xml است.

بعد load و چاپ داریم:
SimpleXMLElement Object ( [to] => Tove [from] => Jani
=> Reminder [body] => Don't forget me this weekend! )
یعنی به شکل یک آرایه درآمده.

منبع:
 

saalek110

Well-Known Member
مثال دوم:

PHP:
<!DOCTYPE html>
<html>
<body>

<?php
libxml_use_internal_errors(true);
$myXMLData =
"<?xml version='1.0' encoding='UTF-8'?>
<document>
  <user>John Doe</wronguser>
  <email>[email protected]</wrongemail>
</document>";

$xml = simplexml_load_string($myXMLData);
if ($xml === false) {
    echo "Failed loading XML: ";
    foreach(libxml_get_errors() as $error) {
        echo "<br>", $error->message;
    }
} else {
    print_r($xml);
}
?>

</body>
</html>
 

saalek110

Well-Known Member
خواندن فایل xml:

فایل ما:

PHP:
<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

کد :

PHP:
<?php
$xml=simplexml_load_file("note.xml") or die("Error: Cannot create object");
print_r($xml);
?>

اجرا:
SimpleXMLElement Object ( [to] => Tove [from] => Jani
=> Reminder [body] => Don't forget me this weekend! )​
 

جدیدترین ارسال ها

بالا