先日MENTAで自然言語処理の相談を受けていてその中でMecabのテキストデータに対して形態素解析を実行する関数であるMecab.tagger.parseToNode()で謎のエラーが発生するという相談を受けたのでその時の原因と解決法をメモしておきます。
エラー内容
該当のコードはこんな感じ、Mecabはインストール済みの前提で進めます。
import Mecab text = 'テキストデータ' tagger.parse('') tagger = MeCab.Tagger("-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/") node = tagger.parseToNode(text) print(node)
これを実行すると形態素解析の結果が格納されているはずの変数nodeの中身がNoneになっていることがあります
解決策
色々調べた感じだとtagger.parseToNode()は引数で指定した文字型のデータが多すぎると、エラーを吐くのではなく、戻り値にNoneを返すようにです。なので解決策はtagger.parseToNode()に入れる文字列を減らしてあげると解決します。個人的にな体感ではtagger.parseToNode()に引数の文字列が数万文字だとこのエラーが起こる気がします。
# 文字列の長さを確認する print(len(text)) #文字列の長さをインデックスで指定する(最初の100文字を抽出する場合) text[:100]
<イメージ例>
# 最初の100文字にだけを形態素解析を実行する node = tagger.parseToNode(text[:100]) print(node)
関連記事:Google ColaboratoryにMecabをインストールして形態素解析を行うサンプルコード
コメント
[…] 関連記事:MeCabのtagger.parseToNodeの戻り値がNoneになる原因と解決法 スポンサーリンク (adsbygoogle = window.adsbygoogle || []).push({}); シェアする Twitter Facebook はてブ Pocket LINE コピー […]