Pythonインスタンス(1)-中国語のピンイン

2866 ワード

最近、スクリプトを作成するには、まず多くのプラットフォーム名を印刷する必要がありますが、プラットフォームがますます多くなるにつれて、直接表示するのは少し乱れています.プラットフォームの最初の字のアルファベットで分類してから印刷したいと思っていますが、一部のプラットフォームは漢字の名前で、これはまず漢字を通じてピンインを得る必要があります.ネット上の方法を総合的に参照すると,gbk番号でピンインに対応することが多く,アルゴリズムは面倒でutf-8符号化をサポートしていないことが分かった.すべての中国語対応ピンイン(常用漢字は1万以上なので、速度面ではあまり影響しない)を持つライブラリがあれば、漢字で必要なピンイン文字を返すことができます.ネットで検索している間にワードライブラリが見つかりました(https://github.com/haiwen/seahub/blob/master/seahub/convert-utf-8.txt).
図のように.例えば「李」の字、「李li 3」は漢字「李」を表し、ピンインは「li」で、音調は3(ここではピンインしか必要ありません).具体的には、次のようになります.
    def convert(ch):
        """              ,        ,          .
                    ,        ,      (         ,     )
        """
        length = len(' ') #         ,utf-8,    3  .bg2312,    2  
        intord = ord(ch[0:1])
        if (intord >= 48 and intord <= 57):
            return ch[0:1]
        if (intord >= 65 and intord <=90 ) or (intord >= 97 and intord <=122):
            return ch[0:1].lower()
        ch = ch[0:length] #          
        with open(r'./conf/convert-utf-8.txt') as f:
            for line in f:
                if ch in line:
                    return line[length:len(line)-2]

関数の結果は次のとおりです.
>>> convert(' ')
'jie'
>>> convert('1')
'1'
>>> convert('a')
'a'
>>> convert('B')
'b'
>>> convert('  ')
'guang'
>>> convert(' ')
'han'

len関数で漢字占有文字数を取得するのは、linuxとwindowsの互換性を維持するためです.