質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Python 3.x

    8930questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Mecab

    220questions

    Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

  • PyCharm

    205questions

    エディター・開発ツール

mecab-python3でnode.surfaceが単語ではなく文章全体を返してきます

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 595

masaya_97

score 1

入力された文章を分解してリストにしたい

初心者質問で申し訳ありません。
Python3.7でPyCharmを使いプログラムの勉強をしてる者です。
入力した文章を単語ごとに分けてリストに入れる、という処理を作ろうと思いました。
そこで、色々とウェブサイトを調べていたら、どうやらnode.surfaceで文章の単語を取得できるようだ、と理解したのですが、どうもそのように動作しないのです。
そこで、単にnode.surfaceを変数に格納してその変数をprintで出力してみたところ、単語ではなく文章全体が出てきました。
これは、もともとこういうものなのでしょうか? また、何かやり方を変えればnode.surfaceで単語だけを抽出できるのでしょうか? 誰か、教えていただけると幸いです。

処理結果

おしゃべりください:世界で一番人口の多い国は中国です。
世界で一番人口の多い国は中国です。
世界で一番人口の多い国は中国です。
で一番人口の多い国は中国です。
一番人口の多い国は中国です。
人口の多い国は中国です。
の多い国は中国です。
多い国は中国です。
国は中国です。
は中国です。
中国です。
です。
。

該当のソースコード

import MeCab
tagger = MeCab.Tagger ('-d /usr/local/lib/mecab/dic/ipadic')
text = input("おしゃべりください:")
tagger.parseToNode('')
node =tagger.parseToNode(text)

while node:
    word = node.surface
    print(word)
    node = node.next

試したこと

色々とウェブサイトを巡りましたが、同じコードを入れてるのに違う結果が出てきた時点でどうしようもなく、質問させていただきました。

補足情報(FW/ツールのバージョンなど)

mecab-python3 0.996.1
mecab-0.996

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hayataka2049

    2018/12/19 13:29

    tagger.parse(text)は何を返しますか?

    キャンセル

  • masaya_97

    2018/12/19 13:34

    上記のコードに以下の部分を追加(whileの上に)しましたところ、このような結果になりました。

    x = tagger.parse(text)
    print(x)

    世界 名詞,一般,*,*,*,*,世界,セカイ,セカイ
    で 助詞,格助詞,一般,*,*,*,で,デ,デ
    一番 名詞,副詞可能,*,*,*,*,一番,イチバン,イチバン
    人口 名詞,一般,*,*,*,*,人口,ジンコウ,ジンコー
    の 助詞,格助詞,一般,*,*,*,の,ノ,ノ
    多い 形容詞,自立,*,*,形容詞・アウオ段,基本形,多い,オオイ,オーイ
    国 名詞,一般,*,*,*,*,国,クニ,クニ
    は 助詞,係助詞,*,*,*,*,は,ハ,ワ
    中国 名詞,固有名詞,地域,国,*,*,中国,チュウゴク,チューゴク
    です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
    EOS

    キャンセル

  • hayataka2049

    2018/12/19 13:41

    解析そのものはちゃんと行えているようですが、node.surfaceの値が変という状態ですね。githubでissue上がってたので回答します

    キャンセル

回答 1

checkベストアンサー

+1

これですか。

node.surface() does not work as intended in version 0.996.1 · Issue #19 · SamuraiT/mecab-python3 · GitHub

現時点でユーザレベルでできることはなさそうなので、parseToNodeを使わない方向で逃げるか、mecab-python3のバージョンを下げるという後ろ向きな対応をすることになります。

バージョンを下げる場合の方法(環境によって多少異なる可能性はあるので、自分の環境に合ったpipを使ってください)。

pip uninstall mecab-python3
pip install mecab-python3==0.7

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/19 13:56

    ここまで調べていただいてありがとうございます! やっぱり、ライブラリ自体がおかしかったんですね。
    まだコードの方向を自在に変えれるほど理解できてはないので、とりあえず言われました通りバージョンを下げたところ、思ってた通りの挙動になり、リストの作成に成功できました。
    ありがとうございます!

    キャンセル

同じタグがついた質問を見る

  • Python 3.x

    8930questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Mecab

    220questions

    Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

  • PyCharm

    205questions

    エディター・開発ツール