Blog

  • ZipArchive でパスワード付き ZIP ファイルを作成する

    PHP で ZipArchive を利用したパスワード付き ZIP ファイルを Windows の標準機能で解凍すると、次のエラーが発生することがあります。

    エラー 0x80004005: エラーを特定できません

    (さらに…)
  • Word2Vec 用のモデルを作成する

    Word2Vec 用のモデルを作成する

    前回投稿した gensim についての知識のなさから、最新バージョンに対応した Word2Vec 用のモデルを見つけることができなかったので、自分でモデルを作成することにしました。検索能力の欠如ですね。

    今回は Wikipedia の記事を使ってモデルを作成していきます。

    まずは WikiExtractor を clone します。

    git clone https://github.com/attardi/wikiextractor.git

    新しくできた wikiextractor ディレクトリーに移動します。

    cd wikiextractor

    Wikipedia の記事 (XML ファイル) をダウンロードします。

    curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2

    容量がとても大きいので、このコードで実行するとダウンロードできない場合があります。その場合 Safari から直接ダウンロードします。

    ここから本文を抽出していきます。

    python setup.py install
    python WikiExtractor.py jawiki-latest-pages-articles.xml.bz2

    これにもだいぶ時間がかかります。できたら新しくtext というディレクトリができていますが、複数ファイルになっているのでこれを txt というディレクトリにひとまとめにします。

    find text/ | grep wiki | awk '{system("cat "$0" >> wiki.txt")}'

    これで wiki.txt という一つのファイルになりました。次から Word2Vec 用のモデル作成のためのデータ成形に入ります。

    成形には gensim と Mecab を使用します。

    pip install gensim
    pip install mecab

    ここでインストールされた gensimの バージョンは現時点で4.1.2です。数年前に大きな変更があり、バージョン3と4の間には記述方法に大きな違いがあるので注意が必要です。

    次に記事を分かち書きしていきます。

    mecab -Owakati wiki.txt -o wiki_wakati.txt -b 65536

    このコマンド b-65536 という引数は、1行当たりの文字数を表します。デフォルトの設定だと 8192 だそうですが、の状態だと

    input-buffer overflow. The line is split. use -b #SIZE option

    というエラーが出てしまいます。特にwikipediaはデータが多いので、ここの数値はその都度試していくしかなさそうです。

    記事にはバイナリ文字も含まれているので nkf を利用して utf-8 に変換していきます。

    ukfのインストールは下記の通りです。

    brew install nkf

    下記を記述して nkf を使用します。

    nkf -w --overwrite wiki_wakati.txt

    以上でテキスト成形が終わったのでモデル作成に入ります。モデル作成のためのファイル make_model.py を作成します。そして下記を記述します。

    from gensim.models import word2vec
    import logging
    
    logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
    sentences = word2vec.Text8Corpus('./wiki_wakati.txt')
    
    model = word2vec.Word2Vec(sentences, size=200, min_count=20, window=15)
    model.save("./wiki.model")

    以上を実行してしばらくすると、wiki.model が完成します。

  • gensim 3 と 4 の Model 読み込み方法の違い

    gensim 3 と 4 の Model 読み込み方法の違い

    Word2Vec で遊ぶために gensim で model を読み込もうと思ったら、エラーが出たので対処法を確認しようと思います。

    今回 gensim のバージョンは 4.1.2 を使用しました。

    model = gensim.models.KeyedVectors.load_word2vec_format('ファイル名', binary=True)

    はじめ、このコードで書いたところ下記のようなエラーが出ました。

    UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: inv
    (さらに…)
  • macOS Sequoiaでローカルウェブページが開けない

    macOS Sequoiaでローカルウェブページが開けない

    macOS Sequoia にアップデートしたら、Google Chrome や Brave など Safari 以外のブラウザーでローカルのウェブページを開くと次のエラーが表示されてしまいます。

    (さらに…)
  • Scrapy と Django と

    Django でプロジェクトを作成し、その一部で Scrapy を使いたい。そして、Scrapy プロジェクトで Django のモデルなどを参照したい。

    (さらに…)
  • JavaScript で表の並べ替え

    表 (table) の表見出し (th) をクリックして表本体 (tbody) の行を並び替えできるようにするためのコードです。

    (さらに…)
  • JavaScript でリストのドラッグ&ドロップ

    順番付きリスト (OL) や順番なしリスト (UL) のリスト項目 (LI) をドラッグ&ドロップで順序を入れ替えできるようにするためのコードです。

    (さらに…)
  • M1 Mac で LINE の日本語言語モデル

    M1 Mac で LINE の日本語言語モデル

    LINE が HuggingFace Hub で公開している日本語言語モデル japanese-large-lm を M1 Mac で動かしてみました。

    (さらに…)
  • Windows のファイル共有が遅い

    Windows のファイル共有が遅い

    macOS と Windows のファイル共有は SMB 接続で行い、通信には SMB パケット署名がされます。

    しかし、信頼できる LAN でパケット署名が不要な場合は、無効にすることでファイル共有を早くできます。

    (さらに…)
  • FreePBX で取次転送

    FreePBX で取次転送

    FreePBX で構築した IP 電話システムは、普通の電話システムと同様に一度受信した通話を別の内線に転送できます。転送方法の設定は機能コード管理で確認できます。

    (さらに…)