質問編集履歴

2

文法の修正

2022/10/18 02:31

投稿

gamdam
gamdam

スコア10

test CHANGED
File without changes
test CHANGED
@@ -162,6 +162,7 @@
162
162
 
163
163
  この後、ruigigo.txtのi行目とfile.txtのi+1行目を結合したリストを作成したと考えています。
164
164
  for文を用いようと考えたのですが、行数をどのように変数にするべきかわかりませんでした。
165
+ ファイルの中身はいつも3行ということではなく、それより多いこともあります。ただファイル内の行数はそれぞれ同じになります。
165
166
 
166
167
 
167
168
 

1

コードの追加、説明の補足

2022/10/18 02:28

投稿

gamdam
gamdam

スコア10

test CHANGED
File without changes
test CHANGED
@@ -18,3 +18,152 @@
18
18
  一つ目のファイルの1行目と二つ目のファイルの2行目といった形にリストにしたいです。
19
19
 
20
20
  よければ教えていただきたいです。
21
+
22
+ **コード**
23
+ 自分が今作成しているコードを載せます```python
24
+ ```ここに言語を入力
25
+ port gzip
26
+ import shutil
27
+ import sqlite3
28
+ import pandas as pd
29
+ import sqlite3
30
+ import collections
31
+ import MeCab
32
+ import csv
33
+ import pprint
34
+ import sqlite3
35
+ import re
36
+ import time
37
+ import NLP_def
38
+ import itertools
39
+ import numpy as np
40
+
41
+ """""# 日本語wordnetをDLして解凍
42
+
43
+
44
+ with gzip.open('wnjpn.db.gz', 'rb') as f_in:
45
+ with open('wnjpn.db', 'wb') as f_out:
46
+ shutil.copyfileobj(f_in, f_out)"""
47
+
48
+ # synset(概念ID)とlemma(単語)の組み合わせDataFrameの作成
49
+ conn = sqlite3.connect("wnjpn.db")
50
+ q = 'SELECT synset,lemma FROM sense,word USING (wordid) WHERE sense.lang="jpn"'
51
+ sense_word = pd.read_sql(q, conn)
52
+
53
+ # 類義語をリストにして返す関数を定義
54
+ def get_synonyms(word):
55
+ """inputしたwordの類義語をリストにして返す。
56
+
57
+ Args:
58
+ word(str): 類義語を検索する単語
59
+  
60
+ Returns:
61
+ list[str]: 類義語リスト
62
+ """
63
+ # 類義語を検索する単語のsynsetを検索する
64
+ synsets = sense_word.loc[sense_word.lemma == word, "synset"]
65
+
66
+ # そのsynsetに紐づく全ての単語を取得(重複する可能性があるのでsetにする)
67
+ synset_words = set(sense_word.loc[sense_word.synset.isin(synsets), "lemma"])
68
+
69
+ # 元の単語が入ってしまうので削除
70
+ if word in synset_words:
71
+ synset_words.remove(word)
72
+
73
+ return list(synset_words)
74
+
75
+ ##print(get_synonyms("靴"))
76
+
77
+ #textファイルの読み込み
78
+ #****には保存したtxtファイルのパス名を入れてください
79
+ f= open('hyouki.txt', 'r', encoding='UTF-8')
80
+ text=f.read()
81
+ print(text)
82
+ f.close()
83
+
84
+ txt_list = text.split()
85
+
86
+ with open('file.txt', 'w', encoding='UTF-8') as f1, open('ruigigo.txt', 'w', encoding='UTF-8') as f2:
87
+
88
+ for n in range(len(txt_list)):
89
+ # 読み込んだtextファイルで形態素解析を行う
90
+ tagger = MeCab.Tagger()
91
+ tagger.parse('')
92
+ node = tagger.parseToNode(txt_list[n])
93
+
94
+ # 取り出す品詞を決めている.今回は名詞
95
+ word_list = []
96
+ while node:
97
+ word_type = node.feature.split(',')[0]
98
+ # 名詞の他にも動詞や形容詞なども追加できる
99
+ if word_type in ["名詞"]:
100
+ word_list.append(node.surface)
101
+ node = node.next
102
+ word_chain = ' '.join(word_list)
103
+
104
+ ##print(word_chain,file=f)
105
+
106
+ ##print(word_list)
107
+ print(word_list,file=f1)
108
+
109
+
110
+
111
+
112
+
113
+ ruigigo2_list = []
114
+ ruigigo3_list = []
115
+ for m in range(len(word_list)):
116
+ get_synonyms(word_list[m])
117
+
118
+ ruigigo2_list.append(get_synonyms(word_list[m]))
119
+
120
+ ##print(ruigigo2_list)
121
+
122
+ for e in ruigigo2_list :
123
+ if isinstance(e, list):
124
+ ruigigo3_list += e
125
+ else:
126
+ ruigigo3_list.append(e)
127
+
128
+ print(ruigigo3_list,file=f2)
129
+ print("\n")
130
+
131
+ f1.close()
132
+ f2.close()
133
+
134
+ """ruigigo4_list = []
135
+ with open('file.txt', 'r', encoding='UTF-8') as f1, open('ruigigo.txt', 'r', encoding='UTF-8') as f2:
136
+ file_data = f2.readlines()
137
+ word_date = f1.readlines()
138
+ for line in file_data:
139
+
140
+ ##for line2 in word_date:
141
+ ##if line < line2:"""
142
+ ```
143
+ ##実際にしたいこと
144
+ コードにあるファイルを説明します
145
+ 例ですが、
146
+ hyouki.txt
147
+ "猫
148
+ カエル
149
+ パンダとキリン"
150
+
151
+ file.txt
152
+ "['猫']
153
+ ['カエル']
154
+ ['パンダ', 'キリン']"
155
+
156
+ ruigigo.txt
157
+ "['ねんねこ', 'キャット', 'にゃんにゃん', 'ネコ']
158
+ ['蛙', '蝦']
159
+ ['ジャイアントパンダ', '麒麟', 'ジラフ']"
160
+
161
+ となります。
162
+
163
+ この後、ruigigo.txtのi行目とfile.txtのi+1行目を結合したリストを作成したと考えています。
164
+ for文を用いようと考えたのですが、行数をどのように変数にするべきかわかりませんでした。
165
+
166
+
167
+
168
+
169
+