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

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

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

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

Mecab

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

解決済

Mecabの辞書の反映について

yasutin
yasutin

総合スコア34

Python 3.x

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

Mecab

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

2回答

0グッド

0クリップ

234閲覧

投稿2022/12/06 16:03

前提

mecabを用いて楽天市場のレビューを形態素解析し、頻出単語を抽出するプログラムを書いています。

実現したいこと

・mecabのOchasenとipadicという辞書を反映させたい。

発生している問題・エラーメッセージ

![頻出語彙ランキング20](https://ddjkaamml8q8x.cloudfront.net/questions/2022-12-07/5a5e848f-d381-46f7-acf9-a4b36f03794b.png) ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-12-07/cb26f847-356d-41ea-85f3-1d6207b1fe36.png) この写真の通り、辞書が反映されないと解析できない語彙が多く存在してしまう。

該当のソースコード

python

1# coding: utf-8 2import csv 3import pandas as pd 4import MeCab 5import collections 6import seaborn as sns 7import matplotlib.pyplot as plt 8import japanize_matplotlib 9 10files = open(r"C:\Users\Yasu\Documents\情報科学特別演習\csv\text_October_maximum.csv",encoding="utf-8",errors="ignore") 11 12data = pd.read_csv(files) 13message = data["text"] 14messagelst = message.astype(str).tolist() 15messagestr = "".join(messagelst) 16 17 18mecab = MeCab.Tagger("-Ochasen") 19 20node = mecab.parseToNode(messagestr) 21words=[] 22while node: 23 hinshi = node.feature.split(",")[0] 24 if hinshi in ["名詞","動詞","形容詞"]: 25 origin = node.feature.split(",")[6] 26 if node.surface != "*": 27 words.append(origin) 28 node = node.next 29 30c = collections.Counter(words) 31sns.set(context="talk",font="IPAexGothic") 32fig, ax = plt.subplots(figsize=(8,8)) 33sns.countplot(y=words,order=[i[0] for i in c.most_common(20)]) 34 35plt.show() 36 37 38

試したこと

Ochasenがインストールされているのかpower shellで確認しようとしたが、結局インストールされていない?されているかされていないのかよくわからなかった。
確認した

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

IDLE

以下のような質問にはグッドを送りましょう

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

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

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

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

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

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

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

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

回答2

0

ベストアンサー

ただのコードの間違いでしょう。いったいどうしてこんなコードにしたのか自分で説明できますか? 実際にデータを見てみましたか?

plain

1>>> import MeCab 2>>> mecab = MeCab.Tagger("-Ochasen") 3>>> node = mecab.parseToNode('コラーゲンを飲んで美しく保っています') 4>>> while node: 5... print(node.surface, node.feature) 6... node = node.next 7 BOS/EOS,*,*,*,*,*,*,*,* 8コラーゲン 名詞,一般,*,*,*,*,* 9を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 10飲ん 動詞,自立,*,*,五段・マ行,連用タ接続,飲む,ノン,ノン 11で 助詞,接続助詞,*,*,*,*,で,デ,デ 12美しく 形容詞,自立,*,*,形容詞・イ段,連用テ接続,美しい,ウツクシク,ウツクシク 13保っ 動詞,自立,*,*,五段・タ行,連用タ接続,保つ,タモッ,タモッ 14て 助詞,接続助詞,*,*,*,*,て,テ,テ 15い 動詞,非自立,*,*,一段,連用形,いる,イ,イ 16ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス 17 BOS/EOS,*,*,*,*,*,*,*,*

というような解析結果に対して、質問のコードでは

if node.surface != "*": words.append(origin)

としていますが、表層形(surface)が * で無ければ原形(origin)を取得する、というのはどういう意図なんでしょう?
(あと、 * が全角なんですが、本当は * と書きたかったのでしょう)

コラーゲンの行は

コラーゲン 名詞,一般,*,*,*,*,*

となっていて、表層形は コラーゲン で *ではない ので、if文に引っかかって原形の * が追加されます。
コードは書かれた通りに動いています。

本来やりたかったことは、
原形が * でない時は原形を、原形が * の時は表層形を取得する
ではなかったでしょうか?


ついでに。

"-Ochasen"は出力フォーマットの指定です。

parseToNodeは挙動が安定してない感じがあります。環境に依ると思いますが手元では余計なBOS/EOSが出てます。parseメソッドで生のテキストでの出力を取得して文字列操作した方がよい面が多いです。

plain

1>>> mecab.parse('コラーゲンを飲んで美しく保っています') 2'コラーゲン\t名詞,一般,*,*,*,*,*\nを\t助詞,格助詞,一般,*,*,*,を,ヲ,ヲ\n飲ん\t動詞,自立,*,*,五段・マ行,連用タ接続,飲む,ノン,ノン\nで\t助詞,接続助詞,*,*,*,*,で,デ,デ\n美しく\t形容詞,自立,*,*,形容詞・イ段,連用テ接続,美しい,ウツクシク,ウツクシク\n保っ\t動詞,自立,*,*,五段・タ行,連用タ接続,保つ,タモッ,タモッ\nて\t助詞,接続助詞,*,*,*,*,て,テ,テ\nい\t動詞,非自立,*,*,一段,連用形,いる,イ,イ\nます\t助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス\nEOS\n'

投稿2022/12/07 00:07

編集2022/12/07 08:34
quickquip

総合スコア10419

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

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

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

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

回答へのコメント

yasutin

2022/12/07 08:55 編集

回答ありがとうございます。 if origin == "*": words.append(node.surface) else: words.append(origin) ご指摘の通りです。 ずっと悩んでいた”*”の排除もできました。 ほんとうにありがとうございました。

0

公式にある辞書って、ダウンロード&インストールされましたか?

ページ内検索ワード「MeCab 用の辞書」
https://taku910.github.io/mecab/#download

投稿2022/12/06 16:09

nnahito

総合スコア1984

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

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

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

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

回答へのコメント

yasutin

2022/12/07 09:00 編集

回答ありがとうございます。 ダウンロードはしてありますが、 その後のインストールが完了しているのかどうかはわかりません。 ダウンロードしたファイルを解凍する必要があるのでしょうか?

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Python 3.x

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

Mecab

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