Python的双向转写器
项目描述
Python的双向转写器。根据语言包中指定的规则(源脚本 <-> 目标脚本)转写(unicode)字符串。
附带以下语言的语言包(按字母顺序排列)
亚美尼亚语
保加利亚语(测试版)
格鲁吉亚语
希腊语
马其顿语(alpha)
蒙古语(alpha)
俄语
塞尔维亚语(alpha)
乌克兰语(测试版)
还包括一些有用的工具,例如
简单的lorem ipsum生成器,允许在所选语言中生成lorem ipsum。
文本的语言检测(如果可用适当的语言包)。
非拉丁文本的slugify函数。
先决条件
Python >=2.7, >=3.4, PyPy
安装
从PyPI使用最新稳定版安装。
pip install transliterate
或从BitBucket安装最新稳定版
pip install https://bitbucket.org/barseghyanartur/transliterate/get/stable.tar.gz
或从GitHub安装最新稳定版
pip install https://github.com/barseghyanartur/transliterate/archive/stable.tar.gz
就这些了。有关更多信息,请参阅使用和示例部分。
使用和示例
简单用法
必需导入
from transliterate import translit, get_available_language_codes
原始文本
text = "Lorem ipsum dolor sit amet"
转写为亚美尼亚语
print(translit(text, 'hy'))
# Լօրեմ իպսում դօլօր սիտ ամետ
转写为格鲁吉亚语
print(translit(text, 'ka'))
# ლორემ იპსუმ დოლორ სით ამეთ
转写为希腊语
print(translit(text, 'el'))
# Λορεμ ιψθμ δολορ σιτ αμετ
转写为俄语
print(translit(text, 'ru'))
# Лорем ипсум долор сит амет
可用的(已注册)语言列表
print(get_available_language_codes())
# ['el', 'hy', 'ka', 'ru']
反向转写是从目标语言到源语言的转写(在语言包中定义的术语)。在反向转写的情况下,您可以省略 language_code 属性,尽管如果您事先知道它,指定它会更快速。
从亚美尼亚语的反向转写
print(translit(u"Լօրեմ իպսում դօլօր սիտ ամետ", 'hy', reversed=True))
# Lorem ipsum dolor sit amet
省略了 language_code 参数的亚美尼亚语反向转写
print(translit(u"Լօրեմ իպսում դօլօր սիտ ամետ", reversed=True))
# Lorem ipsum dolor sit amet
从格鲁吉亚语的反向转写
print(translit(u"ლორემ იპსუმ დოლორ სით ამეთ", 'ka', reversed=True))
# Lorem ipsum dolor sit amet
省略了 language_code 参数的格鲁吉亚语反向转写
print(translit(u"ლორემ იპსუმ დოლორ სით ამეთ", reversed=True))
# Lorem ipsum dolor sit amet
从希腊语的反向转写
print(translit(u"Λορεμ ιψθμ δολορ σιτ αμετ", 'el', reversed=True))
# Lorem ipsum dolor sit amet
省略了 language_code 参数的希腊语反向转写
print(translit(u"Λορεμ ιψθμ δολορ σιτ αμετ", reversed=True))
# Lorem ipsum dolor sit amet
从俄语(西里尔文)的反向转写
print(translit(u"Лорем ипсум долор сит амет", 'ru', reversed=True))
# Lorеm ipsum dolor sit amеt
省略了 language_code 参数的俄语(西里尔文)反向转写
print(translit(u"Лорем ипсум долор сит амет", reversed=True))
# Lorem ipsum dolor sit amet
测试装饰器
from transliterate.decorators import transliterate_function
@transliterate_function(language_code='hy')
def decorator_test(text):
return text
print(decorator_test(u"Lorem ipsum dolor sit amet"))
# Լօրեմ իպսում դօլօր սիտ ամետ
处理大量数据
如果您知道应该为转写使用哪个语言包,尤其是在处理大量数据时,有道理按照以下方式获取转写函数
from transliterate import get_translit_function
translit_hy = get_translit_function('hy')
print(translit_hy(u"Լօրեմ իպսում դօլօր սիտ ամետ", reversed=True))
# Lorem ipsum dolor sit amet
print(translit_hy(u"Lorem ipsum dolor sit amet"))
# Լօրեմ իպսում դօլօր սիտ ամետ
注册自定义语言包
基础知识
如果您想同时使用捆绑的语言包和您自己的自定义语言包,请在注册您自己的语言包之前确保调用 autodiscover 函数。
from transliterate.discover import autodiscover
autodiscover()
然后是自定义语言包部分。
from transliterate.base import TranslitLanguagePack, registry
class ExampleLanguagePack(TranslitLanguagePack):
language_code = "example"
language_name = "Example"
mapping = (
u"abcdefghij",
u"1234567890",
)
registry.register(ExampleLanguagePack)
print(get_available_language_codes())
# ['el', 'hy', 'ka', 'ru', 'example']
print(translit(text, 'example'))
# Lor5m 9psum 4olor s9t 1m5t
您可以替换现有的语言包,使用您自己的语言包。默认情况下,现有语言包不会强制安装。
要强制安装语言包,在注册语言包时将 force 参数设置为 True。在这种情况下,如果已注册具有相同语言代码的语言包,则它将被替换;否则,如果语言包在注册表中不存在,则它将被注册。
registry.register(ExampleLanguagePack, force=True)
强制安装的语言包不能被替换或注销。
API 深入
有 7 个类属性,您可以在语言包中使用,其中 4 个是各种类型的映射。
映射
mapping(元组):一个包含两个字符串的元组,它简单地表示源语言字符到目标语言的映射。例如,如果您的源语言是拉丁语,并且您想将“a”、“b”、“c”、“d”和“e”字符转换为俄语西里尔文中的相应字符,您的映射将如下所示
mapping = (u"abcde", u"абцде")
示例(来自希腊语语言包)。
mapping = ( u"abgdezhiklmnxoprstyfwuABGDEZHIKLMNXOPRSTYFWU", u"αβγδεζηικλμνξοπρστυφωθΑΒΓΔΕΖΗΙΚΛΜΝΞΟΠΡΣΤΥΦΩΘ", )
reversed_specific_mapping(元组):在制作反向翻译时,仍然使用 mapping 属性,但在某些情况下需要提供额外的规则。这个属性(reversed_specific_mapping)就是为了这种情况。进一步地,与 mapping 相似。
示例(来自希腊语语言包)。
reversed_specific_mapping = ( u"θΘ", u"uU" )
pre_processor_mapping(字典):从源语言到目标语言的映射字典。仅在源语言中的一个字符在目标语言中应该由多个字符表示的情况下使用此功能。
示例(来自希腊语语言包)。
pre_processor_mapping = { u"th": u"θ", u"ch": u"χ", u"ps": u"ψ", u"TH": u"Θ", u"CH": u"Χ", u"PS": u"Ψ", }
reversed_specific_pre_processor_mapping:与 pre_processor_mapping 相同,但在反向翻译中使用。
示例(来自亚美尼亚语语言包)
reversed_specific_pre_processor_mapping = { u"ու": u"u", u"Ու": u"U" }
附加
character_ranges(元组):字符范围(Unicode 表)的元组。用于语言检测。仅在将 detectable 属性设置为 True 时使用。请注意,语言检测(或者说脚本检测)非常基础,仅基于字符。
detectable(布尔值):如果设置为 True,语言包将用于自动语言检测。
使用 lorem ipsum 生成器
请注意,由于原始的lorem-ipsum-generator包与Python 3不兼容,当与Python 3一起使用时,transliterate使用其自己的简化回退lorem ipsum生成器(它仍然可以完成任务)。
必需导入
from transliterate.contrib.apps.translipsum import TranslipsumGenerator
生成亚美尼亚语段落
g_am = TranslipsumGenerator(language_code='hy')
print(g_am.generate_paragraph())
# Մագնա տրիստիքուե ֆաուցիբուս ֆամես նետուս նետուս օրցի մաուրիս,
# սուսցիպիտ. Դապիբուս րիսուս սեդ ադիպիսցինգ դիցտում. Ֆերմենտում ուրնա
# նատօքուե ատ. Uլտրիցես եգետ, տացիտի. Լիտօրա ցլասս ցօնուբիա պօսուերե
# մալեսուադա ին իպսում իդ պեր վե.
生成格鲁吉亚语句子
g_ka = TranslipsumGenerator(language_code='ka')
print(g_ka.generate_sentence())
# გგეთ ყუამ არსუ ვულფუთათე რუთრუმ აუთორ.
生成希腊语句子
g_el = TranslipsumGenerator(language_code='el')
print(g_el.generate_sentence())
# Νεc cρασ αμετ, ελιτ vεστιβθλθμ εθ, αενεαν ναμ, τελλθσ vαριθσ.
生成俄语(西里尔字母)句子
g_ru = TranslipsumGenerator(language_code='ru')
print(g_ru.generate_sentence())
# Рисус cонсеcтетуер, фусcе qуис лаореет ат ерос пэдэ фелис магна.
语言检测
必需导入
from transliterate import detect_language
检测亚美尼亚文本
detect_language(u'Լօրեմ իպսում դօլօր սիտ ամետ')
# hy
检测格鲁吉亚文本
detect_language(u'ლორემ იპსუმ დოლორ სით ამეთ')
# ka
检测希腊文本
detect_language(u'Λορεμ ιψθμ δολορ σιτ αμετ')
# el
检测俄语(西里尔字母)文本
detect_language(u'Лорем ипсум долор сит амет')
# ru
Slugify
必需导入
from transliterate import slugify
对亚美尼亚文本进行Slugify
slugify(u'Լօրեմ իպսում դօլօր սիտ ամետ')
# lorem-ipsum-dolor-sit-amet
对格鲁吉亚文本进行Slugify
slugify(u'ლორემ იპსუმ დოლორ სით ამეთ')
# lorem-ipsum-dolor-sit-amet
对希腊文本进行Slugify
slugify(u'Λορεμ ιψθμ δολορ σιτ αμετ')
# lorem-ipsum-dolor-sit-amet
对俄语(西里尔字母)文本进行Slugify
slugify(u'Лорем ипсум долор сит амет')
# lorem-ipsum-dolor-sit-amet
缺少语言包?
缺少您自己语言的语言包?通过制作一个并贡献给项目,它将出现在新版本中(该版本将很快发布)。
编写文档
保持以下层次结构。
=====
title
=====
header
======
sub-header
----------
sub-sub-header
~~~~~~~~~~~~~~
sub-sub-sub-header
^^^^^^^^^^^^^^^^^^
sub-sub-sub-sub-header
++++++++++++++++++++++
sub-sub-sub-sub-sub-header
**************************
许可证
GPL 2.0/LGPL 2.1
支持
对于任何问题,请联系作者部分中给出的电子邮件。