Python で、漢字文から音読み文に転換します。

In [ ]:
# 漢字から音読みに変換する対応表
kanji_to_onyomi = {
    '神': 'シン',
    '是': 'ゼ',
    '信': 'シン',
    '実': 'ジツ',
    '的': 'テキ',
    '你': 'ジ',
    '們': 'モン',
    '乃': 'ナイ',
    '是': 'ゼ',
    '爲': 'イ',
    '他': 'タ',
    '所': 'ショ',
    '召': 'ショウ',
    '進': 'シン',
    '入': 'ニュウ',
    '了': 'リョウ',
    '儿': 'ジン',
    '子': 'ス',
    '我': 'ガ',
    '主': 'シュ',
    '耶': 'ヤ',
    '穌': 'ソ',
    '基': 'キ',
    '督': 'トク',
    '的': 'テキ',
    '交': 'コウ',
    '通': 'ツウ',
    # 他の漢字と音読みの対応を追加
}

def convert_to_onyomi_sentence(input_sentence):
    # 入力された漢字文を音読み文に変換する関数
    words = list(input_sentence)  # 文を単語に分割
    onyomi_sentence = []

    for word in words:
        onyomi = kanji_to_onyomi.get(word, word)  # 辞書から音読みを取得、なければそのまま単語を使用
        onyomi_sentence.append(onyomi)

    return ''.join(onyomi_sentence)

# 漢字文を入力
input_sentence = '神是信実的,你們乃是爲他所召,進入了他儿子我們主耶穌基督的交通。'
# 音読み文に変換
result = convert_to_onyomi_sentence(input_sentence)
print(result)  # 出力: "シンゼシンジツテキ,ジモンナイゼイタショショウ,シンニュウリョウタジンスガモンシュヤソキトクテキコウツウ。"
シンゼシンジツテキ,ジモンナイゼイタショショウ,シンニュウリョウタジンスガモンシュヤソキトクテキコウツウ。

Janome で、漢字文から音読み文に転換します。

Janome を使って漢字文から音読み文に変換するには、まず漢字を形態素に分割し、それぞれの形態素に対応する音読みを取得する必要があります。ただし、Janome 自体は音読みを直接提供する機能はありません。そのため、別途辞書や API などから音読みを取得する必要があります。

以下は、辞書を使用して漢字文から音読み文に変換するサンプルコードです。このコードでは、kanji_to_onyomi という辞書に漢字と対応する音読みを登録し、入力された漢字文を音読み文に変換します。

In [ ]:
%%bash
pip install janome
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: janome in /home/jupyter-saintway/.local/lib/python3.9/site-packages (0.5.0)

Janome を使った日本語形態素解析の実践

このコードでは、Janome の Tokenizer を使って日本語の形態素解析を行い、文を形態素に分割しています。それぞれの形態素には、表層形(原形)と品詞などの情報が含まれています。

上記のコードを実行すると、入力した日本語の文が形態素に分割されて、表層形と品詞の情報が表示されるでしょう。Janome はシンプルで使いやすいライブラリなので、日本語の形態素解析に便利です。

In [ ]:
from janome.tokenizer import Tokenizer

# 漢字から音読みに変換する対応表(例としていくつかの漢字と音読みを登録)
kanji_to_onyomi = {
    '神': 'シン',
    '是': 'ゼ',
    '信': 'シン',
    '実': 'ジツ',
    '的': 'テキ',
    '你': 'ジ',
    '們': 'モン',
    '乃': 'ナイ',
    '是': 'ゼ',
    '爲': 'イ',
    '他': 'タ',
    '所': 'ショ',
    '召': 'ショウ',
    '進': 'シン',
    '入': 'ニュウ',
    '了': 'リョウ',
    '儿': 'ジン',
    '子': 'ス',
    '我': 'ガ',
    '主': 'シュ',
    '耶': 'ヤ',
    '穌': 'ソ',
    '基': 'キ',
    '督': 'トク',
    '的': 'テキ',
    '交': 'コウ',
    '通': 'ツウ',
    '信実': 'シンジツ',
    '進入': 'シンニュウ',
    '交通': 'コウツウ',
    # 他の漢字と音読みの対応を追加
}

def get_onyomi(token):
    # 漢字を対応表から検索し、音読みを取得する関数
    return kanji_to_onyomi.get(token.surface, token.surface)

def convert_to_onyomi_sentence(input_sentence):
    # 入力された漢字文を音読み文に変換する関数
    t = Tokenizer()
    tokens = t.tokenize(input_sentence)
    # print([token.surface for token in tokens])
    onyomi_sentence = []

    for token in tokens:
        onyomi = get_onyomi(token)
        onyomi_sentence.append(onyomi)
    print(onyomi_sentence)

    return ''.join(onyomi_sentence)

# 漢字文を入力
input_sentence = '神是信実的,你們乃是爲他所召,進入了他儿子我們主耶穌基督的交通。'
# 音読み文に変換
result = convert_to_onyomi_sentence(input_sentence)
print(result)  # 出力: 'シンゼシンジツテキ,ジモンナイゼイタショショウ,シンニュウリョウタジンスガモンシュヤソキトクテキコウツウ。'
['シン', 'ゼ', 'シンジツ', 'テキ', ',', '你們乃', 'ゼ', '爲他所', 'ショウ', ',', 'シンニュウ', 'リョウ', 'タ', '儿子我', '們主耶', '穌基督', 'テキ', 'コウツウ', '。']
シンゼシンジツテキ,你們乃ゼ爲他所ショウ,シンニュウリョウタ儿子我們主耶穌基督テキコウツウ。

MeCab で、UniDic で、漢字文から音読み文に転換します。

MeCab を使用して UniDic 辞書を利用し、漢字文から音読み文に変換するためには、以下の手順に従ってください。まず、Python で MeCab を使えるようにしてから、サンプルコードを提供します。


MeCab と UniDic のインストール

In [ ]:
%%bash
pip install unidic-lite
pip install mecab-python3
Defaulting to user installation because normal site-packages is not writeable
Collecting unidic-lite
  Downloading unidic-lite-1.0.8.tar.gz (47.4 MB)
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'done'
Building wheels for collected packages: unidic-lite
  Building wheel for unidic-lite (setup.py): started
  Building wheel for unidic-lite (setup.py): finished with status 'done'
  Created wheel for unidic-lite: filename=unidic_lite-1.0.8-py3-none-any.whl size=47658836 sha256=d354e3491cb194fab1fab224d3595dfa0419a6d75edec0bdd76fad8f60ec4d3a
  Stored in directory: /home/jupyter-saintway/.cache/pip/wheels/56/9c/4f/2c115e896b4b6c584039ca19de3581d333856782ef108cdc5c
Successfully built unidic-lite
Installing collected packages: unidic-lite
Successfully installed unidic-lite-1.0.8
Defaulting to user installation because normal site-packages is not writeable
Collecting mecab-python3
  Downloading mecab_python3-1.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (581 kB)
Installing collected packages: mecab-python3
Successfully installed mecab-python3-1.0.6

MeCab と UniDic を使用した漢字文の音読み変換

このコードでは、MeCab の Tagger に UniDic のパスを指定して、日本語の形態素解析を行い、漢字文を音読み文に変換しています。漢字の音読みは UniDic の「名詞固有名詞」のフィーチャー情報の7番目に格納されているため、それを取得しています。

