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

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

ただいまの
回答率

90.51%

  • Python

    8041questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • PowerShell

    360questions

    Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

  • Mecab

    170questions

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

エラーの原因がわかりません。。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,168

teotesu2006

score 2

前提・実現したいこと

『~短期集中講座~ 土日でわかる Pythonプログラミング教室』でpythonを学んでいるのですが、エラーが出てしまい解決方法がわかりません。

Dockerのコンテナ内で実行しており、Atomでpythonのプログラムを作成。powershellでpythonプログラムを実行して出たエラーです。

学び始めたばかりで不慣れな質問になりますが、さらに詳細が必要な場合は遠慮なく聞いてください。
できる限りお答えしたいと思っています。

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

![error画像

該当のソースコード

★★★ファイル名:【main.py】★★★

import ai

from ai.ai import *

def output(text):
    print("ななこ: " + text)

if __name__ == "__main__":
    output('ななこが、あなたの就職に関するお悩みを、な~んでも聞くよ!')
    output('ななこに言葉を覚えさせたいときは@から初めてね!')

    while True:
        user_input = input("あなた: ")
        if user_input == "": continue
        if user_input == "さようなら": break

        output(Ai.nanako_answer(user_input))

    output("ありがとう☆ またお話しようね♪")


★★★ファイル名:【ai.py】★★★

import re

from ai.import_text import ImportText
from ai.markov import Markov
from ai.morpheme_analyzer import MorphemeAnalyzer
from ai.fixed_phrase import FixedPhrase

class Ai:
    def nanako_answer(input_text):
        import_text = ImportText('library/import.txt')
        fixed_phrase = FixedPhrase('library/pattern.csv')
        morpheme_analyzer = MorphemeAnalyzer()
        markov = Markov(morpheme_analyzer.analyze(import_text.read()))

        if (re.match('@|@', input_text)):
            add_text = re.sub('^@|^@', '', input_text)
            import_text.add(add_text)
            markov.add(morpheme_analyzer.analyze(add_text))
            output_text = "覚えたよ!"
        else:
            output_text = fixed_phrase.answer(input_text)

        if output_text == "":
            nouns = morpheme_analyzer.extract_noun(input_text)
            output_text = markov.answer(nouns)

        if output_text == "":
            output_text = "ななこにも分かる言葉で言ってよぉ~☆"

        return output_text


★★★ファイル名:【morpheme_analyzer】★★★

import MeCab

class MorphemeAnalyzer:
    def analyze(self, text):

        print(MeCab.Tagger("-Owakari").parse(text).rstrip(" \n").split(" "))
        return MeCab.Tagger("-Owakati").parse(text).rstrip(" \n").split(" ")

    def extract_noun(self, text):
        nouns = []
        for chunk in MeCab.Tagger().parse(text).splitlines()[:-1]:
            (surface, feature) = chunk.split('\t')
            if feature.startswith('名詞'):
                nouns.append(surface)
        return nouns

試したこと

・powershellのFANGをja_JP.UTF-8に変更しました。
・Visual Studio Codeで実施するも「内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません」(おそらく私の読み込み場所の間違いかと...)

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • aglkjggg

    2017/10/29 19:58 編集

    『~短期集中講座~ 土日でわかる Pythonプログラミング教室』という本ですか?「某教則本」などとぼやかさずとも書籍名は出しても問題ないと思います。また、ソースコードは公開されています。 http://www.sbcr.jp/products/4797388978.html https://github.com/donichiPython/donichi-ai

    キャンセル

  • teotesu2006

    2017/10/29 20:01

    ご返答ありがとうございます!公開されていたなんて。。お恥ずかしい。。修正しますね!

    キャンセル

  • aglkjggg

    2017/10/29 20:04

    「virtual studio code」も訂正お願いします。正しくは「Visual Studio Code」です。揚げ足を取るような形で申し訳ないですが、どうしても気になったので。

    キャンセル

  • teotesu2006

    2017/10/29 20:14

    aglkjgggさん。できる限り訂正してみました。初めてこのサイトを利用しているのですが非常に優しいご回答で安心しています。よろしくお願いし致します。

    キャンセル

回答 2

checkベストアンサー

+1

以下のコマンドを実行してみて下さい。

$ mecab

恐らく以下のように出力されるかと思います。

param.cpp(69) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/dicrc

本を読み直してipadic関係の項目を確認してみて下さい。

 余談

ソースコードがGitHubで公開されているからといってteratailにソースコードだけをコピペすると色々問題がありそうなので、情報元として「GitHubのプロジェクトURL」を付け加えたり、「GitHubのプロジェクトURL」だけを貼り付ける等に留めたほうがいい気もします。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

はじめまして。

1ヶ月以上前のご質問ですので、もう解決されているかもしれませんが、mecab-python関係でハマる典型的な事例だと思いますので、共有メモ的に解決策を書かせていただければと思います。

結論から申しますと、MorphemeAnalyzerクラスの以下の行が、RuntimeErrorの原因です。Taggerに渡しているオプションで、"-Owakati"とあるべきところが、"-Owakari"になっています。

print(MeCab.Tagger("-Owakari").parse(text).rstrip(" \n").split(" "))

(mecab-pythonに関しては64bitのWindows 10環境でしか動作検証したことがありませんが、)mecab-pythonでTaggerのコンストラクタ引数のオプションを間違えた場合、Python上でその原因を追うことが出来ないことがあります。
その場合、2017/10/29に投稿されたご回答にもありますように、直接mecabの実行ファイルを動かして原因を確認されることをお勧めいたします。
その際、コマンドライン引数として、MeCab.Taggerのコンストラクタに渡した値を指定すれば、mecab-python経由では表示されなかったエラーメッセージが表示されます。それを参考にすれば、Taggerに渡したオプションのどこが誤りであったかを理解できます。

例えば以下のようにです。

$ echo すもももももももものうち | mecab -Owakari
writer.cpp(63) [!tmp.empty()] unkown format type [wakari]

なお、Taggerのインスタンスを作るところでRuntimeErrorが出る理由は、私が知る限り2点です。

  1. 引数に書いたオプション指定の書式が間違っている
  2. 上記1の書式は正しいが、-rオプションでmecabrcファイルを指定したときに、そのパスを間違えている
  3. 上記2のパスは正しいが、mecabrcの中に書いた設定が間違っている。

他にもおそらく、ユーザ辞書などの設定・内容に起因するものもあるかと思いますが、そのあたりは別途資料をあたっていただければと思います。

以上、今後Pythonでテキストマイニングされる際の参考となれば幸いです。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    MeCab.jarの生成について

    前提・実現したいこと MeCabを使って形態素解析をしようとしています。 発生している問題・エラーメッセージ javaバインディングの際にmakeするあたりが分からずに困

  • 受付中

    形態素解析の結果の一部のみを抽出したい

    前提・実現したいこと csvファイルにある文章をPythonを経由してMeCabで形態素解析をしています。  結果を出力する際、特定の品詞(名詞、形容詞、接続詞)と原形だけ

  • 解決済

    pythonでMecabを利用した語彙解析がうまくできない。

    ●環境 ・Windows Edition:Windows 7 Professional  Service Pack 1 ・pythonバージョン:Python 3.6.2 (v3.

  • 解決済

    mecab 品詞 選択

    やりたいこと 選択したテキストファイル内の文章をmecabを用いて形態素解析し、 品詞(名詞、動詞など)を絞り込みたいと考えています。 現在、テキストファイルの文章を形態素解析する

  • 解決済

    複数のテキストファイルをLDAモデルに

    やりたいこと 複数のテキストファイルを入力とし、指定したトピック数に分類するプログラムを作成したいと考えています。 現在、一つのテキストファイルをLDAモデルに投入するプログラムは

  • 解決済

    テキストに番号を付けて管理したい

    困っていること 入力したファイルのトピックを抽出するための前段階として 指定したディレクトリ内の.txtファイルを用いてLDAモデルを作成するプログラムを実装したのですが、 現在の

  • 受付中

    1つのファイルのトピックを調べたい(LDAモデル)

    質問 LDAモデルに詳しい方に質問です。 また、以下に記すプログラムで 複数の小説のテキストファイルからLDAモデルを作成したとき、その中に含まれる 1つの文書のトピックを参照

  • 解決済

    Python3で呼び出されたMecabの結果をWebブラウザ上で表示させたい。

    お世話になります。 #!/usr/bin/env python3.4 # -*- coding: utf-8 -*- from natto import MeCab mc =

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

  • Python

    8041questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • PowerShell

    360questions

    Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

  • Mecab

    170questions

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