【问题标题】:Convert ISO 639-1 to ISO 639-2 [closed]将 ISO 639-1 转换为 ISO 639-2 [关闭]
【发布时间】:2015-12-16 01:35:28
【问题描述】:

我需要获取ISO 639-1 code,例如en-GB,并将其转换为ISO 639-2 code,例如eng

我查看了以下库,但没有找到在其中任何一个库中执行该转换的记录方法:

我错过了什么吗?也就是说 - 这些库中的任何一个都可以做到这一点吗?

【问题讨论】:

    标签: python iso-639


    【解决方案1】:

    您可以使用pycountry 来满足您的需求。请注意,如果您想要相反的情况(ISO 639-2 到 ISO 639-1),它可能并不总是有效,因为虽然应该始终存在从 ISO 639-1 语言代码到 ISO 639-2 的映射,但反过来是不保证。

    import pycountry
    
    code = 'en-GB'
    
    # ISO 639-1 codes are always 2-letter codes, so you have to take
    # the first two characters of the code
    
    # This is a safer way to extract the country code from something
    # like en-GB (thanks ivan_pozdeev)
    lang_code = code[:code.index('-')] if '-' in code else code
    
    lang = pycountry.languages.get(iso639_1_code=lang_code)
    print("ISO 639-1 code: " + lang.iso639_1_code)
    print("ISO 639-2 code: " + lang.iso639_2T_code)
    print("ISO 639-3 code: " + lang.iso639_3_code)
    

    上面应该打印出来:

    ISO 639-1 code: en
    ISO 639-2 code: eng
    ISO 639-3 code: eng
    

    【讨论】:

    • 谢谢,这很有帮助。 Wikipedia article I linked 让我感到困惑:尽管它的措辞谈到了 ISO 639-1 “alpha-2 代码”和“双字母代码”,但该表显示字符串 en-GB 作为“ISO 639- 1 个代码”,这让我认为整个字符串是有效的 ISO 639-1 代码,而不仅仅是字符串的前两个字母。这反过来就是为什么我认为我列出的库可能无法执行我需要的转换。现在开始阅读 BCP 47!
    • code[:code.index('-')] 提取第一部分似乎更可靠(因此,如果不是 2 个字母,代码会阻塞)。如果已经只有一个部分,它将无法正常工作。 code[:code.index('-')] if '-' in code else code 之类的东西适用于所有情况。
    • @ivan_pozdeev - 谢谢你,我已经更新了我的代码以包含该行。
    • 还不错,还有9.2Mb!所以我使用了@Ashwini_Chaudhary (*.com/a/16253118/1937033) 提到的 csv,只有 9.6Kb:geohack.net/gis/wikipedia-iso-country-codes.csv
    【解决方案2】:

    List of ISO 639-2 codes 在 Wikipedia 上有一个指定对应关系的表格。由于它不是 1-1 映射,因此并非总是可以进行转换。

    确实错过了一些东西 - 很可能使用您指定的库进行转换。

    内置语言转换器(alpha2、alpha3b、alpha3t、名称、范围、 类型和打开字幕):

    >>> language = babelfish.Language('por', 'BR')
    >>> language.alpha2
    'pt'
    <...>
    >>> babelfish.Language.fromalpha3b('fre')
    <Language [fr]>
    
    • langcodes 专为不同的任务量身定制 - 识别和匹配语言,无论标准如何。因此,您可以提取与您的初始代码相关的所有代码 - 在不同程度上 - 但它不会告诉您它们属于哪些标准。

    • pycountrybabelfish 类似,被the other answer 覆盖。

    【讨论】:

    • 谢谢!是的,我确实错过了一些东西。我的评论 here 解释了它是什么。
    • @sampablokuper 好吧,我确实错过了您的困惑 - 因为我一开始就没有它(*表格列出了两个字母的代码 - 两个字母代码是!)。
    • ivan_pozdeev,对!不过,这取决于查阅的*表格:)抱歉,我的困惑令人困惑;)