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

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

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

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

Q&A

解決済

1回答

1776閲覧

pythonのmecabの分かち書きについての質問です

hiro329

総合スコア19

Python 3.x

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

0グッド

0クリップ

投稿2018/11/27 01:15

入力されてきた文相に対して、名詞だけを抜き取る分かち書きをしたいと思っております。
いろいろと、検索してカスタマイズして最終的に以下のコードに落ち着きました。

import MeCab mecab = MeCab.Tagger("mecabrc") # MeCabを使って形態素解析をします。 def ma_parse(sentence, fileter="名詞"): node = mecab.parseToNode(sentence) while node: if node.feature.startswith('名詞'): yield node.surface node = node.next while True: sentence = input('入力してください') words = [word for word in ma_parse(sentence)] print(words)

そこで質問なのですが、 yieldは、generaterで使うものだと本に書いてあったのですが、ここではどのような記述方法になるのでしょうか。
また、mecabのライブラリの使い方がいまいちよくわからなく、理解できていません。

入力された、文章がma_parseにわたっているとは思うのですが、形態素分析を行っていないのに、ワードごとになぜ、区切られてうまく動くのかもよくわかりません。
出来ましたら、各行が大まかにどんな役割をしているか教えていただけると幸いです。
素人的な質問で大変もうしわけないのですが、どうぞよろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

yieldは、generaterで使うものだと本に書いてあったのですが、ここではどのような記述方法になるのでしょうか

質問文のコードもジェネレータ関数を使っています。名詞ならyieldする、名詞以外はyieldせず次の単語を見るというコードです。

形態素分析を行っていないのに、ワードごとになぜ、区切られてうまく動くのかもよくわかりません

MeCab.Tagger.parseToNodeが形態素解析を行うメソッドです。

投稿2018/11/27 02:03

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro329

2018/11/27 02:30

回答いただきありがとうございます。 大変よくわかりました。 あと、追加で質問なのですが、形態素分析で分かち書きをした後のデータの取り扱いですが、上記では if if node.feature.startswith('名詞'): とありますが、形態素分析を行うと、各要素に分かれ、名詞、動詞などと表示されますが、 node.feature.startswithで、各要素の要素を選別でき、 yield node.surfaceで、それにあたる名詞と指定したなら、名詞、動詞と指定したならば、動詞が取れる元として、定型的な書き方として考えてもいいのでしょうか。 Mecabの使い方のマニュアルは、あるのでしょうか? とても初歩的な質問かもしれませんが、なにとぞ回答いただけると幸いです。 よろしくお願いいたします。
hayataka2049

2018/11/27 02:41

node.surfaceとnode.featureはそれぞれノードの表層の文字列と素性の文字列です。startswithはpythonの文字列のメソッドですね。 動いている仕組みを理解すれば書き方はこれ一つではないことに気づくと思います。 マニュアルというか公式のサイトはここです。 http://taku910.github.io/mecab/ バインディングのページ http://taku910.github.io/mecab/bindings.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問