注意:/path/to/unidic の部分は、UniDic 辞書の実際のインストールパスに置き換えてください。

また、UniDic に登録されていない単語や未知の単語に対しては、'*'として示されることがあります。その場合は元の漢字をそのまま使用します。さらに、Juman++ などの他の形態素解析エンジンや辞書を利用することも検討してください。

In [ ]:
import MeCab

# MeCab + UniDicを使って漢字文から音読みを取得する関数
def get_onyomi(text):
    try:
        mecab = MeCab.Tagger('-d /path/to/unidic')  # UniDicのパスを指定してください
        node = mecab.parse(text)
        onyomi_text = ''
        
        while node:
            features = node.feature.split(',')
            if len(features) > 7 and features[0] == '名詞' and features[1] == '固有名詞':
                onyomi_text += features[7] if features[7] != '*' else node.surface
            else:
                onyomi_text += node.surface

            node = node.next

        return onyomi_text

    except Exception as e:
        print('エラー:', e)
        return None

# 漢字文を入力
input_text = '漢字文を入力してください。'
# 音読みに変換
result = get_onyomi(input_text)
print(result)  # 出力例: '漢字文をニュウリョクシテクダサイ。'
In [ ]:
sudo apt update
sudo apt install cmake
In [ ]:
sudo apt update
sudo apt install protobuf-compiler libprotobuf-dev
In [ ]:
%%bash
git clone https://github.com/ku-nlp/jumanpp.git ~/jumanpp
In [ ]:
%%bash
mkdir -p ~/jumanpp/build
cd ~/jumanpp/build
cmake ~/jumanpp -DCMAKE_BUILD_TYPE=Release
cd ~/jumanpp
sudo make install

Jumandic 模型GPT 模型 都是用于自然语言处理的模型,但它们的设计目标、架构和应用场景有显著的不同。以下是对这两个模型的比较:

1. 目的与应用

  • Jumandic 模型(用于 Juman++)主要用于 日语形态素分析。它的目标是将日语文本分解成词和词性标注,并为每个单词生成详细的语法信息(例如词性、子类别等)。这是一个基于规则和词典的统计模型,适用于需要精确语法分析的任务,如日语文本解析和机器翻译。

    • 主要应用:日语文本分词、词性标注、句法分析。
  • GPT 模型(Generative Pre-trained Transformer)则是一个基于 深度学习 的生成模型,目标是生成连贯且具有上下文理解能力的自然语言文本。GPT 使用大量的预训练数据进行语言建模,能够生成新的文本、回答问题、进行对话等,适用于多种语言任务。

    • 主要应用:文本生成、对话系统、文本摘要、翻译、代码生成等。

2. 技术基础与架构

  • Jumandic 使用 基于词典的模型RNN(循环神经网络),结合了传统的基于规则的系统和现代深度学习技术。它通过大量的标注语料库来进行训练,优化形态素分析的精度要依赖于先验知识的词典和规则,适用于细粒度的语言解析。

  • GPT 是基于 Transformer 架构的深度学习模型,采用 自注意力机制 来理解和生成文本。GPT 是一种无监督学习模型,通过大规模的语料库进行预训练,然后通过微调(fine-tuning)来适应特定任务。

    • 该模型通过从大量数据中学习语言的统计规律来生成文本。

3. 数据与训练

  • Jumandic 依赖于 标注语料库,例如 京都大学语料库每日新闻语料库,这些语料库包含了手动标注的词汇和词性信息为输入。
  • GPT 则通过 大规模的未标注语料库 进行训练,例如网络文章、书籍、新闻报道等。它通过无监督学习方式训练,理解语言结构和上下文关系。

4. 生成能力

  • Jumandic 专注于 精确的词汇分割语法分析,主要任务是分解和标注文本中的每个词汇。因此,它并不生成新的文本或语句。
  • GPT 则是一种 生成模型,能够从给定的上下文生成自然流畅的文本,甚至在对话中模拟人类的语言反应。GPT 不仅能够解析文本,还能根据需求生成内容。

5. 模型训练与应用

  • Jumandic 于日语领域,通过对语料库进行训练来改进模型的解析能力。它适用于需要高精度的日语词汇分析和标注的任务。
  • GPT 作为一种通用的语言模型,能够处理范围更广,不仅限于特定语言(如日语),还支持多种语言的处理。GPT 适用于对话生成、文本摘要、创意写作等多种任务。

总结

  • Jumandic 是一个专门针对日语形言的详细解析与词性标注。
  • GPT 是一个通用的文本生成模型,能够在多种语言任务中进行推理和生成,适用于更广泛的自然语言处理任务。

尽管两者都是自然语言处理领域的重要模型,但它们各自的侧重点和应用场景有显著差异。


Juman++ 项目中,使用的 RNN(循环神经网络) 是一种语言模型,具体称为 RNNLM(Recurrent Neural Network Language Model)。这个 RNNLM 主要用于提高形态素解析的准确性,通过考虑单词序列的语义合理性来进行更准确的词性标注和分词。

RNNLM 的特点

  1. 语言模型的用途

    • RNNLM 在 Juman++ 中用于判断单词序列的语义自然性。通过这种方式,解析器不仅依赖于规则和统计模型,还结合了上下文的语义信息。
  2. 实现细节

    • Juman++ 提供了对 Mikolov RNN(一种经典的 RNN 语言模型)的支持。
    • RNN 模型能够预测下一个单词,或者评估给定单词序列的概率,从而在分词和词性标注时帮助选择最合理的候选项。
  3. 训练与集成

    • RNN 模型通常需要通过大量标注语料库进行训练,如 Mainichi Shinbun(每日新闻语料库 1995)Kyoto University Corpus
    • 在 Juman++ 的训练过程中,可以通过命令行参数 --rnn-model 加载预训练的 RNN 模型文件。
  4. 代码中的应用

    • 在 Juman++ 源代码的 mikolov_rnn_test.cc 文件中,可以看到 RNN 模型的推理过程和上下文处理的实现。
  5. 性能提升

    • 使用 RNNLM 后,Juman++ 的解析速度和准确性有显著提升,解析速度比原版 Juman 提高了超过 250 倍。

总结

  • Juman++ 使用 RNNLM 来增强形态素解析的上下文理解能力。
  • RNN 模型的实现基于 Mikolov RNN,并通过训练语料库学习单词序列的语义关系。
  • 在实际应用中,通过参数 --rnn-model 加载预训练 RNN 模型来提高解析质量。
In [ ]:
%%bash
cd ~ && wget https://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-1.02.tar.xz
In [ ]:
%%bash
cd ~ && tar xJvf ~/jumanpp-1.02.tar.xz

On Linux

In [ ]:
%%bash
sudo apt update
sudo apt install libboost-all-dev

On macOS

In [ ]:
%%bash
brew install boost
In [ ]:
%%bash
cd ~/jumanpp-1.02
./configure
make
sudo make install

Scoop on Windows 11

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
scoop bucket add main
scoop install main/cmake
scoop install main/make

Ubuntu

sudo apt update
sudo apt install g++-10 clang cmake
sudo apt install libprotobuf-dev protobuf-compiler
cd ~ && tar xvf jumanpp-2.0.0-rc4.tar.xz
mkdir -p ~/jumanpp-2.0.0-rc4/build
cd ~/jumanpp-2.0.0-rc4/build && cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
cd ~/jumanpp-2.0.0-rc4/build && make install -j 4
sudo make install

