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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Python 3.x

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

Mecab

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

PyCharm

エディター・開発ツール

解決済

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

masaya_math
masaya_math

総合スコア16

Python 3.x

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

Mecab

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

PyCharm

エディター・開発ツール

1回答

0グッド

0クリップ

4998閲覧

投稿2018/12/19 04:17

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

初心者質問で申し訳ありません。
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ページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

hayataka2049

2018/12/19 04:29

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

2018/12/19 04:34

上記のコードに以下の部分を追加(whileの上に)しましたところ、このような結果になりました。 x = tagger.parse(text) print(x) 世界 名詞,一般,*,*,*,*,世界,セカイ,セカイ で 助詞,格助詞,一般,*,*,*,で,デ,デ 一番 名詞,副詞可能,*,*,*,*,一番,イチバン,イチバン 人口 名詞,一般,*,*,*,*,人口,ジンコウ,ジンコー の 助詞,格助詞,一般,*,*,*,の,ノ,ノ 多い 形容詞,自立,*,*,形容詞・アウオ段,基本形,多い,オオイ,オーイ 国 名詞,一般,*,*,*,*,国,クニ,クニ は 助詞,係助詞,*,*,*,*,は,ハ,ワ 中国 名詞,固有名詞,地域,国,*,*,中国,チュウゴク,チューゴク です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス EOS
hayataka2049

2018/12/19 04:41

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

回答1

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 04:45

編集2018/12/19 04:46
hayataka2049

総合スコア30892

masaya_math👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

masaya_math

2018/12/19 04:56

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

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

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

Python 3.x

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

Mecab

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

PyCharm

エディター・開発ツール