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

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

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

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

Q&A

解決済

1回答

207閲覧

ある関数をfor文の中に組み込んで求める形式で出力したい

James1201

総合スコア15

Python 3.x

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

0グッド

1クリップ

投稿2018/05/01 12:08

編集2018/05/01 13:09

python

12word2id = collections.defaultdict(lambda: len(word2id) ) 3sentence = rl 4 5def convert_word(sentence): 6 return [word2id[word.lower()] for word in sentence.split()] 7 8print(sentence) 9print(*convert_word(sentence) ) 10print(dict(word2id) )

python

12bindata = open("test.txt").read() 3text = bindata 4 5t = Tokenizer(mmap=True) 6results = [] 7 8lines = text.split("\r\n") 9for line in tqdm(lines): 10 s = line 11 s = s.replace("|", "") 12 s = re.sub(r"《#.+?》", "", s) 13 s = re.sub(r"[#.+?]", "", s) 14 tokens = t.tokenize(s) 15 # 必要な語句だけを対象とする - 5 16 r = [] 17 for tok in tqdm(tokens): 18 if tok.base_form == "*": 19 w = tok.surface 20 else: 21 w = tok.base_form 22 ps = tok.part_of_speech 23 hinsi = ps.split(",")[0] 24 if hinsi in ["名詞", "形容詞", "副詞", "動詞", "記号"]: 25 r.append(w) 26 rl = (" ".join(r)).strip() 27 results.append(rl) 28 print(rl)

の中に組み込んで

python

1[アンパンマン 、 側近 バノン 氏 解任 政権 屋台骨 揺らぐ] 2[0, 1, 2, 3, 4, 5, 6, 7, 8] 3[ドナルド・トランプ 、 側近 バノン 氏 解任 政権 屋台骨 揺らぐ] 4[9, 1, 2, 3, 4, 5, 6, 7, 8] 5 6{'アンパンマン': 0, '、': 1, '側近': 2, 'バノン': 3, '氏': 4, '解任': 5, '政権': 6, '屋台骨': 7, '揺らぐ': 8, 'ドナルド・トランプ': 9}

のように、

1文
1ベクトル
1文
1ベクトル
ラベルの説明

で出力したいのですが、別々で実行するとどうしても

python

1アンパンマン 、 側近 バノン 氏 解任 政権 屋台骨 揺らぐ 2 ドナルド・トランプ 、 側近 バノン 氏 解任 政権 屋台骨 揺らぐ 30 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 4{'アンパンマン': 0, '、': 1, '側近': 2, 'バノン': 3, '氏': 4, '解任': 5, '政権': 6, '屋台骨': 7, '揺らぐ': 8, 'ドナルド・トランプ': 9}

のように1文の後にベクトルが来ず、さらにベクトルが1行に連なって出力されてしまいます。

求める出力

python

1[アンパンマン 、 側近 バノン 氏 解任 政権 屋台骨 揺らぐ] 2[0, 1, 2, 3, 4, 5, 6, 7, 8] 3[ドナルド・トランプ 、 側近 バノン 氏 解任 政権 屋台骨 揺らぐ] 4[9, 1, 2, 3, 4, 5, 6, 7, 8] 5 6{'アンパンマン': 0, '、': 1, '側近': 2, 'バノン': 3, '氏': 4, '解任': 5, '政権': 6, '屋台骨': 7, '揺らぐ': 8, 'ドナルド・トランプ': 9}

にするにはどのように②の中に①の何をどのようにを挿入すれば良いのでしょうか...、どなたかご教授お願い致します。

こちらが読み込むテキストになります

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

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

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

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

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

LouiS0616

2018/05/01 12:46

①②の順で並べても、②①の順で並べても上手く動作しないようですが、どのように『別々に実行した』のでしょうか。
James1201

2018/05/01 13:10

申し訳ありません。②の中の print(*convert_word(sentence) )が余計でした。これでうまく作動するかと思います。ちなみに自分は②、①の順に動かしています。
guest

回答1

0

ベストアンサー

自然言語処理は門外漢なのですが、とりあえずご所望の処理は次のように書けそうです。

Python

1for s in sentence.split('\n'): 2 print(s) 3 print(*convert_word(s)) 4 5print(dict(word2id))

実行結果

plain

1アンパン マン 、 側近 バノン 氏 解任 政権 屋台骨 揺らぐ 20 1 2 3 4 5 6 7 8 9 3 トランプ 大統領 、 側近 バノン 氏 解任 政権 屋台骨 揺らぐ 410 11 2 3 4 5 6 7 8 9 5{'アンパン': 0, 'マン': 1, '、': 2, '側近': 3, 'バノン': 4, '氏': 5, '解任': 6, '政権': 7, '屋台骨': 8, '揺らぐ': 9, 'トランプ': 10, '大統領': 11}

なお

ファイルを読み込む際に、前以て行毎のリストになるようにすれば、後々楽かと思います。

Python

1text = [line.strip() for line in open('test.txt').readlines()]

コメントを受けて

標準出力をテキストファイルに持っていく方法は、主に二つあります。

  • リダイレクトを利用する方法

コマンドラインから呼び出している場合に有効。> 出力先.txtで流し込める。

$python モジュール名.py > result.txt
  • 標準出力を切り替える方法

モジュールの冒頭で、標準出力をファイルストリームに切り替える方法。
なお、元に戻したい場合はsys.stdout = sys.__stdout__でok。

Python

1import sys 2sys.stdout = open('result.txt', 'w')

投稿2018/05/01 13:21

編集2018/05/05 06:06
LouiS0616

総合スコア35660

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

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

James1201

2018/05/05 05:25

お返事遅くなってすみません、有難うございます! ちなみに、この出力をcsvに書き出すにはどうしたら良いでしょうか...! 一通り調べてみたのですが、いまいち見当たらなかったのでお尋ねしたいです...!
LouiS0616

2018/05/05 05:40

文字列の行でしょうか?数値化した行でしょうか?最後の辞書でしょうか?
James1201

2018/05/05 05:46

とりあえず、出力通りに、 文字列の行 数値化した行 文字列の行 数値化した行 最後の辞書 のように書き出したいです!
LouiS0616

2018/05/05 05:48

csvじゃなくてtxtファイルだったらものすごく楽なんですけど、アリでしょうか?
James1201

2018/05/05 05:50

でしたら、とりあえずtxtで大丈夫です!
James1201

2018/05/05 06:11

有難うございます! 勉強にもなり、本当に助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問