跳转到主要内容

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

支持

对于任何问题,请联系作者部分中给出的电子邮件。

作者

Artur Barseghyan <artur.barseghyan@gmail.com>

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面