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

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

ただいまの
回答率

87.49%

pythonファイルのmakefileでの実行

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 5,239

score 18

イメージ説明例題でmakefileで実行してファイルを作成するものがあります。
しかし、makefileの実行方法がわかりません。
昔、Cで組み込み開発していた時は、パスを通して実行していた記憶がありますが、忘れてしまっています。
pythonのmakefileはどのように実行したらいいのでしょうか。
https://sourceforge.net/projects/gnuwin32/
をインストールしてパスを通せばいいと、検索したHPにはかいてありましたがうまくいきません。
環境変数の設定の方法が違っているのでしょうか。
環境変数は新規作成で名前、値はどのような値を与えてやればいいのでしょうか。
基本的な質問になるかとは思いますが、これが進まなくて先に進めません。
よろしくおねがいいたします。
makefileの中身は、以下になります。

makefile

CORPUS_URL = http://mmsrv.ninjal.ac.jp/nucc/nucc.zip
ZIP_FILE = nucc.zip
UNZIP_DIR = nucc
WGET = wget
UNZIP = unzip
PYTHON = python

CONV = mksequence.py
SEQFILE = sequence.txt

all: $(SEQFILE)

clean:
    -rm -r $(UNZIP_DIR)
    rm $(SEQFILE)
clean-all: clean
    rm -f

$(SEQFILE): $(UNZIP_DIR)
    $(PYTHON) $(CONV) > $(SEQFILE)

download: $(ZIP_FILE)

nucc.zip:
    $(WGET) $(CORPUS_URL)

$(UNZIP_DIR): nucc.zip
    $(UNZIP) -x $(ZIP_FILE)
 -*- coding: utf-8 -*-

import os, sys

try:
    unicode
    import codecs
    sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
    def copen(fname, mode):
        return codecs.open(fname, mode, "utf-8")
except:
    def copen(fname, mode):
        return open(fname, mode, encoding='utf-8')

nuc_dir = "nucc"

def make_sequence_from_file(fname):
    fname = os.path.join(nuc_dir, fname)
    if not os.path.exists(fname):
        raise Exception("no %s file." % fname)
    last_line = None
    sequence = []
    with copen(fname, "r") as f:
        try:
            for line in f:
                uline = line
                if uline[0] == u'@':
                    continue
                if uline[0] == u'F' or uline[0] == u'M':
                    if last_line is None:
                        last_line = uline
                        continue
                    else:
                        seq_input = last_line[5:-1]
                        seq_output = uline[5:-1]
                        last_line = uline
                        sequence.append((seq_input, seq_output))
                else:
                    last_line = None
        except:
            sys.stderr.write("skip %s (not euc-jp)\n" % fname)
            sys.stderr.flush()
            return []
    return sequence

def main():
    if not os.path.exists(nuc_dir):
        raise Exception("no extracted files.")

    files = os.listdir(nuc_dir)
    uniq_seq = {}
    for f in files:
        if not ".txt" in f:
            continue
        seq = make_sequence_from_file(f)
        for inp, out in seq:
            uniq_seq[inp] = out
    for k, v in uniq_seq.items():
        print("input: %s\noutput: %s" % (k, v))
    return


if __name__ == "__main__":
    main()
    sys.exit(0)
#
コード
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

  1. makefileのインデントが不明なこと
  2. mksequence.pyの内容が不明なこと

から、ひとまずMakefileをコピー&適当にインデントを調整して実行しました。

結果、再現しませんでした。正常に動きました。

ですので、

  1. Makefileを「```」で囲ってインデントを見せてください。
  2. mksequence.py の内容を追記してください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/19 15:22

    たびたび、初歩的なミスで大変申し訳ございません。
    なんとか、pythonのところまで、動かすことができました。
    ただ、3.7だとうまく動かないかもしれないとかかかれていたところがあったので、以下のエラーが出ます。
    これは、pythonのバージョンを変えるとかいろいろさわらないとだめなんでしょうか。
    わかる範囲で教えていた誰ば幸いです。
    python初めて、まだ1か月半なので、いまいちわかっておりません。
    ほんとうに、長々とお付き合いいただきありがとうございます。
    エラーは以下になります。
    -----------------------------------------------------------------------------
    inflating: nucc/data121.txt
    inflating: nucc/data122.txt
    inflating: nucc/data123.txt
    inflating: nucc/data124.txt
    inflating: nucc/data125.txt
    inflating: nucc/data126.txt
    inflating: nucc/data127.txt
    inflating: nucc/data128.txt
    inflating: nucc/data129.txt
    python mksequence.py > sequence.txt
    Traceback (most recent call last):
    File "mksequence.py", line 64, in <module>
    main()
    File "mksequence.py", line 59, in main
    print("input: %s\noutput: %s" % (k, v))
    UnicodeEncodeError: 'cp932' codec can't encode character '\u2014' in position 19
    : illegal multibyte sequence
    make: *** [sequence.txt] エラー 1
    -----------------------------------------------------------------------------

    キャンセル

  • 2018/11/19 15:49

    data○○.txt内にShift_JISで解釈できないバイナリが含まれていることに起因するエラーですね。
    スクリプトを直すよりは、おそらくpython2.7をインストールするのが一番近道かと思います。

    キャンセル

  • 2018/11/19 16:09

    kazto様

    2.7をいれてやったら、うまくいきました。
    今日一日本当にありがとうございました。
    いろいろと、勉強になり、また問題も解決できました。
    ほんとうにありがとうございました。

    キャンセル

-2

make と打ったら何が出てきますか?
みるところ、Linux向けのスクリプトのようですが、OSはなんでしょうか

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/19 10:17

    windows8.1です。
    とりあえず、コマンドを認識してもらえてませんです。
    windowsでは、実行は不可能なのでしょうか。
    これが、進まないと例題のファイルをはいてもらえないので困っているのですが。。。
    Linux環境を用意する必要性があるのでしょうか。
    どうぞよろしくおねがいいたします。

    キャンセル

  • 2018/11/19 10:27

    その例題を出したひとに聞いてください、としかいいようがないですが。

    キャンセル

  • 2018/11/19 11:41

    HPに公開されているので、連絡を取れれば聞くのですが、聞く手段がないため、ここで質問させていただきました。大変申し訳ございません。

    キャンセル

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

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

関連した質問

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