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

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

ただいまの
回答率

88.58%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 652
退会済みユーザー

退会済みユーザー

 前提・実現したいこと

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • wwbQzhMkhhgEmhU

    2018/11/28 15:14

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

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/11/29 14:43

    流石に丸投げすぎました.反省しております.

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/11/29 14:44

    質問を修正しました

    キャンセル

回答 1

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

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/30 14:14

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

    キャンセル

  • 2018/11/30 14:14 編集

    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 14:15

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

    キャンセル

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

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

関連した質問

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