עבור לתוכן

אלגוריתם להיפוך טקסט עברי

Featured Replies

פורסם

אני מנסה לבנות סקריפט להיפוך טקסט עברי.

כרגע השיטה שבה הוא עובד היא כדלקמן: הוא מקבל מחרוזת כלשהי כקלט. ישנה לולאה שעוברת לאורכה וברגע שהיא מאתרת אות בעברית, היא בודקת מראש(באמצעות לולאה מקוננת) את אורכה (סופרת את מספר התווים הרצופים בעברית). לאחר מכן מתבצעת החלפת האותיות במילה שנמצאה, והלולאה ממשיכה הלאה.

בקיצור, הסקריפט מחליף את האותיות בכל מילה בעברית בנפרד במחרוזת. אך מתעוררים כאן 2 בעיות:

1. אם נכניס קלט שכזה: "ג'מיל אוהב בנות" אז המילה ג'מיל לא תתהפך כראוי, כי הסקריפט יתייחס לקלט המדובר כשתי מילים נפרדות(במקום לקבל "לימ'ג" נקבל "ג'לימ")

2. ההיפוך מתבצע על המילים עצמן ולא על כל השורה. לכן הפלט לא יחליף את סדר המילים. כלומר, "מה נשמע" יניב "המ עמשנ" ולא "עמשנ המ".

אשמח לקבל רעיונות כיצד ניתן בדרכי להתגבר על שני המכשולים הללו. גם רעיון לאלגוריתם אחר יתקבל בברכה, אם כי הייתי מעדיף להמשיך עם מה שעשיתי.

פורסם

פונקציה שרשמתי ב VB לפני כמה שנים טובות.

Private Function OpIT(sGetString As String) As String
Dim I As Integer
Dim a, b As String
Dim NonHeb As String
Dim ascVal As Integer

NonHeb = ""
For I = o To Len(sGetString)
b = Mid(sGetString, 1, Len(sGetString) - I)
a = Right(b, 1)

If a <> "" Then
ascVal = Asc(a)
If (ascVal >= 33 And ascVal <= 58) Or (ascVal >= 61 And ascVal <= 95) Or (ascVal >= 97 And ascVal <= 122) Or (ascVal = 123) Then
NonHeb = a & NonHeb
Else
If Not NonHeb = "" Then
OpIT = OpIT & NonHeb & a
NonHeb = ""
Else
OpIT = OpIT & a
End If
End If
End If
Next

If Not NonHeb = "" Then OpIT = OpIT & NonHeb

End Function

פורסם

מה הפואנטה בלהחליף את המילים? שטקסט עברי מתהפך לא רק האותיות בתוך המילים מתהפכות?

בכל מקרה לגבי ה- ' אתה צריך להחשיב אותו כאות עברית... כמו כן כל סימון כמו -,",.,: וכו'

אם אתה בכל מקרה רוצה שהתוכנה גם תהפוך את המילים - למה אתה לא הופך כל כל הקלט בלי קשר למילה עצמה[

"גיא הלך לים" -> "םיל ךלה איג" זה מה שאתה רוצה? זה פשוט להפוך את המערך של האותיות (אם זו שפה שמתיחסת ל string כמערך).

בכל מקרה האלגוריתם צריך לעבור על האותיות - כשמוצא אות עברית להתחיל להכניס אותם למערך אותיות - כשמוצא אותו לועזית - להפוך את מערך האותיות - ולהחזיר אותו לקלט המקורי באותו מקום שהתחלת לחתוך...

פורסם

זה בדיוק מה שהקוד שלי עושה.

אות אחרונה בטקסט המקורי הופכת להיות ראשונה בטקסט החדש וכו'.

הפונקציה גם מזהה אותיות לועזיות ומספרים ולא הופכת אותם.

פורסם

רגע, אתה רוצה שהקוד שלך לא יהפוך את סדר המילים או כן יהפוך את סדר המילים?

פורסם
  • מחבר

זה בסדר, הבנתי למה התכוונתם ואתם צודקים, תודה על העזרה :)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים