تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
ترجمة النصوص من الإنجليزية الي العربية بين الواقع و الخيال
#1
السلام عليكم ورحمة الله وبركاته

مقدمــــــــة:
ترجمة نص أو ترجمة كلمة أو رقم من لغة الي أخري أمر هام جدا خاصة حين تحاول أن تبني برامج تدعم لغات أخري ومن المؤكد أن هذا الأمر يشغل بال فئة من المبرمجين
و في  هذا الموضوع سنناقش بعض الأفكار التي من الممكن أن تكون نواة معقولة لكتابة برامج لترجمة النصوص او كتابة برامج مثل القاموس الإلكتروني او ما شابه ذلك.

الهدف :
مشاركة الأفكار البرمجية


الفكرة:
فكرة الموضوع هنا عبارة عن تخزين البيانات بشكل ما ثم فراءتها ثم عرضها علي المستخدم من خلال برنامجك وهذا غالبا ما يتم بأكثر من اسلوب طبقا لرؤية و هدف كل مبرمج
هذا كله من الممكن أن يتم كالتالي:

1- أن نحتفظ بالبيانات الخاصة بكل لغة في ملف ما او في عدة ملفات ثم نقوم بقراءتها وتحويلها الي مصفوفات وهذا الأسلوب مناسب جدا حين يكون هدفك أن تسمح لمستخدم البرنامج أن يضيف بيانات أو يقوم بالتعديل في البيانات التي تم تخزينها مسبقا او ما شابه ذلك

2- أن يكون برنامجك لا يدعم عمليات الاضافة والتعديل وتقوم أنت بإدخال البيانات كاملة وهنا قد تحتاج او لا تحتاج الي ملفات لتخزين البيانات لكنك ستظل في حاجة الي تخزين البيانات بشكل ما داخل البرنامج ثم تقوم بقراءة البيانات و تحويلها الي مصفوفات

في جميع الأحوال نحن في حاجة الي مصفوفتان او مصفوفة واحدة أو أكثر حيث يتم استخدام المصفوفات لقراءة البيانات و عقد المقارنات بين النصوص اللغوية ثم و بشكل اتوماتيكي تتم عملية الترجمة من لغة الي أخري

حتي الأن الأمر يبدو بسيطا وسهلا لكن لو فكرنا قليلا سنجد أننا في حاجة الي داتابيز ضخمة جدا نحتفظ فيهابالبيانات وهذا قد يحتاج الي ايام وشهور وربما سنوات لإنجازه و حتي إن استطعنا الإنتهاءمن إنجاز الداتا بيز سيظل هناك بعض القيود التي ربما تؤثر في ترجمة النصوص بكل دقة وهذه القيود من الممكن تصنيفها كالتالي

1-أسلوب إدخال البيانات بواسطة المستخدم ربما يؤثر بشكل ما علي عملية الترجمة
2-النحو ........ وهو يمثل واحدا من أكبر العوائق في ترجمة النصوص من اللغة العربية الي الإنجليزية او العكس و الدليل علي اهمية هذه الجزئية هو ان مترجم جوجل لا يترجم بشكل صحيح مائة بالمائة بسبب النحو

نقطة الإنطلاق:
البداية هنا ستكون تحويل الأرقام من اللغة الانجليزية الي اللغة العربية بدون استخدام ملفات مايكروسوفت الموجودة في الدوت نت و في واقع الأمر هذا ما يمكن ان نطلق عليه اسهل جزء في الفكرة المراد توضيحها لكنني هنا سأخذه كمثال أولي للتعبير عن الفكرة و ليكون نقطة إنطلاق لبناء شئ أفضل.

الكود:
الخطوات التالية توضح كيفية تحويل الأرقام الإنجليزية الي أرقام عربية

1- تعريف مصفوفة للأرقام الإنجليزية