使用 Juman 进行日语解析和 LaTeX 格式化的工具

A Tool for Japanese Parsing and LaTeX Formatting Using Juman

In [ ]:
%%bash
pip install pyknp
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: pyknp in /home/jupyter-saintway/.local/lib/python3.9/site-packages (0.6.1)
Requirement already satisfied: six in /home/jupyter-saintway/.local/lib/python3.9/site-packages (from pyknp) (1.16.0)
In [ ]:
from pyknp import Juman
juman = Juman()

def halfwidth_to_fullwidth(text):
    result = ''
    for char in text:
        code = ord(char)
        if code == ord(' '):
            result += ' '
        elif ord('!') <= code <= ord('~'):
            # Convert ASCII characters in the range 0x0021 to 0x007E
            result += chr(code + 0xFEE0)
        else:
            result += char
    return result

def render(text):
    for line in halfwidth_to_fullwidth(text).split('\n'):
        if line == '':
            yield '\n'
            continue
        mrphs = juman.analysis(line).mrph_list()
        for mrph in mrphs:
            if mrph.midasi == mrph.yomi:
                yield mrph.midasi
            else:
                yield ' {}{}]'.format(
                    mrph.midasi,
                    mrph.yomi
                )
        yield '\n'

def render_to_latex(text):
    for line in halfwidth_to_fullwidth(text).split('\n'):
        if line == '':
            yield '\n'
            continue
        mrphs = juman.analysis(line).mrph_list()
        for mrph in mrphs:
            yield f'\\frac{{{mrph.yomi}}}{{{mrph.midasi}}}'
        yield '\n'
In [ ]:
from IPython.display import Math
line = ''
for word in render_to_latex('''
朝の養い

啓21:3 ……見よ、神の幕屋が人と共にある.神は彼らと共に幕屋を張り……
22 わたしはその中に宮を見なかった.主なる神、全能者と小羊が、その宮だからである。

 わたしは七十年以上を費やして聖書を学びましたが、ごく最近になって、聖書が実はただ一つの事、すなわち宇宙的な合併を明らかにしていることを見ました。目的を持つ神にはエコノミーがあり、彼は彼のエコノミーの中で、宇宙的な合併を持つことを意図されます。
 わたしたちは、新エルサレムが神のエコノミーの目標であることを見てきましたが、新エルサレムが一つの合併であることを見ませんでした。啓示録第21章2節で使徒ヨハネは、「わたしはまた聖なる都、新エルサレム……を見た」と言い、次の節では「神の幕屋」としての新エルサレムについて語っています。神の幕屋として、新エルサレムは神の住まいであり、……[また]宇宙的な合併です。(リー全集、1994年―1997年、第5巻(下)、「御父により神聖な栄光をもってキリストの栄光が現されたことの結果」、第4編)
'''):
    if word == '\n':
        display(Math(line))
        line = ''
    else:
        line += word
$\displaystyle $
$\displaystyle \frac{あさ}{朝}\frac{の}{の}\frac{やしない}{養い}$
$\displaystyle $
$\displaystyle \frac{ひらく}{啓}\frac{21}{21}\frac{:}{:}\frac{3}{3}\frac{ }{ }\frac{……}{……}\frac{みよ}{見よ}\frac{、}{、}\frac{かみ}{神}\frac{の}{の}\frac{まくや}{幕屋}\frac{が}{が}\frac{じん}{人}\frac{と}{と}\frac{ともに}{共に}\frac{ある}{ある}\frac{.}{.}\frac{かみ}{神}\frac{は}{は}\frac{かれ}{彼}\frac{ら}{ら}\frac{と}{と}\frac{ともに}{共に}\frac{まくや}{幕屋}\frac{を}{を}\frac{はり}{張り}\frac{……}{……}$
$\displaystyle \frac{22}{22}\frac{ }{ }\frac{わたし}{わたし}\frac{は}{は}\frac{その}{その}\frac{なか}{中}\frac{に}{に}\frac{みや}{宮}\frac{を}{を}\frac{み}{見}\frac{なかった}{なかった}\frac{.}{.}\frac{おもなる}{主なる}\frac{かみ}{神}\frac{、}{、}\frac{ぜん}{全}\frac{のう}{能}\frac{しゃ}{者}\frac{と}{と}\frac{しょう}{小}\frac{ひつじ}{羊}\frac{が}{が}\frac{、}{、}\frac{その}{その}\frac{みや}{宮}\frac{だ}{だ}\frac{から}{から}\frac{である}{である}\frac{。}{。}$
$\displaystyle $
$\displaystyle \frac{わたし}{わたし}\frac{は}{は}\frac{七十}{七十}\frac{ねん}{年}\frac{いじょう}{以上}\frac{を}{を}\frac{ついやして}{費やして}\frac{せいしょ}{聖書}\frac{を}{を}\frac{まなび}{学び}\frac{ました}{ました}\frac{が}{が}\frac{、}{、}\frac{ごく}{ごく}\frac{さいきん}{最近}\frac{に}{に}\frac{なって}{なって}\frac{、}{、}\frac{せいしょ}{聖書}\frac{が}{が}\frac{じつは}{実は}\frac{ただ}{ただ}\frac{一}{一}\frac{つ}{つ}\frac{の}{の}\frac{じ}{事}\frac{、}{、}\frac{すなわち}{すなわち}\frac{うちゅう}{宇宙}\frac{てきな}{的な}\frac{がっぺい}{合併}\frac{を}{を}\frac{あきらかに}{明らかに}\frac{して}{して}\frac{いる}{いる}\frac{こと}{こと}\frac{を}{を}\frac{み}{見}\frac{ました}{ました}\frac{。}{。}\frac{もくてき}{目的}\frac{を}{を}\frac{もつ}{持つ}\frac{かみ}{神}\frac{に}{に}\frac{は}{は}\frac{エコノミー}{エコノミー}\frac{が}{が}\frac{あり}{あり}\frac{、}{、}\frac{かれ}{彼}\frac{は}{は}\frac{かれ}{彼}\frac{の}{の}\frac{エコノミー}{エコノミー}\frac{の}{の}\frac{なか}{中}\frac{で}{で}\frac{、}{、}\frac{うちゅう}{宇宙}\frac{てきな}{的な}\frac{がっぺい}{合併}\frac{を}{を}\frac{もつ}{持つ}\frac{こと}{こと}\frac{を}{を}\frac{いと}{意図}\frac{さ}{さ}\frac{れ}{れ}\frac{ます}{ます}\frac{。}{。}$
$\displaystyle \frac{わたし}{わたし}\frac{たち}{たち}\frac{は}{は}\frac{、}{、}\frac{しん}{新}\frac{えるされむ}{エルサレム}\frac{が}{が}\frac{かみ}{神}\frac{の}{の}\frac{エコノミー}{エコノミー}\frac{の}{の}\frac{もくひょう}{目標}\frac{である}{である}\frac{こと}{こと}\frac{を}{を}\frac{みて}{見て}\frac{き}{き}\frac{ました}{ました}\frac{が}{が}\frac{、}{、}\frac{しん}{新}\frac{えるされむ}{エルサレム}\frac{が}{が}\frac{一}{一}\frac{つ}{つ}\frac{の}{の}\frac{がっぺい}{合併}\frac{である}{である}\frac{こと}{こと}\frac{を}{を}\frac{み}{見}\frac{ませ}{ませ}\frac{ん}{ん}\frac{でした}{でした}\frac{。}{。}\frac{けいじ}{啓示}\frac{ろく}{録}\frac{だい}{第}\frac{21}{21}\frac{しょう}{章}\frac{2}{2}\frac{せつ}{節}\frac{で}{で}\frac{しと}{使徒}\frac{ヨハネ}{ヨハネ}\frac{は}{は}\frac{、}{、}\frac{「}{「}\frac{わたし}{わたし}\frac{は}{は}\frac{また}{また}\frac{せいなる}{聖なる}\frac{と}{都}\frac{、}{、}\frac{しん}{新}\frac{えるされむ}{エルサレム}\frac{……}{……}\frac{を}{を}\frac{みた}{見た}\frac{」}{」}\frac{と}{と}\frac{いい}{言い}\frac{、}{、}\frac{つぎの}{次の}\frac{せつ}{節}\frac{で}{で}\frac{は}{は}\frac{「}{「}\frac{かみ}{神}\frac{の}{の}\frac{まくや}{幕屋}\frac{」}{」}\frac{と}{と}\frac{して}{して}\frac{の}{の}\frac{しん}{新}\frac{えるされむ}{エルサレム}\frac{に}{に}\frac{ついて}{ついて}\frac{かたって}{語って}\frac{い}{い}\frac{ます}{ます}\frac{。}{。}\frac{かみ}{神}\frac{の}{の}\frac{まくや}{幕屋}\frac{と}{と}\frac{して}{して}\frac{、}{、}\frac{しん}{新}\frac{えるされむ}{エルサレム}\frac{は}{は}\frac{かみ}{神}\frac{の}{の}\frac{すまい}{住まい}\frac{であり}{であり}\frac{、}{、}\frac{……}{……}\frac{[}{[}\frac{また}{また}\frac{]}{]}\frac{うちゅう}{宇宙}\frac{てきな}{的な}\frac{がっぺい}{合併}\frac{です}{です}\frac{。}{。}\frac{(}{(}\frac{りー}{リー}\frac{ぜんしゅう}{全集}\frac{、}{、}\frac{1994}{1994}\frac{ねん}{年}\frac{―}{―}\frac{1997}{1997}\frac{ねん}{年}\frac{、}{、}\frac{だい}{第}\frac{5}{5}\frac{かん}{巻}\frac{(}{(}\frac{した}{下}\frac{)}{)}\frac{、}{、}\frac{「}{「}\frac{ご}{御}\frac{ちち}{父}\frac{に}{に}\frac{より}{より}\frac{しんせいな}{神聖な}\frac{えいこう}{栄光}\frac{を}{を}\frac{もって}{もって}\frac{キリスト}{キリスト}\frac{の}{の}\frac{えいこう}{栄光}\frac{が}{が}\frac{あらわさ}{現さ}\frac{れた}{れた}\frac{こと}{こと}\frac{の}{の}\frac{けっか}{結果}\frac{」}{」}\frac{、}{、}\frac{だい}{第}\frac{4}{4}\frac{へん}{編}\frac{)}{)}$
$\displaystyle $
In [ ]:
for word in render("""
朝の養い

啓21:9-11 ……「ここに来なさい.あなたに小羊の妻である花嫁を見せよう」。そして彼はわたしを霊の中で、大きな高い山へ連れて行き、聖なる都エルサレムが、天から出て神から下って来るのをわたしに見せたが、それは神の栄光を持っていた。その光は最も尊い宝石のようであり、水晶のように透明な碧玉のようであった。

 新約の主要な内容とは、三一の神がご自身の大いなる喜びにしたがって永遠のエコノミーを持っておられ、それは彼の命と性質の中でご自身を彼の選ばれ、贖われた民の中へと分与し、それによって彼らをご自身の複製とし、彼らが彼を表現するためであるということです。この団体の表現は新エルサレムにおいて究極的に完成します(エペソ3:9.1:9-23)。聖書の究極的な完成である新エルサレムは、神が人と成ることと、人が神格においてではなく、命と性質において神となることと関係があります(啓21:2.3:12)。キリストの中で、神は人と成り、人を彼の命と性質において神とします。それによって贖う神と贖われた人は、共にミングリングされ、構成されて、一つの実体、すなわち新エルサレムとなることができます(21:3、22)。最終的に、三一の、永遠の神は新エルサレムとなってわたしたちすべてと合併し、わたしたちもまた神の有機的な救いの過程を通して(ローマ5:10)、新エルサレムとなります。(「新約の結論(25)」、メッセージ428)
"""):
    print(word, end='')
 朝[あさ]の 養い[やしない]

 啓[ひらく]21:9-11 ……「ここに来なさい.あなたに 小[しょう] 羊[ひつじ]の 妻[つま]である 花嫁[はなよめ]を 見せよう[みせよう]」。そして 彼[かれ]はわたしを 霊[れい]の 中[なか]で、 大きな[おおきな] 高い[たかい] 山[やま]へ 連れて[つれて] 行き[いき]、 聖なる[せいなる] 都[みやこ] エルサレム[えるされむ]が、 天から[てんから] 出て[でて] 神[かみ]から 下って[くだって] 来る[くる]のをわたしに 見せた[みせた]が、それは 神[かみ]の 栄光[えいこう]を 持って[もって]いた。その 光[ひかり]は 最も[もっとも] 尊い[とうとい] 宝石[ほうせき]のようであり、 水晶[すいしょう]のように 透明な[とうめいな] 碧玉[へきぎょく]のようであった。

 新約[しんやく]の 主要な[しゅような] 内容[ないよう]とは、三一の 神[かみ]がご 自身[じしん]の 大いなる[おおいなる] 喜び[よろこび]にしたがって 永遠の[えいえんの]エコノミーを 持って[もって]おられ、それは 彼[かれ]の 命[いのち]と 性質[せいしつ]の 中[なか]でご 自身[じしん]を 彼[かれ]の 選ば[えらば]れ、贖われた 民[みん]の 中[なか]へと 分与[ぶんよ]し、それによって 彼[かれ]らをご 自身[じしん]の 複製[ふくせい]とし、 彼[かれ]らが 彼[かれ]を 表現[ひょうげん]するためであるということです。この 団体[だんたい]の 表現[ひょうげん]は 新[しん] エルサレム[えるされむ]において 究極[きゅうきょく] 的に[てきに] 完成[かんせい]します(エペソ3:9.1:9-23)。 聖書[せいしょ]の 究極[きゅうきょく] 的な[てきな] 完成[かんせい]である 新[しん] エルサレム[えるされむ]は、 神[かみ]が 人[じん]と 成る[なる]ことと、 人[じん]が 神格[しんかく]においてではなく、 命[いのち]と 性質[せいしつ]において 神[かみ]となることと 関係[かんけい]があります( 啓[ひらく]21:2.3:12)。キリストの 中[なか]で、 神[かみ]は 人[じん]と 成り[なり]、 人[じん]を 彼[かれ]の 命[いのち]と 性質[せいしつ]において 神[かみ]とします。それによって贖う 神[かみ]と贖われた 人[じん]は、 共に[ともに]ミングリングされ、 構成[こうせい]されて、一つの 実体[じったい]、すなわち 新[しん] エルサレム[えるされむ]となることができます(21:3、22)。 最終[さいしゅう] 的に[てきに]、三一の、 永遠の[えいえんの] 神[かみ]は 新[しん] エルサレム[えるされむ]となってわたしたちすべてと 合併[がっぺい]し、わたしたちもまた 神[かみ]の 有機[ゆうき] 的な[てきな] 救い[すくい]の 過程[かてい]を 通して[とおして]( ローマ[ろーま]5:10)、 新[しん] エルサレム[えるされむ]となります。(「 新約[しんやく]の 結論[けつろん](25)」、 メッセージ[めっせーじ]428)

In [ ]:
for word in render("""
神是信実的,你們乃是爲他所召,進入了他儿子我們主耶穌基督的交通。
"""):
    print(word, end='')
 神[かみ]是信 実[み] 的[てき],你們 乃[だい] 是[ぜ]爲他 所[しょ] 召[めし], 進入[しんにゅう] 了[りょう] 他[た]儿子我們 主[しゅ]耶穌基督 的[てき] 交通[こうつう]。

In [ ]:
for word in render("""
神、是、信、実、的,你、們、乃、是、爲、他、所、召,進、入、了、他、儿、子、我、們、主、耶、穌、基、督、的、交、通。
"""):
    print(word, end='')
 神[かみ]、 是[ぜ]、 信[しん]、 実[み]、 的[てき],你、們、 乃[だい]、 是[ぜ]、爲、 他[ほか]、 所[しょ]、 召[めし], 進[しん]、 入[はいり]、 了[りょう]、 他[ほか]、儿、 子[し]、 我[われ]、們、 主[おも]、耶、穌、 基[もと]、督、 的[てき]、交、 通[つう]。


jumanpp_train.cc

In [ ]:
%%bash
git clone https://github.com/ku-nlp/KyotoCorpus
In [ ]:
%%bash
git clone https://github.com/ku-nlp/jumanpp-jumandic
In [ ]:
%%bash
cd ~/nlp/jumanpp-jumandic/ && python3 configure.py
In [ ]:
%%bash
sudo apt-get update
sudo apt-get install zsh
In [ ]:
%%bash
sudo apt-get update
sudo apt-get install ruby-full
In [ ]:
%%bash
mkdir -p ~/nlp/jumanpp-jumandic/bld/corpora
cd ~/nlp/jumanpp-jumandic/ && make corpora
In [ ]:
%%bash
cd ~/nlp/jumanpp-jumandic/ && make ~/nlp/jumanpp-jumandic/bld/models/jumandic.bin
In [ ]:
%%bash
sudo apt update
sudo apt install cmake
In [ ]:
%%bash
rm -rf ~/nlp/jumanpp-jumandic/bld/jpp/
In [ ]:
%%bash
cd ~/nlp/jumanpp-jumandic/ && make rnn

jumanpp

In [ ]:
from ipymock.nlp import annotate
from IPython.display import display, HTML

answser = ''
line = ''

for word in annotate('''
兄弟姉妹、主の内で平安を祈ります!私たち信者は召されて、メシアを受け入れ、経験し、楽しむべきです。彼こそが私たちの王、主、頭、そして霊的な夫であるべきです。まず、私たちはメシアを王として迎え入れ、良心を清め、心を澄ませて、彼の御座が私たちの中で支配することを許すべきです。次に、私たちの主として、彼の愛が私たちを古い自分のために生きることをやめさせ、完全に彼の支配に従い、すべてのことにおいて彼を喜ばせるように動機付けます。また、教会の生活の中でメシアを頭として経験し、彼の権威を体験し、彼から命の供給を受け、メシアの体を建て上げていきます。最終的に、私たちはメシアを霊的な夫として楽しみ、彼との親密な関係を築き、新しいエルサレムの栄光の完成を迎える準備をします。私たちがこのような経験の中に入って、神が喜ばれる道を歩むことができますように。アーメン!
'''):
    answser += word
    if word == '\n':
        display(HTML(line))
        line = ''
    else:
        line += word
In [ ]:
from ipymock.nlp import annotate
from IPython.display import display, HTML
answser = ''
line = ''
for word in annotate('E.わたしたちが他の人をどの程度、神へともたらすことができるかは常に、わたしたちが神との関係においてどこにいるかによって測られます。わたしたちは神の中にいればいるほど、ますます他の人を和解させて、神の中へともたらすことができます。パウロは至聖所の中にいた人であったので、信者たちに、至聖所に「進み出(る)(come forward)」ように命じることができました(「出て行く(go forward)」ではない)―Ⅱコリント12:2前半.5:20.ヘブル10:22:'):
    answser += word
    if word == '\n':
        display(HTML(line))
        line = ''
    else:
        line += word
answser
In [ ]:
from ipymock.nlp import annotate, halfwidth_to_fullwidth
from IPython.display import display, HTML
answser = ''
line = ''
for word in annotate(halfwidth_to_fullwidth('E.わたしたちが他の人をどの程度、神へともたらすことができるかは常に、わたしたちが神との関係においてどこにいるかによって測られます。わたしたちは神の中にいればいるほど、ますます他の人を和解させて、神の中へともたらすことができます。パウロは至聖所の中にいた人であったので、信者たちに、至聖所に「進み出(る)(come forward)」ように命じることができました(「出て行く(go forward)」ではない)―Ⅱコリント12:2前半.5:20.ヘブル10:22:')):
    answser += word
    if word == '\n':
        display(HTML(line))
        line = ''
    else:
        line += word
answser
In [ ]:
filename = '朝202409月全国特別集会'
In [ ]:
import os
import shutil
import zipfile

def unzip_epub(epub_file_path):
    # Get the absolute path and name of the file
    epub_file_path = os.path.abspath(epub_file_path)
    # Generate a folder path with the same name
    output_dir = os.path.splitext(epub_file_path)[0]

    if os.path.exists(output_dir):
        shutil.rmtree(output_dir)  # Delete a non-empty directory

    # Ensure the output directory exists
    os.makedirs(output_dir)

    # Open and extract the .epub file
    with zipfile.ZipFile(epub_file_path, 'r') as zip_ref:
        zip_ref.extractall(output_dir)
        print(f'The .epub file has been extracted to: {output_dir}')

# Replace with your .epub file path
unzip_epub(f'{filename}.epub')
pip install beautifulsoup4
pip install lxml
In [ ]:
import glob
from ipymock.nlp import annotate_html

# Define file path patterns
file_pattern = f'{filename}/OEBPS/Text/[0-9]*Week_*.xhtml'

# Get a list of files that meet the conditions
file_list = glob.glob(file_pattern)

results = []
# Iterate through the files and read their contents
for file_path in file_list:
    # Read the file contents
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()

    result = annotate_html(content.replace('イエス', 'ミヤス').replace('キリスト', 'メシア'))
    print(f'Result for {file_path}:\n\n', result)
    results.append(result)

    # Write the modified content back to the file
    with open(file_path, 'w', encoding='utf-8') as file:
        file.write(result)
In [ ]:
import os
import zipfile

def folder_to_epub(folder_path):
    # Get the absolute path and name of the folder
    folder_path = os.path.abspath(folder_path)
    folder_name = os.path.splitext(folder_path)[0]

    # Generate a .zip file path with the same name
    zip_path = f'{folder_name}.zip'

    # Create a .zip file
    with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for root, _, files in os.walk(folder_path):
            for file in files:
                file_path = os.path.join(root, file)
                # Ensure the relative path structure is preserved inside the .zip file
                arcname = os.path.relpath(file_path, folder_path)
                zipf.write(file_path, arcname)

    # Generate the .epub file path
    epub_path = f'{folder_name}メシア.epub'

    # Rename the .zip file to an .epub file
    os.rename(zip_path, epub_path)
    print(f'The .epub file has been created: {epub_path}')

# Replace with the folder path you want to compress
folder_to_epub(f'{filename}')

Python で、偽日本語文から音読み文に転換します。


PyKakasi

pykakasi is a Python Natural Language Processing (NLP) library to transliterate hiragana, katakana and kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle characters in NFC form.

In [ ]:
%%bash
pip install pykakasi
Defaulting to user installation because normal site-packages is not writeable
Collecting pykakasi
  Downloading pykakasi-2.2.1-py3-none-any.whl (2.4 MB)
Collecting jaconv
  Downloading jaconv-0.3.4.tar.gz (16 kB)
  Preparing metadata (setup.py): started
  Preparing metadata (setup.py): finished with status 'done'
Collecting deprecated
  Downloading Deprecated-1.2.14-py2.py3-none-any.whl (9.6 kB)
Requirement already satisfied: wrapt<2,>=1.10 in /home/jupyter-saintway/.local/lib/python3.9/site-packages (from deprecated->pykakasi) (1.15.0)
Building wheels for collected packages: jaconv
  Building wheel for jaconv (setup.py): started
  Building wheel for jaconv (setup.py): finished with status 'done'
  Created wheel for jaconv: filename=jaconv-0.3.4-py3-none-any.whl size=16415 sha256=ee5ab10be02623d85b0962dad372b01ad36a876b0a7421e27fb0ab4c8bdcff9d
  Stored in directory: /home/jupyter-saintway/.cache/pip/wheels/49/de/f1/55f605920db3666d30215331bc85f24686dde9b95b473ae41b
Successfully built jaconv
Installing collected packages: jaconv, deprecated, pykakasi
Successfully installed deprecated-1.2.14 jaconv-0.3.4 pykakasi-2.2.1
In [ ]:
import pykakasi
kks = pykakasi.kakasi()
text = '神是信実的,你們乃是爲他所召,進入了他儿子我們主耶穌基督的交通。'
result = kks.convert(text)
print(
    ''.join(
        '{}{}]'.format(
            item['orig'],
            item['hepburn']
        ) for item in result
    )
)
神[kami]是信[zeshin]実[mi]的[teki],[,]你[]們[ra]乃[no]是[kore]爲[tame]他所[tasho]召[shou],[,]進入[shinnyuu]了[ryou]他[hoka]儿[nin]子[ko]我們[warera]主[shu]耶穌[yaso]基督[kirisuto]的[teki]交通。[koutsuu.]
In [ ]:
import pykakasi
kks = pykakasi.kakasi()

def halfwidth_to_fullwidth(text):
    result = ''
    for char in text:
        code = ord(char)
        if code == ord(' '):
            result += ' '
        elif ord('!') <= code <= ord('~'):
            # Convert ASCII characters in the range 0x0021 to 0x007E
            result += chr(code + 0xFEE0)
        else:
            result += char
    return result

def render_to_latex(text):
    for line in halfwidth_to_fullwidth(text).split('\n'):
        if line == '':
            yield '\n'
            continue
        for word in kks.convert(line):
            if word['orig'] == '\n':
                yield '\n'
            elif word['kana'] == '':
                yield f'\\frac{{{word["orig"]}}}{{{word["orig"]}}}'
            else:
                yield f'\\frac{{{word["kana"]}}}{{{word["orig"]}}}'
        yield '\n'
In [ ]:
from IPython.display import Math
line = ''
for word in render_to_latex('''
神是信実的,你們乃是爲他所召,進入了他儿子我們主耶穌基督的交通。
'''):
    if word == '\n':
        display(Math(line))
        line = ''
    else:
        line += word
$\displaystyle $
$\displaystyle \frac{カミ}{神}\frac{ゼシン}{是信}\frac{ミ}{実}\frac{テキ}{的}\frac{,}{,}\frac{你}{你}\frac{ラ}{們}\frac{ノ}{乃}\frac{コレ}{是}\frac{タメ}{爲}\frac{タショ}{他所}\frac{ショウ}{召}\frac{,}{,}\frac{シンニュウ}{進入}\frac{リョウ}{了}\frac{ホカ}{他}\frac{ニン}{儿}\frac{コ}{子}\frac{ワレラ}{我們}\frac{シュ}{主}\frac{ヤソ}{耶穌}\frac{キリスト}{基督}\frac{テキ}{的}\frac{コウツウ。}{交通。}$
$\displaystyle $
In [ ]:
from IPython.display import Math
line = ''
for word in render_to_latex('''
抱歉,昨天太忙了。
'''):
    if word == '\n':
        display(Math(line))
        line = ''
    else:
        line += word
$\displaystyle $
$\displaystyle \frac{ホウ}{抱}\frac{ケン}{歉}\frac{,}{,}\frac{サク}{昨}\frac{テン}{天}\frac{タ}{太}\frac{ボウ}{忙}\frac{リョウ。}{了。}$
$\displaystyle $
In [ ]:
from IPython.display import Math
line = ''
for word in render_to_latex('''
我聚會完了。我現在在超市。
'''):
    if word == '\n':
        display(Math(line))
        line = ''
    else:
        line += word
$\displaystyle $
$\displaystyle \frac{ワレ}{我}\frac{シュウカイ}{聚會}\frac{カンリョウ。}{完了。}\frac{ワレ}{我}\frac{ゲンザイ}{現在}\frac{ザイ}{在}\frac{チョウ}{超}\frac{シ。}{市。}$
$\displaystyle $
In [ ]:
from IPython.display import Math
line = ''
for word in render_to_latex('''
用這個輸入法的日語輸入漢字比較方便。
'''):
    if word == '\n':
        display(Math(line))
        line = ''
    else:
        line += word
$\displaystyle $
$\displaystyle \frac{ヨウ}{用}\frac{シャ}{這}\frac{コ}{個}\frac{ユニュウ}{輸入}\frac{ホウテキ}{法的}\frac{ニチゴ}{日語}\frac{ユニュウ}{輸入}\frac{カンジ}{漢字}\frac{ヒカク}{比較}\frac{ホウベン。}{方便。}$
$\displaystyle $
In [ ]:
from IPython.display import Math
line = ''
for word in render_to_latex('''
主啊,我與ひじりい願意全心全意追隨你。
願意讓你在我們裡面書寫神聖的歷史。
'''):
    if word == '\n':
        display(Math(line))
        line = ''
    else:
        line += word
$\displaystyle $
$\displaystyle \frac{シュ}{主}\frac{啊}{啊}\frac{,}{,}\frac{ワレ}{我}\frac{ヨ}{與}\frac{ジョウ}{盛}\frac{イ}{偉}\frac{ガンイ}{願意}\frac{ゼンシン}{全心}\frac{ゼン}{全}\frac{イ}{意}\frac{ツイ}{追}\frac{ズイ}{隨}\frac{。}{你。}$
$\displaystyle \frac{ガンイ}{願意}\frac{ユズル}{讓}\frac{你}{你}\frac{ザイ}{在}\frac{ワレラ}{我們}\frac{リメン}{裡面}\frac{ショシャ}{書寫}\frac{シンセイ}{神聖}\frac{テキ}{的}\frac{レキシ。}{歷史。}$
$\displaystyle $
In [ ]:
from IPython.display import Math
line = ''
for word in render_to_latex('''
我們早點學會這種偽日本語。我們可以用偽日本語交談。沒有人能夠聽懂。
'''):
    if word == '\n':
        display(Math(line))
        line = ''
    else:
        line += word
