はじめに
deepblueインターン生の中山です。
最近、言語処理のパッケージでSudachiをColaboratory上で使おうと勉強していました。ところが、SudachiPyのチュートリアルの実行段階で躓いてしまい、どうしたものかと困っていました。試行錯誤の結果、問題なく動いたので、方法について簡単にご説明します。
対処法については、本記事の後半にあるので、対処法について知りたい方は後半まで移動してください。
Sudachiとは
Sudachiは日本語形態素解析器です。
Sudachiが具体的にできることは、「テキスト分割」「品詞付与」「正規化処理」の三つの操作です。Sudachiの詳細については、GitHubをご確認ください。本記事では、Python版のSudachiPyを取り扱います(GitHub)。
発生したエラー
まず、最初にpip
でインストールをしたのですが、インストールは問題なく実行できました。
!pip install sudachipy sudachidict_core
# Collecting sudachipy
# Downloading SudachiPy-0.5.2.tar.gz (70 kB)
# |████████████████████████████████| 70 kB 2.9 MB/s
# Collecting sudachidict_core
# Downloading SudachiDict-core-20210802.tar.gz (9.1 kB)
# Collecting sortedcontainers~=2.1.0
# Downloading sortedcontainers-2.1.0-py2.py3-none-any.whl (28 kB)
# Collecting dartsclone~=0.9.0
# Downloading dartsclone-0.9.0-cp37-cp37m-manylinux1_x86_64.whl (473 kB)
# |████████████████████████████████| 473 kB 18.3 MB/s
# Requirement already satisfied: Cython in /usr/local/lib/python3.7/dist-packages (from dartsclone~=0.9.0->sudachipy) (0.29.24)
# Building wheels for collected packages: sudachipy, sudachidict-core
# Building wheel for sudachipy (setup.py) ... done
# Created wheel for sudachipy: filename=SudachiPy-0.5.2-cp37-cp37m-linux_x86_64.whl size=870411 sha256=aabbaf3efe3232ea15128049cea9365e8b3dfd0bf87e08c1e91f67ea49492b51
# Stored in directory: /root/.cache/pip/wheels/43/72/0f/1c62895bde30566c65602f15ddbfa0b2bbc273f8c43c190a45
# Building wheel for sudachidict-core (setup.py) ... done
# Created wheel for sudachidict-core: filename=SudachiDict_core-20210802-py3-none-any.whl size=71418512 sha256=6e80b658191ca18a1876fa2fb9feac4813f8f16278d817f905166244d9f98705
# Stored in directory: /root/.cache/pip/wheels/91/e8/21/e80d212743835d87bb5e7eca81b6abef6d8cb67a294007a837
# Successfully built sudachipy sudachidict-core
# Installing collected packages: sortedcontainers, dartsclone, sudachipy, sudachidict-core
# Attempting uninstall: sortedcontainers
# Found existing installation: sortedcontainers 2.4.0
# Uninstalling sortedcontainers-2.4.0:
# Successfully uninstalled sortedcontainers-2.4.0
# Successfully installed dartsclone-0.9.0 sortedcontainers-2.1.0 sudachidict-core-20210802 sudachipy-0.5.2
しかし、ここからが問題で、tokenizer
をインポートできませんでした。
from sudachipy import tokenizer
# ---------------------------------------------------------------------------
# ContextualVersionConflict Traceback (most recent call last)
# <ipython-input-4-123a89901eb3> in <module>()
# ----> 1 from sudachipy import tokenizer
# ――――――――――――――4 frames――――――――――――――――――――
# /usr/local/lib/python3.7/dist-packages/pkg_resources/__init__.py in resolve(self, requirements, env, installer, replace_conflicting, extras)
# 775 # Oops, the "best" so far conflicts with a dependency
# 776 dependent_req = required_by[req]
# --> 777 raise VersionConflict(dist, req).with_context(dependent_req)
# 778
# 779 # push the new requirements onto the stack
# ContextualVersionConflict: (sortedcontainers 2.4.0 (/usr/local/lib/python3.7/dist-packages), Requirement.parse('sortedcontainers~=2.1.0'), {'sudachipy'})
最後の箇所より、ContextualVersionConflict
エラーが表示されていることがわかります。日本語に直すと、「コンテクストバージョンの衝突」です。「sortedcontainers
というパッケージに問題があり、sortedcontainers~=2.1.0
にして欲しい」と言っています。私が試したことは以下の通りです。
試したこと1: 中身の確認
上記エラーのContextualVersionConflict: (sortedcontainers 2.4.0 (/usr/local/lib/python3.7/dist-packages), Requirement.parse('sortedcontainers~=2.1.0'), {'sudachipy'})
から、sortedcontainers
が問題だとわかりました。そこで、sortedcontainers
のバージョンを確認しました。
!pip show sortedcontainers
# Name: sortedcontainers
# Version: 2.1.0
# Summary: Sorted Containers -- Sorted List, Sorted Dict, Sorted Set
# Home-page: http://www.grantjenks.com/docs/sortedcontainers/
# Author: Grant Jenks
# Author-email: contact@grantjenks.com
# License: Apache 2.0
# Location: /usr/local/lib/python3.7/dist-packages
# Requires:
# Required-by: SudachiPy, intervaltree, distributed
VersionもLocationも問題ないように見えたため、疑問に思いました。
試したこと2: アンインストールして再インストール
どこか間違っている箇所があるのかなと思い、一度削除してやり直すことにしました。
!pip uninstall sortedcontainers
!pip install sortedcontainers==2.1.0
# Found existing installation: sortedcontainers 2.1.0
# Uninstalling sortedcontainers-2.1.0:
# Would remove:
# /usr/local/lib/python3.7/dist-packages/sortedcontainers-2.1.0.dist-info/*
# /usr/local/lib/python3.7/dist-packages/sortedcontainers/*
# Proceed (y/n)? y
# Successfully uninstalled sortedcontainers-2.1.0
# Collecting sortedcontainers==2.1.0
# Using cached sortedcontainers-2.1.0-py2.py3-none-any.whl (28 kB)
# Installing collected packages: sortedcontainers
# Successfully installed sortedcontainers-2.1.0
上記を実行してもなお、from sudachipy import tokenizer
の実行時にエラーが出てしまいました。その後も、何度かランタイムを出荷時設定にリセットし、実行を試みたのですが、上手くできずに困っていました。最終的には、上手いことできたので、そのプロセスを下記に示します。
対処法
実際の対処法についてご説明します。あくまで一例なので、ご留意ください。記事執筆現在は2021年8月16日です。
Step.0|ランタイムを出荷時設定にリセット
これは、実行途中の場合限定ですが、ランタイムを出荷時設定にリセットします。ランタイム > ランタイムを出荷時設定にリセット
から実行できます。最初から実行している方や、既にリセットされている場合は、気にしなくて大丈夫です。
Step.1|インストールの実行
今まで通り、sudachipy
とsudachidict_core
をインストールします。versionを指定する必要はないです。
!pip install sudachipy sudachidict_core
Step.2|ランタイムを再実行
続いて、ランタイムを再実行します。ランタイム > ランタイムを再実行
から操作ができます。
Step.3|インポートの実行
最後に、今まで通りのインポートをします。
from sudachipy import tokenizer
全くエラーが出ず、実行ができました。色々試したわりには、ランタイムを再実行するだけで良かったのかと思いました。
さいごに
これで、Sudachiのチュートリアル実行時のContextualVersionConflictエラーについての説明はおしまいです。簡単に対処できるにも拘らず、私の技術不足のせいで手間取ってしまいました。お困りの方がいたら是非試してみてください。