

初めまして。表題の通り、PythonにてMeCab、NEogold辞書で形態素解析をしたいのですが、結果が上手く出せません。  
環境：Windows10 64bit、Anaconda3、jupyter notebook  
※辞書はコード中のフォルダにインストールしてあります。

以下のコードは実行すると正しく結果が出力されているように見えます。

[code]

    import MeCab
    # ipadic
    tagger = MeCab.Tagger('-d C:\ProgramData\Mecab\dic\ipadic')
    result = tagger.parse("すもももももももものうち")
    print(result)
    
[/code]

↓出力結果

[code]

    すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
    も   助詞,係助詞,*,*,*,*,も,モ,モ
    もも  名詞,一般,*,*,*,*,もも,モモ,モモ
    も   助詞,係助詞,*,*,*,*,も,モ,モ
    もも  名詞,一般,*,*,*,*,もも,モモ,モモ
    の   助詞,連体化,*,*,*,*,の,ノ,ノ
    うち  名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
    EOS
    
[/code]

[code]

    # neologd
    tagger = MeCab.Tagger('-d C:\ProgramData\Mecab\dic\ipadic-neologd')
    result = tagger.parse("すもももももももものうち")
    print(result)
    
[/code]

↓出力結果

[code]

    すもももももももものうち    名詞,固有名詞,一般,*,*,*,すもももももももものうち,スモモモモモモモモノウチ,スモモモモモモモモノウチ
    EOS
    
[/code]

しかし、以下を実行するとしばらくしてから（なぜか時間がかかる）エラーになります。

[code]

    # neologd
    tagger = MeCab.Tagger('-d C:\ProgramData\Mecab\dic\ipadic-neologd')
    result = tagger.parse("JO")
    print(result)
    
[/code]

エラー発生

[code]

    Exception in callback BaseAsyncIOLoop._handle_events(928, 1)
    handle: <Handle BaseAsyncIOLoop._handle_events(928, 1)>
    Traceback (most recent call last):
      File "C:\...\Anaconda3\lib\asyncio\events.py", line 88, in _run
        self._context.run(self._callback, *self._args)
      File "C:\...\Anaconda3\lib\site-packages\tornado\platform\asyncio.py", line 143, in _handle_events
        handler_func(fileobj, events)
      File "C:\...\Anaconda3\lib\site-packages\zmq\eventloop\zmqstream.py", line 456, in _handle_events
        self._handle_recv()
      File "C:\...\Anaconda3\lib\site-packages\zmq\eventloop\zmqstream.py", line 486, in _handle_recv
        self._run_callback(callback, msg)
      File "C:\...\Anaconda3\lib\site-packages\zmq\eventloop\zmqstream.py", line 438, in _run_callback
        callback(*args, **kwargs)
      File "C:\...\Anaconda3\lib\site-packages\ipykernel\iostream.py", line 120, in _handle_event
        event_f()
      File "C:\...\Anaconda3\lib\site-packages\ipykernel\iostream.py", line 382, in _flush
        parent=self.parent_header, ident=self.topic)
      File "C:\...\Anaconda3\lib\site-packages\jupyter_client\session.py", line 737, in send
        to_send = self.serialize(msg, ident)
      File "C:\...\Anaconda3\lib\site-packages\jupyter_client\session.py", line 625, in serialize
        content = self.pack(content)
      File "C:\...\Anaconda3\lib\site-packages\jupyter_client\session.py", line 103, in <lambda>
        ensure_ascii=False, allow_nan=False,
      File "C:\...\Anaconda3\lib\site-packages\zmq\utils\jsonapi.py", line 43, in dumps
        s = s.encode('utf8')
    UnicodeEncodeError: 'utf-8' codec can't encode characters in position 310-311: surrogates not allowed
    
[/code]

また、以下のように書き換えると、結果がエスケープ文字列で表示されます。

[code]

    node = tagger.parseToNode("JO")
    word = node.surface # 分解された単語部分
    wclass = node.feature.split(',') # 単語の説明部分（カンマで区切ってリスト化）
    # 先頭を飛ばして次へ
    node = node.next
    word = node.surface # 分解された単語部分
    wclass = node.feature.split(',') # 単語の説明部分（カンマで区切ってリスト化）
    print(word)
    print(wclass)
    
[/code]

↓出力結果

[code]

    JO
    ['̾\udcbb\udcec', '\udcb8\udcc7ͭ̾\udcbb\udcec', '\udcc1ȿ\udca5', '*', '*', '*', '*']
    
[/code]

このような環境で、Twitterのタイムラインを形態素解析しているですが、このようなエスケープ文字列の単語として識別される単語がいくつも出てきてしまい、正しいのかよくわからない状況です。

これは、辞書のインストール・作成の仕方に問題があるのでしょうか？  
あるいは、文字列のエンコードの問題、その他の問題などでしょうか？  
分かる方いましたら、ご教授いただきたいです。

ちなみに、コマンドプロンプトでPythonを起動して実行すると以下のような結果になります。

[code]

    >>> tagger = MeCab.Tagger('-d C:\ProgramData\Mecab\dic\ipadic-neologd')
    >>> result = tagger.parse("JO")
    >>> print(result)
    JO      ̾��,��ͭ̾��,�ȿ�,*,*,*,*
    EOS
    
[/code]

以上、よろしくお願いいたします。

追記

[code]

    import MeCab
    tagger = MeCab.Tagger('-d C:\ProgramData\Mecab\dic\ipadic-neologd')
    info = tagger.dictionary_info()
    print('neologd')
    print(info.charset)
    print(info.version)
    print('ipadic')
    tagger = MeCab.Tagger('-d C:\ProgramData\Mecab\dic\ipadic')
    info = tagger.dictionary_info()
    print(info.charset)
    print(info.version)
    
[/code]

↓出力結果  
neologd  
-utf-8  
102  
ipadic  
UTF-8  
102

使ったコミット  
<https://github.com/neologd/mecab-ipadic-
neologd/commit/45315fdad28456d3e98d5b36bea46a8010235cac>


CC BY-SA 4.0
2020-09-14T17:10:22.713
70390
2020-09-15T07:34:27.920
2020-09-15T07:34:27.920
41902
41902
question
python anaconda jupyter-notebook mecab 文字化け
pythonでMeCab、neologdで形態素解析すると結果が文字化け（ユニコードエスケープ）する