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

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

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Mecab

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

Python

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

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

1回答

404閲覧

csvファイル内のセルを交換して,交換した後にそのファイルを標準出力したい

退会済みユーザー

退会済みユーザー

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Mecab

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

Python

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

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2018/11/27 05:01

編集2018/11/30 05:17

前提・実現したいこと

Pythonで文章を入力してそれを分かち書きし,元々ある語彙表に無い単語(難解語)を抽出しその単語の類義語と難解語を置換して,単語を置換した文章を出力するようなシステムを作っています。

例 彼はダイエット中です → 彼は減量中です

新しいファイルに単語置換後の文章を入力してそれを出力したいと考えています.
csvファイルの扱い方がいまいち分かっていないので,ご教授頂けると幸いです.

test.csv
彼,は,ダイエット,する

nankaigo.csv
ダイエット

ruigigo.csv
減量

該当のソースコード

Python

1with open('test.csv', mode="r") as f: 2 with open('nankaigo.csv', mode="w") as r: 3 with open('ruigigo.csv', mode="w") as fileC: 4 reader = csv.reader(f,delimiter=',') 5 with open('out.csv','w',newline='') as fout: 6 writer = csv.writer(fout) 7 for row in reader: 8 for sel in row: 9 if sel not in dictB: 10 print("難解語:" ,sel) 11 writer = csv.writer(r) 12 writer.writerow([sel]) 13 results = model.wv.most_similar(positive=[sel]) 14 ruigigo = results[0][0] 15 dif.append(sel) 16 rui.append(ruigigo) 17 print(dif) 18 print(rui) 19 writer = csv.writer(fileC) 20 writer.writerow([ruigigo]) 21 for idx,col in enumerate(dif): 22 if col in rui: 23 dif[idx] = rui[col] 24 25 writer.writerow(dif) 26

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

Python3.7.1

試したこと

変数selとして類義語は抽出できたが,置き換え先が不明だった.
そこで,test.csvとnankaigo.csvで一致している単語(ダイエット)を抽出して,test.csvの(ダイエット)をruigigo.csvの(減量,おり)でそれぞれ”ダイエット”を置換してファイルを作成又は更新しようと思ったが,その方法が可能かどうか分からなかった.
(抽出は可能なのだが,ファイルのセルを用いて別のファイルを更新することが可能かどうか分からなかった.)

該当のソースコード

Python

1with open('test.csv', mode="r") as f: 2 with open('nankaigo.csv', mode="w") as r: 3 with open('ruigigo.csv', mode="w") as fileC: 4 reader = csv.reader(f,delimiter=',') 5 for row in reader: 6 for sel in row: 7 if sel not in dictB: 8 print("難解語:" ,sel) 9 writer = csv.writer(r) 10 writer.writerow([sel]) 11 results = model.wv.most_similar(positive=[sel]) 12 ruigigo = results[0][0] 13 print(sel) 14 print(ruigigo) 15 writer = csv.writer(fileC) 16 writer.writerow([ruigigo]) 17 s = f.read() 18 s = s.replace(sel,ruigigo) 19 20with open('test.csv', mode="w") as f: 21 writer = csv.writer(f)

replace関数で置換して,ファイルに出力しようと思ったが,うまくいきませんでいた.
replace関数の中のselとruigigoという変数の使い方が合っているかどうか教えていただきたいです.
ちなみに,printで出力したのは確認用で,それぞれダイエットと減量という文字列が出力されました.

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

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

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

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

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

wwbQzhMkhhgEmhU

2018/11/27 10:16

何を試して何ができなかったのかを書いてください。丸投げすぎです。
退会済みユーザー

退会済みユーザー

2018/11/28 05:16

申し訳ございません.質問を修正しました.
wwbQzhMkhhgEmhU

2018/11/28 06:14

入力文をパースすることはできたが、置換の方法が分からないのは元々わかっています。ただ、pythonの置換関数が見つけられないのか、MeCabの使い方が分からないのかすら、文面からは分かりません(もちろんそれだけでは回答できません)。やってほしいことを丸投げするのではなく、あなたがどうしても分からない部分だけを絞りに絞った上で(この作業をあなたがしない限り、あなたがどこまで理解できているのか誰にも分かりません)、そこだけを質問するためのプログラムを書いて、そのプログラムの何行目のどの変数をどうすることができないのか、質問してください(大変かもしれなませんが、そうしないと分からない部分を正しく伝えることができません)。
退会済みユーザー

