前提
2つの別々のファイルの要素を一つのリストにするための方法を教えていただきたいです。
例としましては、
一つ目のファイルの内容が
[“人”,”子供”,”青”]
[“うさぎ”,”さる”,”ねずみ”]
二つ目のファイルの内容が
[“イタリア”,”フランス”,”スペイン”]
[“目”,”腹”,”頭”]
とした時、
[“イタリア”,”フランス”,”スペイン”, “うさぎ”,”さる”,”ねずみ”]
[“目”,”腹”,”頭”,“人”,”子供”,”青”]
となるように出力したいです
一つ目のファイルの1行目と二つ目のファイルの2行目といった形にリストにしたいです。
よければ教えていただきたいです。
コード
自分が今作成しているコードを載せます```python
port gzip import shutil import sqlite3 import pandas as pd import sqlite3 import collections import MeCab import csv import pprint import sqlite3 import re import time import NLP_def import itertools import numpy as np """""# 日本語wordnetをDLして解凍 with gzip.open('wnjpn.db.gz', 'rb') as f_in: with open('wnjpn.db', 'wb') as f_out: shutil.copyfileobj(f_in, f_out)""" # synset(概念ID)とlemma(単語)の組み合わせDataFrameの作成 conn = sqlite3.connect("wnjpn.db") q = 'SELECT synset,lemma FROM sense,word USING (wordid) WHERE sense.lang="jpn"' sense_word = pd.read_sql(q, conn) # 類義語をリストにして返す関数を定義 def get_synonyms(word): """inputしたwordの類義語をリストにして返す。 Args: word(str): 類義語を検索する単語 Returns: list[str]: 類義語リスト """ # 類義語を検索する単語のsynsetを検索する synsets = sense_word.loc[sense_word.lemma == word, "synset"] # そのsynsetに紐づく全ての単語を取得(重複する可能性があるのでsetにする) synset_words = set(sense_word.loc[sense_word.synset.isin(synsets), "lemma"]) # 元の単語が入ってしまうので削除 if word in synset_words: synset_words.remove(word) return list(synset_words) ##print(get_synonyms("靴")) #textファイルの読み込み #****には保存したtxtファイルのパス名を入れてください f= open('hyouki.txt', 'r', encoding='UTF-8') text=f.read() print(text) f.close() txt_list = text.split() with open('file.txt', 'w', encoding='UTF-8') as f1, open('ruigigo.txt', 'w', encoding='UTF-8') as f2: for n in range(len(txt_list)): # 読み込んだtextファイルで形態素解析を行う tagger = MeCab.Tagger() tagger.parse('') node = tagger.parseToNode(txt_list[n]) # 取り出す品詞を決めている.今回は名詞 word_list = [] while node: word_type = node.feature.split(',')[0] # 名詞の他にも動詞や形容詞なども追加できる if word_type in ["名詞"]: word_list.append(node.surface) node = node.next word_chain = ' '.join(word_list) ##print(word_chain,file=f) ##print(word_list) print(word_list,file=f1) ruigigo2_list = [] ruigigo3_list = [] for m in range(len(word_list)): get_synonyms(word_list[m]) ruigigo2_list.append(get_synonyms(word_list[m])) ##print(ruigigo2_list) for e in ruigigo2_list : if isinstance(e, list): ruigigo3_list += e else: ruigigo3_list.append(e) print(ruigigo3_list,file=f2) print("\n") f1.close() f2.close() """ruigigo4_list = [] with open('file.txt', 'r', encoding='UTF-8') as f1, open('ruigigo.txt', 'r', encoding='UTF-8') as f2: file_data = f2.readlines() word_date = f1.readlines() for line in file_data: ##for line2 in word_date: ##if line < line2:"""
##実際にしたいこと
コードにあるファイルを説明します
例ですが、
hyouki.txt
"猫
カエル
パンダとキリン"
file.txt
"['猫']
['カエル']
['パンダ', 'キリン']"
ruigigo.txt
"['ねんねこ', 'キャット', 'にゃんにゃん', 'ネコ']
['蛙', '蝦']
['ジャイアントパンダ', '麒麟', 'ジラフ']"
となります。
この後、ruigigo.txtのi行目とfile.txtのi+1行目を結合したリストを作成したと考えています。
for文を用いようと考えたのですが、行数をどのように変数にするべきかわかりませんでした。
ファイルの中身はいつも3行ということではなく、それより多いこともあります。ただファイル内の行数はそれぞれ同じになります。