PHP كود :
Dim EnglishGlyphs As IEnumerable(Of String) = New List(Of StringFrom {"0""1""2""3""4""5""6""7""8""9"

2- تعريف مصفوفة للأرقام العربية

PHP كود :
Dim ArabicGlyphs As IEnumerable(Of String) = New List(Of StringFrom {ChrW(1632), ChrW(1633), ChrW(1634), ChrW(1635), ChrW(1636), ChrW(1637), ChrW(1638), ChrW(1639), ChrW(1640), ChrW(1641)}
 
    

3- كتابة الروتين او الدالة التي ستقوم بتحويل المدخلات من الانجليزية الي العربية
واهم شئ في فكرة الدالة هو الحصول علي الرقم المسلسل الخاص بكل حرف في مصفوفة اللغة الإنجليزية ثم استخدام نفس الرقم المسلسل لإيجاد ما يقابله في اللغة العربية

كود :
  Private Function TranslateToArabic(text As String) As String
       Dim sourceValue As String = CType(text, String)
       Dim sb As System.Text.StringBuilder = CType(Nothing, System.Text.StringBuilder)
       Dim result As String = CType(Nothing, String)
       If Not (String.IsNullOrEmpty(sourceValue)) Then
           sb = New System.Text.StringBuilder
           For j As Integer = 0 To text.Length - 1
               Dim s As String = text(j)
               If EnglishGlyphs.Contains(s) Then
                   Dim index As Integer = EnglishGlyphs(s)
                   Dim arabicString As String = ArabicGlyphs(index)
                   sb.Append(arabicString)
               End If
           Next
           result = sb.ToString
       End If

       Return result
   End Function

   Public Function ToArabic(value As String) As String
       Dim valueString As String = CType(value, String)
       If Not (String.IsNullOrEmpty(valueString)) Then
           Return TranslateToArabic(valueString)
       End If
       Return CType(Nothing, String)
   End Function

4- كيفية إستخدام الكود
تعريف متغير يعبر عن الرقم المراد ترجمته الي اللغة العربية ثم بعد ذلك نقوم بتمرير القيمة الخاصة به الي الدالة التي تقوم بترجمته الي اللغة العربية

PHP كود :
       Dim s As String "20450606060"
 
       Dim result As String ToArabic(s)
 
       Me.Text result
        
' or 
        Me.TextBox1.Text = ToArabic("20450606060") 

لقد قمت بكتابة الكود علي شكل كلاس ليسهل استخدامه او تطويره وفي المرفقات ستجدون نسخة من الكود مكتوبة ببرنامج الفيجوال استوديو 2015

الكود الخاص بالكلاس كاملا

PHP كود :
Public Class NumericsShaper

    Public Sub 
New()

 
   End Sub

    Protected ReadOnly Property ArabicGlyphs 
As IEnumerable(Of String)
 
       Get
            Return 
New List(Of StringFrom {ChrW(1632), ChrW(1633), ChrW(1634), ChrW(1635), ChrW(1636), ChrW(1637), ChrW(1638), ChrW(1639), ChrW(1640), ChrW(1641)}
 
       End Get
    End Property

    Protected ReadOnly Property EnglishGlyphs 
As IEnumerable(Of String)
 
       Get
            Return 
New List(Of StringFrom {"0""1""2""3""4""5""6""7""8""9"}
 
       End Get
    End Property

    Private 
Function TranslateToArabic(text As String) As String
        Dim sourceValue 
As String CType(textString)
 
       Dim sb As System.Text.StringBuilder CType(NothingSystem.Text.StringBuilder)
 
       Dim result As String CType(NothingString)
 
       If Not (String.IsNullOrEmpty(sourceValue)) Then
            sb 
= New System.Text.StringBuilder
            For j 
As Integer 0 To text.Length 1
                Dim s 
As String text(j)
 
               If EnglishGlyphs.Contains(sThen
                    Dim index 
As Integer EnglishGlyphs(s)
 
                   Dim arabicString As String ArabicGlyphs(index)
 
                   sb.Append(arabicString)
 
               End If
 
           Next
            result 
sb.ToString
        End 
If

 
       Return result
    End 
Function

 
   Public Function ToArabic(value As String) As String
        Dim valueString 
As String CType(valueString)
 
       If Not (String.IsNullOrEmpty(valueString)) Then
            Return TranslatetoArabic
(valueString)
 
       End If
 
       Return CType(NothingString)
 
   End Function

End Class 

كيف تستخدم الكلاس أعلاه
تقوم بتعريف متغير يعبر عن الكلاس ثم تقوم بتعريف متغير عن الرقم المراد تحويله من الانجليزية الي العربية ثم نقوم بتمرير هذا المتغير الي الدالة الموجودة بالكلاس
والكود التالي يوضح هذا ويوضخ ايضا كيف من الممكن ان نرسم الحروف علي الفورم


PHP كود :
 Dim shaper As New NumericsShaper
        Me
.Text shaper.ToArabic("010999999993456")
 
       Me.TextBox1.Text shaper.ToArabic("20450606060"


PHP كود :
  Dim arabicShaper As New NumericsShaper
        e
.Graphics.DrawString(arabicShaper.ToArabic("10003456789"), New Font(Me.Font.FontFamily20.0FFontStyle.Bold), Brushes.Red, New Point(1010)) 

أتمني أن يكون الموضوع مفيدا للبعض منكم
تقبلوا تحياتي

 


الملفات المرفقة
.rar   Test_RiverNileNumericsShaper.rar (الحجم : 62.88 ك ب / التحميلات : 236)
الرد }}}
#2
ومن العربية الإنجليزية
أو من لغة للغة أخرى
الرد }}}
تم الشكر بواسطة: asemshahen5
#3
السلام عليكم ورحمة الله وبركاته
ده كود كود يقرأ الاحرف اللاتينية فقط

PHP كود :
Try
 
          Dim sapt
           sapt 
CreateObject("sapi.spvoice")
 
          sapt.speak(TextBox1.Text)
 
      Catch ex As Exception

       End 
Try 
وده كود يقرا الحروف الانجليزيه

PHP كود :
Button1:
 
ep.speak(TextBox1.Text)

Form1:
 
Dim ep CreateObject("sapi.spvoice")


Button2:
نكتب End 
وده موضوه لصنع برنمج نطق الغه العربيه 
PHP كود :
http://vb4arb.com/vb/showthread.php?tid=34456 

يارب تستفدو من الاكود و الموضوع المرفق

ان اعرف اصنع برنمج تحويل من عربي ل انجليزي ولكن ب الاستعانه ب جوجل
و اسط طيع صنع برنمج تحويل العربيه ل عربيزي
ودي طريقه صنع برنمج ترجمه لو عيز او تحويل لغه
تحتاج ل RichTextBox2
وListBox2
وButton2
وده الكود المستخدم ب الكامل 
PHP كود :
Public Class Form1
    Dim S1 
As String "Created By Ayman Eldoktor Copyright© 2009         "
 
   Dim Counter1 As Integer 0

    Private Sub Form1_Load
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
        Try
            For i 
As Integer 0 To Google.API.Translate.LanguageUtility.LanguageCollection.Count 1

                Me
.ListBox1.Items.Add(Google.API.Translate.LanguageUtility.LanguageCollection(i))
 
               Me.ListBox2.Items.Add(Google.API.Translate.LanguageUtility.LanguageCollection(i))
 
           Next
            Me
.ListBox1.Items.RemoveAt(0)
 
           Me.ListBox2.Items.RemoveAt(0)

 
           Me.Label6.Text "You Have  " Me.ListBox1.Items.Count "  Language"
 
       Catch ex As Exception
            MessageBox
.Show(ex.Message"Error"MessageBoxButtons.OKMessageBoxIcon.Error)
 
       End Try

 
   End Sub
    Private Sub Button1_Click
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click
        Try
            Me
.RichTextBox1.Text Google.API.Translate.Translator.Translate(Me.RichTextBox2.TextMe.ListBox1.SelectedIndex 1Me.ListBox2.SelectedIndex 1)
 
       Catch ex As Exception
            MessageBox
.Show(ex.Message"Error"MessageBoxButtons.OKMessageBoxIcon.Error)
 
       End Try

 
   End Sub
    Private Sub Button2_Click
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button2.Click
        Try
            Dim X1 
As Int16
            Dim X2 
As Int16

            X1 
Me.ListBox1.SelectedIndex
            X2 
Me.ListBox2.SelectedIndex

            Me
.ListBox1.SelectedIndex X2
            Me
.ListBox2.SelectedIndex X1

        Catch ex 
As Exception
            MessageBox
.Show(ex.Message"Error"MessageBoxButtons.OKMessageBoxIcon.Error)
 
       End Try
 
   End Sub
    Private Sub T1_Tick
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles T1.Tick
        Try
            If Counter1 
S1.Length 1 Then
                Me
.Label5.Text ""
 
               Counter1 0
            End 
If
 
           Label5.Text += S1.Chars(Counter1)
 
           Counter1 += 1
        Catch ex 
As Exception
            MessageBox
.Show(ex.Message"Error"MessageBoxButtons.OKMessageBoxIcon.Error)
 
       End Try
 
   End Sub

    Private Sub Label6_Click
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Label6.Click

    End Sub
End 
Class 
يارب تستفدومن الموضوع
Heart قل لن يصيبنا الا ماكتب الله لنا Heart
الرد }}}
تم الشكر بواسطة: asemshahen5 , tryold , tryold



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم