【副業実験記#6】Python+GiNZAで形態素解析して日本語テキストを自動改行してみた話

子育てSEパパのIT×AI×副業ラボ_副業実験記_6 副業実験記

つづき。


はじめに

引き続き、雑学動画自動生成ツールを自作できないか、検討してみているお話です。

今回は、自然言語処理ライブラリである「GiNZA」について、雑学動画自動生成ツールで使えるか検証してみた話です。

検証準備

Pythonのインストール

「Python」で雑学動画自動生成ツールを作るつもりなので、検証でも同様に使います。

詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。

PyCharmのインストール

Pythonでの開発を楽にしてくれる統合開発環境「PyCharm」を使います。

Pythonで雑学動画自動生成ツールを作る際に使うつもりなので、検証でも同様に使います。

詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。

検証用Pythonプロジェクトおよびvenvの作成

検証用「Pythonプロジェクト」を作成します。

PyCharmで簡単に作成できます。

Pythonプロジェクトを作成したら、その中で「venv」(Python仮想環境)を作成しておきます。

詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。

Pythonパッケージのインストール

今回は、以下のパッケージを使用します。

Noパッケージ説明
1ja-ginza-electraGiNZAにELECTRAという日本語用の事前学習モデルを組み合わせた高精度版です。

検証用Pythonプロジェクトでvenvを起動し、のパッケージをインストールします。

ターミナルでコマンド実行してインストールする方法やPyCharm上で画面を操作してインストールする方法がありますが、今回は、PyCharm上で画面を操作し、venvにパッケージをインストールします。

インストールする「GiNZA」のパッケージですが、PyCharm上で検索すると、「ginza」というキーワードが入ったパッケージがいくつか表示されました。

これらのパッケージについて少し調べたところ、以下のような結果となりました。

Noパッケージ調査結果採用可否
1django-loginza・GiNZAとは無関係なパッケージ
2ginza・古い
・ja-ginzaモデルを簡単に使えるようにするためのラッパー
3ginza-transformers・ja-ginza-electraで使用されているパッケージ
4ja-ginza・新しい
・標準モデル(メモリ消費は軽め、処理速度は速め)
5ja-ginza-dict・ja-ginzaとja-ginza-electraで使用されているパッケージ
6ja-ginza-electra・新しい
・高精度モデル(メモリ消費が重め、処理速度は遅め)

ということで、「ja-ginza」と「ja-ginza-electra」を選択して使えば良さそうです。

今回は、「ja-ginza-electra」をインストールして使います。

もし、メモリ消費や処理速度の関係で、ツール実行環境で使えないようであれば「ja-ginza」に切り替える作戦でいきます。

検証してみた

GiNZAを使用した日本語テキスト折り返し処理の流れ

以下の流れでGiNZAの日本語モデルを使っていくようでした。

  1. 「spaCy」を使いGiNZAの日本語モデルを読み込む
  2. 読み込んだ日本語モデルの言語オブジェクトを使い、日本語テキストを解析する
  3. 解析した結果を使い、文書や単語、句などを操作する

GiNZAを使用した日本語テキスト折り返し処理の試し

では実際に、GiNZAの日本語モデル「ja_ginza_electra」を使って、日本語テキストを折り返してみます

GiNZAの日本語モデル「ja_ginza_electra」を使ったPythonサンプルコード

import spacy

# GiNZAの日本語モデルを読み込み
nlp = spacy.load("ja_ginza_electra")

def split_japanese_text(text, max_chars=20):
    doc = nlp(text)
    lines = []
    current_line = ""

    for token in doc:
        # 句読点で一度改行を強制(自然な切れ目)
        if token.text in "。!?":
            current_line += token.text
            lines.append(current_line.strip())
            current_line = ""
            continue

        # 通常のトークン処理
        if len(current_line + token.text) > max_chars:
            lines.append(current_line.strip())
            current_line = ""

        current_line += token.text

    if current_line:
        lines.append(current_line.strip())

    return "\n".join(lines)

# テスト
test_text = "私は昨日、友達と映画を見に行きました。そして今日は家でゆっくりしています。"
print(split_japanese_text(test_text, max_chars=10))

Pythonサンプルコード実行結果

私は昨日、友達と映画
を見に行きました。
そして今日は家で
ゆっくりしています。

ある程度、日本語テキストを自然に折り返せることが分かったので、雑学動画自動生成ツールで使えると感じました。

おわりに

「GiNZA」ですが、確かに日本語テキストを自然に折り返せることが分かりました。

サンプルコードでは、単純な日本語しか使っていないので、実際に雑学動画の日本語テキストで、どのような折り返しになるか確認していきたいです。

例えば、括弧が出た場合にどうするか、など、折り返しを見てから調整していきたいと思います。

これで、日本語テキストを折り返すために「GiNZA」を使えば良いことが分かったので、次の技術やツールの検証に移ろうと思います。

ちなみに、検証用のコードは、ChatGPT(GPT-4oモデル)に出力してもらったものを微修正したものです。

初めて使う技術の最小限のコードを簡単に確認できるので、便利だと思いました。


今回の記事も、同じように副業に悩んでいる人、手探りで取り組んでいる人にとって、何かの参考になれば嬉しいです。

これからも記録を続けていく予定なので、よければフォローしてもらえると嬉しいです。


つづき。

タイトルとURLをコピーしました