איך ניתן לקבוע האם המחרוזת היא עברית?

| More
נוסף ב-28/07/2010 16:27 על ידי דניאל כץ

לפעמים כשאנחנו שולפים טקסט מהמסד נתונים אנו מוצאים את עצמינו מתלבטים האם להציג אותו בדף כltr או כrtl.

כמובן, ניתן לבדוק:

אבל כל זה עדיין לא ייתן מענה למחרוזות מעורבות כדוגמת אלו:

  • האות הראשונה בא"ב האנגלי היא 'a'.
  • 'a' היא האות הראשונה בא"ב האנגלי.
  • the first latter of the hebrew abc is 'א'.
  • 'א' is the first latter of the hebrew abc.

הפתרון שנראה לי אינטליגנטי יותר, מבוסס על רוב התווים ה"חזקים": אם הרוב הוא עברי אזי המחרוזת נחשבת עברית אם לא – לא. במקרה של תיקו, האלגוריתם יקבע ע"פ האות החזקה הראשונה.

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

המתודה:

 public  static  bool  IsHebrewString(this  string  value)
 {
     int  balance = 0;
     int  firstLetter = 0;
 
     for  (int  i = 0; i < value.Length; i++)
     {
         if  (char .IsLetter(value[i]))
         {
             if  ((value[i] >= (char )0x5D0) && (value[i] <= (char )0x5EA))
                 balance++;
             else 
                 balance--;
 
             if  (firstLetter == 0)
             {
                 firstLetter = balance > 0 ? 1 : -1;
             }
         }
 
         if  ((value.Length - (i + 1)) < Math .Abs(balance))
             break ;
     }
 
     if  (balance == 0)
         return  firstLetter > 0;
 
     return  balance > 0;
 }
 

הנה כמה דוגמאות ליעילות האלגוריתם:

 bool  test1 = "האות הראשונה בא\"ב האנגלי היא 'a'." .IsHebrewString(); // true 
 bool  test2 = "'a' היא האות הראשונה בא\"ב האנגלי." .IsHebrewString(); // true 
 bool  test3 = "the first latter in hebrew abc is 'א'." .IsHebrewString(); // false
 bool  test4 = "'א' is the first latter in hebrew abc." .IsHebrewString(); // false 
 bool  test5 = "אבגabc" .IsHebrewString(); // true 
 bool  test6 = "abcאבג" .IsHebrewString(); // false 
 bool  test7 = "()!^." .IsHebrewString(); // false 
 

Tags: , , , ,

.NET 4.0 | Tools | .NET

כלי העבודה שלי 2009

| More
נוסף ב-11/08/2009 22:20 על ידי דניאל כץ

כתיבת קוד

  • Visual Studio 2008 SP1 – סביבת העבודה המרכזית שלי, כאן אני יכול לכתוב C#, Vb.Net, JavaScript, Xml, Html, Css ועוד, ולקבל פידבק בזמן אמת על איכות הקוד שלי. הSP1 משפר ביצועים ומאפשר חיבור לSql Server 2008.
  • Visual Studio 2010 Beta1 – איזהו חכם?  - הרואה את הנולד. (F#, IronPython הנה אני בא.. בלנ"ד אסכם את כל החידושים של VS2010 במאמר נפרד לקראת שחרור Beta2)
  • Sql Server 2008 Express [חינמי] – שרת הנתונים המצוין מבית מיקרוסופט. הManagement Studion מאפשר לי לבנות מסדי נתונים במהירות, וכן לראות תכניות ביצוע (execution plan) עבור השאילתות שאני כותב ולייצא/להעלות את הנתונים לשרתים חיצוניים.
  • RegexBuddy – פשוט גדול מהחיים! התוכנה הופכת את חוויית הכתיבה של הביטויים הרגולריים מיגון לשמחה ומאבל ליום טוב. כולל אפשרויות יצירת קוד לפעולות בסיסיות עם Regex במספר שפות, וכן מאפשר דיבוג ויזואלי למדי.

Debugging

  • ANTS Profiler – מכיל את כל הכלים לבחינת הביצועים של אפליקציה דוט-נטית. הדרך הקלה ביותר למציאת צווארי בקבוק (bottlenecks) ודליפות זכרון (memory leaks).
  • Fiddler2 [חינמי] – דיבאגר לפרוטוקול הHTTP. בגרסתו האחרונה תומך גם בFirefox, ע"י צירוף בין השניים מאפשר לראשונה לעשות דיבוג על השרת Cassini של Visual Studio ולא רק על הIIS!
  • Firebug [חופשי] – כלי הכל יכול מסדרת התוספים לFirefox. מצוין למניפולציות על CSS וקבלת התוצאות בזמן אמת.
  • AnfiniL's Sql Express Profiler [חופשי] – מאפשר "להקשיב" לכל השאילתות שמבוצעות על שרת Sql Server נתון. השימוש העיקרי הוא לראות את השאילתות המיוצרות ע"י ADO.NET וLinq to Sql.

שונות

  • NET Reflector. [חינמי] – מציג קוד המקור (במספר שפות לבחירה) עבור הרכבות (Assembly) דוט-נטיות ומאפשר להתבונן במימוש הפנימי של מחלקות בBCL או בכל ספריה אחרת שלא עברה Obfuscation.
  • FileZilla FTP Client [חופשי] – לקוח FTP מצוין מבית Mozilla.

באינטרנט

  • codeplex.com – במה פתוחה מאת מיקרוסופט המיועדת לשיתוף קוד, וניהול פרויקטים בקוד פתוח. כאן תמצאו מגוון קודים מועילים וטכנולוגיות מתפתחות ותוכלו להשתתף בהתהוותם. בcodeplex נולדו טכנולוגיות כמו: ASP.NET MVC, IronPyton, ASP.NET 4.0, ASP.NET AJAX ועוד.
  • code.google.com – פלטפורמה נוספת לניהול פרויקטים בקוד פתוח. האתר קליל ומהיר. ואני מצאתי אותו כנח ביותר לפתיחת פרויקטים משלי.
  • Google Code Search – כלי שימושי מאוד לחיפוש קודים מן המוכן. כמובן שצריך קודם לדעת מה אתה מחפש כדי למצוא.. אה כן, עוד שימוש מועיל הוא לדעת כל מה שמעצבן מתכנתים.
  • browsershots.org – אם עוד לא שמעתם את השאלה: "מה לא בדקת את האתר בMSIE 4.0?!" זה רק אומר שאתם מסתובבים בחברת אנשים נורמאליים ולא טומן בחובו שום הבטחות לעתיד. קיצר, באתר הזה תוכלו לראות צילומי מסך מהאתר שלכם במגוון דפדפנים ובמגוון מערכות הפעלה בחינם.
  • המרת קוד Vb.Net ל#C – בתחילת השנה עברתי מלכתוב בעיקר בvb.net לשימוש עיקרי ב#C, התהליך די פשוט, אבל מצאתי את עצמי תקוע עם מלא קוד שימושי שכתוב בvb.net וכדי להכניס אותו לתוך פרויקט חדש (ב#C) בלי ליצור מדי הרבה בלגן אני נדרש לתרגם אותו.. אז הנה כלי שעושה את העבודה (בשני הכיוונים) אוטומטית (ב99% מהמקרים)!
  • javascriptcompressor.com – מצמצם קוד JavaScript ע"י הסרה של מעברי שורה ורווחים מהקוד, מועיל במיוחד לדחיסת קוד סטטי.

Tags: ,

Tools