退会済みユーザー

2018/11/29 05:43

流石に丸投げすぎました.反省しております.
退会済みユーザー

退会済みユーザー

2018/11/29 05:44

質問を修正しました
guest

回答1

0

ベストアンサー

(抽出は可能なのだが,ファイルのセルを用いて別のファイルを更新することが可能かどうか分からなかった.)

ファイルのセルを用いてというのがよく分かりませんが、何等かのルールに基づき入力ファイルの一部のデータを書き換えて、別のファイルに出力することは可能です。
以下にてinp.csvの中のセルを辞書に基づき置換して別ファイルout.csvに出力する例を示しますので参考にしてください。

inp.csv

hoge,abc def,piyo jkl,hoge

Python

1 2import csv 3rep = {'hoge':'fuga','piyo':'hogera'} # 置換辞書 4with open('inp.csv','r') as fin: 5 reader = csv.reader(fin) 6 with open('out.csv','w',newline='') as fout: 7 writer = csv.writer(fout) 8 for row in reader: 9 # 値が辞書に存在する「セルを抽出」して置換 10 for idx,col in enumerate(row): 11 if col in rep: 12 row[idx] = rep[col] 13 # 別ファイルに出力 14 writer.writerow(row)

out.csv

fuga,abc def,hogera jkl,fuga

投稿2018/11/29 05:46

編集2018/11/29 06:02
can110

総合スコア38233

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

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

退会済みユーザー

退会済みユーザー

2018/11/29 05:55

回答ありがとうございます. 置換は,変数に入っている値でも可能なのでしょうか?
退会済みユーザー

退会済みユーザー

2018/11/29 05:55

変数Aに入っている値で,元の変数Bに入っている値を置換することは可能なのでしょうか?
can110

2018/11/29 06:03

はい。できます。そのまま求めるものとは異なりますが、回答を修正しましたので参考にしてください。
退会済みユーザー

退会済みユーザー

2018/11/29 06:29

inputしたものを置換するので,置換辞書を作ることができないのですが,それでも可能ですか?
can110

2018/11/29 06:32 編集

inputしたもののデータのカタチがよく分かりませんが そのデータから置換辞書を作るなり変数AやBに入れるなりすればよいです、よね?
退会済みユーザー

退会済みユーザー

2018/11/29 06:56

分かりました.ありがとうございます. もう一つだけよいでしょうか? 質問の下の方に記載してあるコードのreplace関数の使い方が正しいかどうかお聞きしたいです.
can110

2018/11/29 06:59

とくに問題ないと思われます。
退会済みユーザー

退会済みユーザー

2018/11/29 07:12

ありがとうございます. しかし,このコードではうまく置換できなかったのでreplace関数を使わない方法も試してみます.
退会済みユーザー

退会済みユーザー

2018/11/30 04:36

すみません,idx,col,enumerateがそれぞれ何を表しているか教えていただきたいです.
can110

2018/11/30 04:41

「python enumerate」で検索すると何を表しているか分かると思います。
退会済みユーザー

退会済みユーザー

2018/11/30 05:14

検索してコードを書いてみたのですが,うまく出力されなかったのでコードを見てもらってもよいでしょうか...  本当にすみません.
退会済みユーザー

退会済みユーザー

2018/11/30 05:17 編集

with open('test.csv', mode="r") as f: with open('nankaigo.csv', mode="w") as r: with open('ruigigo.csv', mode="w") as fileC: reader = csv.reader(f,delimiter=',') with open('out.csv','w',newline='') as fout: writer = csv.writer(fout) for row in reader: for sel in row: if sel not in dictB: print("難解語:" ,sel) writer = csv.writer(r) writer.writerow([sel]) results = model.wv.most_similar(positive=[sel]) ruigigo = results[0][0] dif.append(sel) rui.append(ruigigo) print(dif) print(rui) writer = csv.writer(fileC) writer.writerow([ruigigo]) for idx,col in enumerate(dif): if col in rui: dif[idx] = rui[col] writer.writerow(dif)
退会済みユーザー

退会済みユーザー

2018/11/30 05:15

見づらいので質問文に載せなおします.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問