$\displaystyle $
$\displaystyle \frac{ワレラ}{我們}\frac{ソウ}{早}\frac{テン}{點}\frac{ガッカイ}{學會}\frac{シャ}{這}\frac{タネ}{種}\frac{ニセ}{偽}\frac{ニホンゴ。}{日本語。}\frac{ワレラ}{我們}\frac{カ}{可}\frac{イ}{以}\frac{ヨウ}{用}\frac{ニセ}{偽}\frac{ニホンゴ}{日本語}\frac{コウ}{交}\frac{ダン。}{談。}\frac{ボツ}{沒}\frac{ユウジン}{有人}\frac{ノウ}{能}\frac{夠}{夠}\frac{チョウ}{聽}\frac{。}{懂。}$
$\displaystyle $
In [ ]:
from IPython.display import Math
line = ''
for word in render_to_latex('''
### 三  憑著眾召會在基督身體里的交通,平安的神就要將撒但踐踏在我們的腳下——羅十六20。

## **陸  羅馬十六章給了我們使徒保羅絕佳的榜樣,他將眾聖徒帶到基督身體全體相調的生活中;乃是在這樣的生活中,我們才能真正地在生命中作王——五17:**

### 一  保羅對聖徒一一提名問安,至少有二十七個名字;這給我們看見,他對每一位聖徒都相當的認識、瞭解、關心——十六1~16。

### 二  保羅的推薦與問安表達眾聖徒之間相互的關切,以及眾召會之間相互的交通——參西四15~16。
'''):
    if word == '\n':
        display(Math(line))
        line = ''
    else:
        line += word
