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

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

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

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

Python

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

Q&A

解決済

1回答

2352閲覧

pythonを使った自立語の取り出し

rrrrrrrry

総合スコア20

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/10/24 05:59

前提・実現したいこと

 サイトを参考にngramのプログラムを作成いたしました.
自立語を取り出すために追加で作業を行ったのですが以下のようなエラー文が出て先に進みません. 改善方法をご提案していただきたく, 質問させていただきます.

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

$ python ngram.py 1 HamburgSteak.txt :実行部分 File "ngram.py", line 29 continue ^ SyntaxError: 'continue' not properly in loop

該当のソースコード

Python

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3#Qiita: Pythonで単語N-gramを生成するモジュール <https://qiita.com/takumi_TKHS/items/942492b72aaf7b6a6213> 4 5import sys 6import subprocess as cmd 7 8# テキスト -> 単語(形態素)集合 9def text2bow(obj,mod): 10 11 # input: ファイルの場合はmod="file", input: 文字列の場合はmod="str" 12 if mod == "file": 13 morp = cmd.getstatusoutput("cat " + obj + " | mecab -Owakati") 14 elif mod == "str": 15 morp = cmd.getstatusoutput("echo " + obj.encode('utf-8') + " | mecab -Owakati") 16 else: 17 print("error!!") 18 sys.exit(0) 19 20 if "morp".find('名詞') > -1: 21 a = morp 22 elif "morp".find('動詞') > -1: 23 a = morp 24 elif "morp".find('形容詞') > -1: 25 a = morp 26 elif "morp".find('形容動詞') > -1: 27 a = morp 28 else: 29 continue 30 31 words = a[1] 32 words = words.replace('\n','') 33 34 bow = words.split(' ') 35 36 return bow 37 38# N-gramの生成 39def gen_Ngram(words,N): 40 41 ngram = [] 42 43 for i in range(len(words)): 44 cw = "" 45 46 if i >= N-1: 47 for j in reversed(list(range(N))): 48 cw += words[i-j] 49 else: 50 continue 51 52 ngram.append(cw) 53 54 return ngram 55 56# 出力 57def output_Ngram(ngram): 58 59 for i in range(len(ngram)): 60 print(ngram[i]) 61 62def main(): 63 64 argvs = sys.argv 65 66 # input: ファイルの場合 67 bow = text2bow(argvs[2],mod="file") 68 69 # input: 文字列の場合 70 #bow = text2bow(obj=u"これはN-gramを生成するプログラムです.",mod="str") 71 72 ngram = gen_Ngram(bow,int(argvs[1])) 73 74 output_Ngram(ngram) 75 76if __name__ == "__main__": 77 78 main() 79

試したこと

 必要な部分のみをaに代入している部分が追加した箇所です.

if "morp".find('名詞') > -1: a = morp elif "morp".find('動詞') > -1: a = morp elif "morp".find('形容詞') > -1: a = morp elif "morp".find('形容動詞') > -1: a = morp else: continue

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

 参考文献
https://qiita.com/takumi_TKHS/items/942492b72aaf7b6a6213

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

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

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

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

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

t_obara

2018/10/24 06:10

continueはループの途中で次のループ処理にスキップする処理ですが、当該部分にループはありませんよ、continueで何をしたい処理ですか?
rrrrrrrry

2018/10/24 06:15

回答の方で言われたpassにしましたところエラー文が更新され, aはどうしたらいいのかわかりません. ご指導いただけますか? 回答の返信に載せています.
t_obara

2018/10/24 06:24

エラー内容を見ればわかりそうですが、、
guest

回答1

0

ベストアンサー

おしいですね。

continue 使いたくなる気持ちは分かりますが、何も処理をしないのであれば、 pass という命令(?)が使えます。

continuewhilefor で、「以降の処理を切り上げて次の要素の処理を行う」時に使います。

ですので、

python

1if "morp".find('名詞') > -1: 2 a = morp 3elif "morp".find('動詞') > -1: 4 a = morp 5elif "morp".find('形容詞') > -1: 6 a = morp 7elif "morp".find('形容動詞') > -1: 8 a = morp 9else: 10 continue

は、

python

1if "morp".find('名詞') > -1: 2 a = morp 3elif "morp".find('動詞') > -1: 4 a = morp 5elif "morp".find('形容詞') > -1: 6 a = morp 7elif "morp".find('形容動詞') > -1: 8 a = morp 9else: 10 pass

もしくはelse自体を抜いてしまって

python

1if "morp".find('名詞') > -1: 2 a = morp 3elif "morp".find('動詞') > -1: 4 a = morp 5elif "morp".find('形容詞') > -1: 6 a = morp 7elif "morp".find('形容動詞') > -1: 8 a = morp

としても良いかもしれません。

参考資料

2018-10-24 15:28 追記

ところで、質問のソースコードの if の書き方では morp という文字列の中から自立語を探す処理になってしまいますが、正しいですか? morp 変数の中の文字列の中から自立語を探したいのだと思いますので、以下が適当かと思います。

python

1if morp.find('名詞') > -1: 2 a = morp 3elif morp.find('動詞') > -1: 4 a = morp 5elif morp.find('形容詞') > -1: 6 a = morp 7elif morp.find('形容動詞') > -1: 8 a = morp

投稿2018/10/24 06:10

編集2018/10/24 06:39
manzyun

総合スコア2244

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

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

rrrrrrrry

2018/10/24 06:14

ご指摘ありがとうございます. passにしたところ以下のようなエラー文が出ました. aにどのような問題があるのでしょうか? ''' Traceback (most recent call last): File "ngram.py", line 78, in <module> main() File "ngram.py", line 67, in main bow = text2bow(argvs[2],mod="file") File "ngram.py", line 31, in text2bow words = a[1] UnboundLocalError: local variable 'a' referenced before assignment '''
manzyun

2018/10/24 06:28

aにデータが入っていないですね。と思ってその前のmorpにデータが入っているかも怪しいですね。ちょっと回答を加筆します。
rrrrrrrry

2018/10/26 01:42

ありがとうございました。追記でわからないことがでてきたのでそちらを質問させていただいています。よろしければコメントお願いいたします。フォローもさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問