Tôi đang nhận được ngoại lệ ____5 khi cố gắng sử dụng string.maketrans
trong Python
. Tôi không nản lòng với loại lỗi này trong mã sau [GIST]:
# -*- coding: utf-8 -*-
import string
def translit1[string]:
""" This function works just fine """
capital_letters = {
u'А': u'A',
u'Б': u'B',
u'В': u'V',
u'Г': u'G',
u'Д': u'D',
u'Е': u'E',
u'Ё': u'E',
u'Ж': u'Zh',
u'З': u'Z',
u'И': u'I',
u'Й': u'Y',
u'К': u'K',
u'Л': u'L',
u'М': u'M',
u'Н': u'N',
u'О': u'O',
u'П': u'P',
u'Р': u'R',
u'С': u'S',
u'Т': u'T',
u'У': u'U',
u'Ф': u'F',
u'Х': u'H',
u'Ц': u'Ts',
u'Ч': u'Ch',
u'Ш': u'Sh',
u'Щ': u'Sch',
u'Ъ': u'',
u'Ы': u'Y',
u'Ь': u'',
u'Э': u'E',
u'Ю': u'Yu',
u'Я': u'Ya'
}
lower_case_letters = {
u'а': u'a',
u'б': u'b',
u'в': u'v',
u'г': u'g',
u'д': u'd',
u'е': u'e',
u'ё': u'e',
u'ж': u'zh',
u'з': u'z',
u'и': u'i',
u'й': u'y',
u'к': u'k',
u'л': u'l',
u'м': u'm',
u'н': u'n',
u'о': u'o',
u'п': u'p',
u'р': u'r',
u'с': u's',
u'т': u't',
u'у': u'u',
u'ф': u'f',
u'х': u'h',
u'ц': u'ts',
u'ч': u'ch',
u'ш': u'sh',
u'щ': u'sch',
u'ъ': u'',
u'ы': u'y',
u'ь': u'',
u'э': u'e',
u'ю': u'yu',
u'я': u'ya'
}
translit_string = ""
for index, char in enumerate[string]:
if char in lower_case_letters.keys[]:
char = lower_case_letters[char]
elif char in capital_letters.keys[]:
char = capital_letters[char]
if len[string] > index+1:
if string[index+1] not in lower_case_letters.keys[]:
char = char.upper[]
else:
char = char.upper[]
translit_string += char
return translit_string
def translit2[text]:
""" This method should be more easy to grasp,
but throws exception:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-51: ordinal not in range[128]
"""
symbols = string.maketrans[u"абвгдеёзийклмнопрстуфхъыьэАБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЬЭ",
u"abvgdeezijklmnoprstufh'y'eABVGDEEZIJKLMNOPRSTUFH'Y'E"]
sequence = {
u'ж':'zh',
u'ц':'ts',
u'ч':'ch',
u'ш':'sh',
u'щ':'sch',
u'ю':'ju',
u'я':'ja',
u'Ж':'Zh',
u'Ц':'Ts',
u'Ч':'Ch'
}
for char in sequence.keys[]:
text = text.replace[char, sequence[char]]
return text.translate[symbols]
if __name__ == "__main__":
print translit1[u"Привет"] # prints Privet as expected
print translit2[u"Привет"] # throws exception: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-51: ordinal not in range[128]
Dấu vết ban đầu:
Traceback [most recent call last]:
File "translit_error.py", line 124, in
print translit2[u"Привет"] # throws exception: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-51: ordinal not in range[128]
File "translit_error.py", line 103, in translit2
u"abvgdeezijklmnoprstufh'y'eABVGDEEZIJKLMNOPRSTUFH'Y'E"]
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-51: ordinal not in range[128]
Ý tôi là, tại sao Python string.maketrans
cố gắng sử dụng bảng ascii
? Và làm thế nào là chữ cái tiếng Anh nằm ngoài phạm vi 0-128?
$ python -c "print ord[u'A']"
65
$ python -c "print ord[u'z']"
122
$ python -c "print ord[u\"'\"]"
39
Sau vài giờ tôi cảm thấy muốn hoàn toàn kiệt sức để giải quyết vấn đề này.
Ai đó có thể nói những gì đang xảy ra và làm thế nào để sửa chữa nó?
Máy tính luôn đấu tranh với việc cung cấp các bản dịch được đánh bóng của văn bản nước ngoài, nghĩa là cho đến khi sự ra đời của học tập sâu. Sử dụng công nghệ này, độ chính xác và chất lượng dịch thuật đã được cải thiện đáng kể. Vấn đề duy nhất là việc sử dụng đúng cách công nghệ này có thể khó khăn và tốn thời gian. Hầu hết mọi người không có quyền truy cập vào card đồ họa cấp công nghiệp hoặc tuần để thực hiện đào tạo AI thích hợp. Rất may, quá trình này chỉ cần được thực hiện một lần và tôi đã chăm sóc điều đó cho bạn. Hôm nay tôi sẽ chứng minh cách truy cập AI này ngay lập tức cho các bản dịch tiếng Nga sang tiếng Anh bằng API.
Vì vậy, hãy để bắt đầu bằng cách cài đặt máy khách API API này bằng cách cài đặt PIP.
pip install git+//github.com/Cloudmersive/Cloudmersive.APIClient.Python.NLP.git
Và bước tiếp theo là gọi chức năng ngôn ngữ_translation_translate_rus_to_eng. Điều này sẽ lấy một đối tượng đầu vào chứa chuỗi văn bản của chúng tôi để được dịch.
from __future__ import print_functionimport timeimport cloudmersive_nlp_api_clientfrom cloudmersive_nlp_api_client.rest import ApiExceptionfrom pprint import pprint# Configure API key authorization: Apikeyconfiguration = cloudmersive_nlp_api_client.Configuration[]configuration.api_key['Apikey'] = 'YOUR_API_KEY'# Uncomment below to setup prefix [e.g. Bearer] for API key, if needed# configuration.api_key_prefix['Apikey'] = 'Bearer'# create an instance of the API classapi_instance = cloudmersive_nlp_api_client.LanguageTranslationApi[cloudmersive_nlp_api_client.ApiClient[configuration]]input = cloudmersive_nlp_api_client.LanguageTranslationRequest[] # LanguageTranslationRequest | Input translation requesttry:# Translate Russian to English text with Deep Learning AIapi_response = api_instance.language_translation_translate_rus_to_eng[input]pprint[api_response]except ApiException as e:print["Exception when calling LanguageTranslationApi->language_translation_translate_rus_to_eng: %s\n" % e]
Bây giờ chạy nó và bạn sẽ nhận được bản dịch của bạn. Thật dễ dàng như thế nào! Quá nhanh và dễ dàng hơn nhiều so với việc cố gắng đối phó với việc học sâu sắc bản thân. Trong cùng một thư viện này, bạn cũng sẽ tìm thấy các chức năng để dịch tiếng Anh trở lại tiếng Nga, cũng như các ngôn ngữ khác.