Shunya Ueta

KyTeaをPythonで扱えるMykyteaを使うために必要なこと

テキスト解析機 KyTea

KyTeaを業務で使う機会があり、Python wrapper である Mykytea を使ってみたのですが、poetry や pip で Mykytea をインストールするだけでは、

Library not loaded: /usr/local/lib/libkytea.0.dylib in version = "0.1.5"

上記のエラーが出力され、KyTea を使うことができませんでした。 Mykytea のリポジトリに issue 1 を立てて、@chezou さんにお聞きしてみたところ、

Good point. Mykytea wheel assumes that kytea is installed under /usr/local/lib, while your kytea exists another place. This should be Mykytea issue and there are two options we can avoid it like:

  1. Use delocate, like Linux’s audit-wheel https://realpython.com/python-wheels/
  2. Install from source using wheel instead.

とのことで、/usr/local/lib にKyTea がインストールされていることを前提としているので、KyTea自身をソースコードからビルドすることをおすすめするとご助言をいただくことができました。

C++,C に疎いので知らなかったのですが、dylibという仕組みで共通ライブラリとして扱えるんですね。

Makefile によるkyteaのビルドと、quick check の自動化

自分はMakefile を好んで使うのですが、以下のようなタスクを作成することで、KyTeaのビルドと、quick check をワンライナーで行えるようにしました。

.PHONY: keytea-install
keytea-install: ## install and build kytea
	curl -SsL -o kytea.tar.gz http://www.phontron.com/kytea/download/kytea-0.4.7.tar.gz
	mkdir -p /tmp/kytea
	tar -xzvf kytea.tar.gz -C /tmp/kytea --strip-components 1
	cd /tmp/kytea && ./configure && make -j4 && make install
	rm kytea.tar.gz

.PHONY: kytea-test
kytea-test: ## check kytea lib installed by C++ source code build
	echo "山田太郎はコーヒーを買って飲んだ。" | kytea
	poetry run python -c "import Mykytea"

使用した pyproject.toml は以下です。

[tool.poetry]
name = "kytea-test"
version = "0.1.0"
description = ""
authors = ["]

[tool.poetry.dependencies]
python = "^3.7"
kytea = "~=0.1.3"

[tool.poetry.dev-dependencies]
pytest = "^5.2"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

機械学習タスクでは外部のデータに依存することが多いですが、Makefile でその検査を自動化することができるので愛用しています。

---

関連しているかもしれない記事


📮 📧 🐏: 記事への感想のおたよりをおまちしてます。 お気軽にお送りください。 メールアドレス入力があればメールで返信させていただきます。 もちろんお返事を希望せずに単なる感想だけでも大歓迎です。

このサイトの更新情報をRSSで配信しています。 お好きなフィードリーダーで購読してみてください。

このウェブサイトの運営や著者の活動を支援していただける方を募集しています。 もしよろしければ、Buy Me a Coffee からサポート(投げ銭)していただけると、著者の活動のモチベーションに繋がります✨

#python #nlp