64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
|
|
"""Translate arbitrary text into an arbitrary target language.
|
||
|
|
|
||
|
|
A few years ago, building this would have meant either licensing Google
|
||
|
|
Translate, or training your own sequence-to-sequence model per language
|
||
|
|
pair. Here `target_language` is just a string the model reads.
|
||
|
|
"""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from ai_function import ask
|
||
|
|
|
||
|
|
|
||
|
|
def ai_translate(text: str, target_language: str) -> str:
|
||
|
|
return ask(
|
||
|
|
"Translate the sentence into the target language. Output only the "
|
||
|
|
"translation, with no quotes and no explanation.\n"
|
||
|
|
"Target language: French\n"
|
||
|
|
'Sentence: "Where is the train station?"\n'
|
||
|
|
"Translation: Où est la gare ?\n"
|
||
|
|
"Target language: Japanese\n"
|
||
|
|
'Sentence: "I would like a cup of coffee."\n'
|
||
|
|
"Translation: コーヒーを一杯ください。\n"
|
||
|
|
f"Target language: {target_language}\n"
|
||
|
|
f'Sentence: "{text}"\n'
|
||
|
|
"Translation: "
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def _canned_examples() -> None:
|
||
|
|
sentence = "The library closes at six o'clock on Sundays."
|
||
|
|
print(f"original: {sentence}\n")
|
||
|
|
for lang in ["Spanish", "German", "Mandarin Chinese", "Brazilian Portuguese"]:
|
||
|
|
print(f"{lang:>22}: {ai_translate(sentence, lang)}")
|
||
|
|
|
||
|
|
|
||
|
|
def _interactive() -> None:
|
||
|
|
print("\n--- interactive ---")
|
||
|
|
print("Translate your own text. 'q' as the text to quit.\n")
|
||
|
|
while True:
|
||
|
|
try:
|
||
|
|
text = input("text > ").strip()
|
||
|
|
except (EOFError, KeyboardInterrupt):
|
||
|
|
print()
|
||
|
|
return
|
||
|
|
if text.lower() in {"q", "quit", "exit"}:
|
||
|
|
return
|
||
|
|
if not text:
|
||
|
|
continue
|
||
|
|
try:
|
||
|
|
lang = input("target language > ").strip()
|
||
|
|
except (EOFError, KeyboardInterrupt):
|
||
|
|
print()
|
||
|
|
return
|
||
|
|
if not lang:
|
||
|
|
print(" no target language, skipping")
|
||
|
|
continue
|
||
|
|
print(f"original: {text}")
|
||
|
|
print(f"translation: {ai_translate(text, lang)}\n")
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
_canned_examples()
|
||
|
|
_interactive()
|