• בלוג
  • בואו נתרגם משפטים עם Python ו Google Translate

בואו נתרגם משפטים עם Python ו Google Translate

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

נו, תשמחו לשמוע שחלק מהיתרונות בעבודה עם שפה פופולרית כמו פייתון הם שתמיד יש מישהו שכבר בנה משהו נחמד יותר. במקרה של גוגל טרנסלייט למישהו הזה קוראים סוהון האן, הוא קוריאני והוא כתב ספריה קטנה שמשתמשת בגוגל טרנסלייט בדיוק כמו שהדפדפן שלכם היה משתמש בה, כלומר בדילוג על ה API Keys וכל המסביב. החיסרון היחיד של הספריה הוא שאם תפנו יותר מדי פעמים גוגל תזהה את זה ותחסום את ה IP שלכם. אבל בשביל המשחקים שלנו הספריה של האן תעבוד מעולה.

אם התקנתם כבר פייתון תוכלו להקליד אותה בסביבה שלכם ואם לא אז מיד אחרי הקוד תמצאו את הקישור לרפליט:

from googletrans import Translator

translator = Translator()
texts = ['אני אוהב שוקולד', 'ועוגות גבינה', 'וארטיק וסוכריות', 'ותות גינה']

translations = translator.translate(texts)
for item in translations:
  print(item.text)

אפשר למצוא את התוכנית ולשחק איתה בשידור חי ברפליט שבקישור https://repl.it/@ynonp/python2#main.py.

ובשביל להריץ אותה אצלכם על המכונה תצטרכו להתקין גם את החבילה googletrans עם הפקודה:

python -m pip install --user googletrans

הרצה של התוכנית תדפיס לנו על המסך את התרגום הלא מדויק הבא:

I love chocolate
And cheesecakes
And vinegar and candies
And garden strawberries

מה אני אגיד - לא בטוח שיהונתן גפן היה חותם על התרגום הזה. ובכל זאת כיף שיש את גוגל.

1. איך זה עובד - שורה 1

from googletrans import Translator

התוכנית מתחילה בפקודות import. פקודת import היא שטוענת ספריה חיצונית ובמקרה שלנו זו ספריית החיבור ל Google Translate שכתב סוהון האן. לספריה קוראים googletrans ואנחנו רוצים לקחת ממנה את הפונקציה הראשית שנקראת Translator.

2. אתחול משתנים בשורות 2 ו-3

translator = Translator()
texts = ['אני אוהב שוקולד', 'ועוגות גבינה', 'וארטיק וסוכריות', 'ותות גינה']

הבלוק הבא מאתחל שני משתנים: המשתנה translator והמשתנה texts. כל אחד משני המשתנים ישמור ערך מסוג שונה, וכאן אנחנו רואים מאפיין נחמד של Python: ב Python למשתנה אין סוג, רק לדבר שנשמר בו יש.

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

המשתנה השני texts הוא קצת יותר מעניין כי הוא שומר משהו שנמצא בסוגריים מרובעים. ב Python סוגריים מרובעים הם דרך להגדיר רשימה של ערכים, ובמקרה שלנו זו רשימה של טקסטים. כל טקסט מייצג שורה נוספת מהשיר.

3. התרגום - שורה 4

translations = translator.translate(texts)

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

4. הדפסת התוצאות - שורות 5 ו-6

for item in translations:
  print(item.text)

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

5. מה הלאה

אפשר להעביר לפונקציה translate גם פרמטר בשם dest שיקבע לאיזה שפה רוצים לתרגם. בדוגמא מהתיעוד של הספריה אנחנו מוצאים:

translator.translate('안녕하세요.', dest='ja')

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