$\displaystyle $
$\displaystyle \frac{### }{### }\frac{サン}{三}\frac{ }{ }\frac{サン}{三}\frac{ }{ }\frac{ヒョウ}{憑}\frac{チョ}{著}\frac{眾}{眾}\frac{ショウ}{召}\frac{カイ}{會}\frac{ザイ}{在}\frac{キリスト}{基督}\frac{シンタイ}{身體}\frac{サト}{里}\frac{テキ}{的}\frac{コウツウ}{交通}\frac{,}{,}\frac{ヘイアン}{平安}\frac{テキ}{的}\frac{カミ}{神}\frac{シュウ}{就}\frac{ヨウ}{要}\frac{ショウ}{將}\frac{サン}{撒}\frac{タダ}{但}\frac{セン}{踐}\frac{トウ}{踏}\frac{ザイ}{在}\frac{ワレラ}{我們}\frac{テキ}{的}\frac{腳}{腳}\frac{シタ}{下}\frac{——}{——}\frac{ラ}{羅}\frac{ジュウロク}{十六}\frac{20}{20}\frac{。}{。}$
$\displaystyle $
$\displaystyle \frac{## **}{## **}\frac{リク}{陸}\frac{ }{ }\frac{リク}{陸}\frac{ }{ }\frac{ローマ}{羅馬}\frac{ジュウロク}{十六}\frac{ショウ}{章}\frac{キュウ}{給}\frac{リョウ}{了}\frac{ワレラ}{我們}\frac{シト}{使徒}\frac{ポール}{保羅}\frac{絕}{絕}\frac{カ}{佳}\frac{テキ}{的}\frac{ボウ}{榜}\frac{サマ}{樣}\frac{,}{,}\frac{ホカ}{他}\frac{ショウ}{將}\frac{眾}{眾}\frac{セイト}{聖徒}\frac{オビ}{帶}\frac{トウ}{到}\frac{キリスト}{基督}\frac{シンタイゼンタイ}{身體全體}\frac{ソウ}{相}\frac{チョウ}{調}\frac{テキ}{的}\frac{セイカツ}{生活}\frac{ナカ}{中}\frac{;}{;}\frac{ナカ}{中}\frac{ノ}{乃}\frac{コレ}{是}\frac{ザイ}{在}\frac{シャ}{這}\frac{サマ}{樣}\frac{テキ}{的}\frac{セイカツ}{生活}\frac{ナカ}{中}\frac{,}{,}\frac{ワレラ}{我們}\frac{サイノウ}{才能}\frac{シンセイ}{真正}\frac{チ}{地}\frac{ザイショウ}{在生}\frac{メイチュウ}{命中}\frac{サク}{作}\frac{オウ}{王}\frac{——}{——}\frac{ゴ}{五}\frac{17:**}{17:**}$
$\displaystyle $
$\displaystyle \frac{### }{### }\frac{イチ}{一}\frac{ }{ }\frac{イチ}{一}\frac{ }{ }\frac{ポール}{保羅}\frac{ツイ}{對}\frac{セイト}{聖徒}\frac{イチイチ}{一一}\frac{テイ}{提}\frac{メイ}{名}\frac{トン}{問}\frac{アン}{安}\frac{,}{,}\frac{イタ}{至}\frac{ショウ}{少}\frac{ユウジ}{有二}\frac{ジュウ}{十}\frac{ナナコ}{七個}\frac{ミョウジ}{名字}\frac{;}{;}\frac{ミョウジ}{名字}\frac{シャ}{這}\frac{キュウ}{給}\frac{ワレラ}{我們}\frac{カン}{看}\frac{ケン}{見}\frac{,}{,}\frac{ホカ}{他}\frac{ツイ}{對}\frac{每}{每}\frac{イチイ}{一位}\frac{セイト}{聖徒}\frac{ミヤコ}{都}\frac{ソウトウ}{相當}\frac{テキ}{的}\frac{ニンシキ、}{認識、}\frac{リョウ}{瞭}\frac{カイ、}{解、}\frac{カンシン}{關心}\frac{——}{——}\frac{ジュウロク}{十六}\frac{1~16。}{1~16。}$
$\displaystyle $
$\displaystyle \frac{### }{### }\frac{ニ}{二}\frac{ }{ }\frac{ニ}{二}\frac{ }{ }\frac{ポール}{保羅}\frac{テキ}{的}\frac{スイセン}{推薦}\frac{ヨ}{與}\frac{トン}{問}\frac{アン}{安}\frac{オモテ}{表}\frac{トオル}{達}\frac{眾}{眾}\frac{セイト}{聖徒}\frac{ユキ}{之}\frac{カン}{間}\frac{ソウゴ}{相互}\frac{テキ}{的}\frac{カン}{關}\frac{セツ}{切}\frac{,}{,}\frac{イ}{以}\frac{キュウ}{及}\frac{眾}{眾}\frac{ショウ}{召}\frac{カイ}{會}\frac{ユキ}{之}\frac{カン}{間}\frac{ソウゴ}{相互}\frac{テキ}{的}\frac{コウツウ}{交通}\frac{——}{——}\frac{サン}{參}\frac{ニシ}{西}\frac{シ}{四}\frac{15~16。}{15~16。}$
$\displaystyle $
In [ ]:
from IPython.display import Math
line = ''
for word in render_to_latex('''
今日有時間的話,到銀行去問問:能否把、平井支店、転成、横山町支店?
'''):
    if word == '\n':
        display(Math(line))
        line = ''
    else:
        line += word
$\displaystyle $
$\displaystyle \frac{キョウ}{今日}\frac{ユウジ}{有時}\frac{カン}{間}\frac{テキ}{的}\frac{ハナシ}{話}\frac{,}{,}\frac{トウ}{到}\frac{ギンコウ}{銀行}\frac{キョ}{去}\frac{トン}{問}\frac{トン}{問}\frac{:}{:}\frac{ノウヒ}{能否}\frac{ハ、}{把、}\frac{ヒライ}{平井}\frac{シテン、}{支店、}\frac{テンセイ、}{転成、}\frac{ヨコヤマチョウ}{横山町}\frac{シテン?}{支店?}$
$\displaystyle $
In [ ]:
from IPython.display import Math
line = ''
for word in render_to_latex('''
美好的生活
'''):
    if word == '\n':
        display(Math(line))
        line = ''
    else:
        line += word
$\displaystyle $
$\displaystyle \frac{ミヨシ}{美好}\frac{テキ}{的}\frac{セイカツ}{生活}$
$\displaystyle $
In [ ]:
from IPython.display import Math
line = ''
for word in render_to_latex('''
嚴曉亮
'''):
    if word == '\n':
        display(Math(line))
        line = ''
    else:
        line += word
$\displaystyle $
$\displaystyle \frac{ゲン}{嚴}\frac{アカツキ}{曉}\frac{アキラ}{亮}$
$\displaystyle $
In [ ]:
%%bash
pip install unihan-etl
In [ ]:
%%bash
pip install cihai

あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん

In [ ]:
from cihai.core import Cihai

c = Cihai()

if not c.unihan.is_bootstrapped:  # download and install Unihan to db
    c.unihan.bootstrap()

query = c.unihan.lookup_char('好')
glyph = query.first()
print("lookup for 好: %s" % glyph.kDefinition)
# lookup for 好: good, excellent, fine; well

query = c.unihan.reverse_char('good')
print('matches for "good": %s ' % ', '.join([glph.char for glph in query]))
# matches for "good": 㑘, 㑤, 㓛, 㘬, 㙉, 㚃, 㚒, 㚥, 㛦, 㜴, 㜺, 㝖, 㤛, 㦝, ...
Exists, but is not a file: /home/jupyter-saintway/.cache/unihan_etl/downloads/Unihan.zip
Downloading Unihan.zip...
http://www.unicode.org/Public/UNIDATA/Unihan.zip to /home/jupyter-saintway/.cache/unihan_etl/downloads/Unihan.zip
Total size: 8.0Mb
100% [==================================================>]
extract_zip dest dir: /home/jupyter-saintway/.cache/unihan_etl/downloads

Loading data: /home/jupyter-saintway/.cache/unihan_etl/downloads/Unihan_DictionaryLikeData.txt, /home/jupyter-saintway/.cache/unihan_etl/downloads/Unihan_IRGSources.txt, /home/jupyter-saintway/.cache/unihan_etl/downloads/Unihan_NumericValues.txt, /home/jupyter-saintway/.cache/unihan_etl/downloads/Unihan_RadicalStrokeCounts.txt, /home/jupyter-saintway/.cache/unihan_etl/downloads/Unihan_Readings.txt, /home/jupyter-saintway/.cache/unihan_etl/downloads/Unihan_Variants.txt
Done loading data.
Collecting field data...
lookup for 好: good, excellent, fine; well
matches for "good": 㑘, 㑤, 㓛, 㘬, 㙉, 㚃, 㚒, 㚥, 㛦, 㜴, 㜺, 㝖, 㤛, 㦝, 㫑, 㭋, 㰬, 㱅, 㱡, 㳤, 㹏, 㹛, 㽥, 㾎, 㿲, 䃽, 䄈, 䄉, 䄐, 䄙, 䋬, 䌖, 䌝, 䌤, 䌧, 䌳, 䏂, 䐌, 䐚, 䑞, 䒁, 䒏, 䒐, 䙤, 䚱, 䚷, 䚸, 䜴, 䝕, 䝨, 䢇, 䣨, 䣩, 䤒, 䩂, 䩇, 䩊, 䫑, 䫢, 䮐, 䯭, 䱼, 䴆, 佳, 佼, 功, 吉, 咊, 善, 塡, 填, 好, 姤, 姽, 娥, 宓, 昌, 淑, 祉, 祥, 祦, 祯, 祺, 禎, 福, 禔, 禨, 羑, 羭, 腆, 臧, 良, 貨, 賍, 賢, 贒, 贓, 贜, 贤, 货, 赃, 醇, 頔, 顓, 颛, 餱, 𠿭, 𡠜, 𦈟, 𬱖, 良, 祥, 𦈜, 𫗯, 𫲗, 𬥄, 𰷭 
In [ ]:
from cihai.core import Cihai

c = Cihai()

if not c.unihan.is_bootstrapped:  # download and install Unihan to db
    c.unihan.bootstrap()

query = c.unihan.lookup_char('讀')
glyph = query.first()
In [ ]:
glyph.kJapaneseKun
Out[ ]:
'YOMU'
In [ ]:
glyph.kJapaneseOn
Out[ ]:
'TOKU TOU DOKU'
In [ ]:
glyph.kRSJapanese
In [ ]:
glyph.kZVariant
In [ ]:
glyph.kSemanticVariant
In [ ]:
glyph.kSimplifiedVariant
Out[ ]:
'U+8BFB'
In [ ]:
glyph.kTraditionalVariant
Out[ ]:
'U+8B80'
In [ ]:
glyph.kCompatibilityVariant
In [ ]:
glyph.kSpecializedSemanticVariant
In [ ]:
dir(glyph)
Out[ ]:
['__abstract__',
 '__annotations__',
 '__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__mapper__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__table__',
 '__weakref__',
 '_sa_automapbase_bookkeeping',
 '_sa_class_manager',
 '_sa_decl_prepare',
 '_sa_instance_state',
 '_sa_raise_deferred_config',
 '_sa_registry',
 'by_module',
 'char',
 'classes',
 'kAccountingNumeric',
 'kCangjie',
 'kCantonese',
 'kCheungBauer',
 'kCihaiT',
 'kCompatibilityVariant',
 'kDefinition',
 'kFenn',
 'kFourCornerCode',
 'kFrequency',
 'kGradeLevel',
 'kHDZRadBreak',
 'kHKGlyph',
 'kHangul',
 'kHanyuPinlu',
 'kHanyuPinyin',
 'kJapaneseKun',
 'kJapaneseOn',
 'kKorean',
 'kMandarin',
 'kOtherNumeric',
 'kPhonetic',
 'kPrimaryNumeric',
 'kRSAdobe_Japan1_6',
 'kRSJapanese',
 'kRSKanWa',
 'kRSKangXi',
 'kRSKorean',
 'kRSUnicode',
 'kSemanticVariant',
 'kSimplifiedVariant',
 'kSpecializedSemanticVariant',
 'kTang',
 'kTotalStrokes',
 'kTraditionalVariant',
 'kVietnamese',
 'kXHC1983',
 'kZVariant',
 'metadata',
 'prepare',
 'registry',
 'ucn']

Comments

2023-08-07