csvファイル内のセルを交換して,交換した後にそのファイルを標準出力したい
- 評価
- クリップ 0
- VIEW 699

退会済みユーザー
前提・実現したいこと
Pythonで文章を入力してそれを分かち書きし,元々ある語彙表に無い単語(難解語)を抽出しその単語の類義語と難解語を置換して,単語を置換した文章を出力するようなシステムを作っています。
例 彼はダイエット中です → 彼は減量中です
新しいファイルに単語置換後の文章を入力してそれを出力したいと考えています.
csvファイルの扱い方がいまいち分かっていないので,ご教授頂けると幸いです.
test.csv
彼,は,ダイエット,する
nankaigo.csv
ダイエット
ruigigo.csv
減量
該当のソースコード
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)
補足情報(FW/ツールのバージョンなど)
Python3.7.1
試したこと
変数selとして類義語は抽出できたが,置き換え先が不明だった.
そこで,test.csvとnankaigo.csvで一致している単語(ダイエット)を抽出して,test.csvの(ダイエット)をruigigo.csvの(減量,おり)でそれぞれ”ダイエット”を置換してファイルを作成又は更新しようと思ったが,その方法が可能かどうか分からなかった.
(抽出は可能なのだが,ファイルのセルを用いて別のファイルを更新することが可能かどうか分からなかった.)
該当のソースコード
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=',')
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]
print(sel)
print(ruigigo)
writer = csv.writer(fileC)
writer.writerow([ruigigo])
s = f.read()
s = s.replace(sel,ruigigo)
with open('test.csv', mode="w") as f:
writer = csv.writer(f)
replace関数で置換して,ファイルに出力しようと思ったが,うまくいきませんでいた.
replace関数の中のselとruigigoという変数の使い方が合っているかどうか教えていただきたいです.
ちなみに,printで出力したのは確認用で,それぞれダイエットと減量という文字列が出力されました.
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
(抽出は可能なのだが,ファイルのセルを用いて別のファイルを更新することが可能かどうか分からなかった.)
ファイルのセルを用いて
というのがよく分かりませんが、何等かのルールに基づき入力ファイルの一部のデータを書き換えて、別のファイルに出力することは可能です。
以下にてinp.csv
の中のセルを辞書に基づき置換して別ファイルout.csv
に出力する例を示しますので参考にしてください。
inp.csv
hoge,abc
def,piyo
jkl,hoge
import csv
rep = {'hoge':'fuga','piyo':'hogera'} # 置換辞書
with open('inp.csv','r') as fin:
reader = csv.reader(fin)
with open('out.csv','w',newline='') as fout:
writer = csv.writer(fout)
for row in reader:
# 値が辞書に存在する「セルを抽出」して置換
for idx,col in enumerate(row):
if col in rep:
row[idx] = rep[col]
# 別ファイルに出力
writer.writerow(row)
out.csv
fuga,abc
def,hogera
jkl,fuga
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
wwbQzhMkhhgEmhU
2018/11/27 19:16
何を試して何ができなかったのかを書いてください。丸投げすぎです。
退会済みユーザー
2018/11/28 14:16
申し訳ございません.質問を修正しました.
wwbQzhMkhhgEmhU
2018/11/28 15:14
入力文をパースすることはできたが、置換の方法が分からないのは元々わかっています。ただ、pythonの置換関数が見つけられないのか、MeCabの使い方が分からないのかすら、文面からは分かりません(もちろんそれだけでは回答できません)。やってほしいことを丸投げするのではなく、あなたがどうしても分からない部分だけを絞りに絞った上で(この作業をあなたがしない限り、あなたがどこまで理解できているのか誰にも分かりません)、そこだけを質問するためのプログラムを書いて、そのプログラムの何行目のどの変数をどうすることができないのか、質問してください(大変かもしれなませんが、そうしないと分からない部分を正しく伝えることができません)。
退会済みユーザー
2018/11/29 14:43
流石に丸投げすぎました.反省しております.
退会済みユーザー
2018/11/29 14:44
質問を修正しました