/
main.go
212 lines (204 loc) · 4.36 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
package main
import (
"encoding/csv"
"fmt"
"io"
"os"
"strings"
// iconv "github.com/djimenez/iconv-go"
)
var (
chairFeatures = []string{
"ヘッドレスト付き",
"肘掛け付き",
"キャスター付き",
"アーム高さ調節可能",
"リクライニング可能",
"高さ調節可能",
"通気性抜群",
"メタルフレーム",
"低反発",
"木製",
"背もたれつき",
"回転可能",
"レザー製",
"昇降式",
"デザイナーズ",
"金属製",
"プラスチック製",
"法事用",
"和風",
"中華風",
"西洋風",
"イタリア製",
"国産",
"背もたれなし",
"ラテン風",
"布貼地",
"スチール製",
"メッシュ貼地",
"オフィス用",
"料理店用",
"自宅用",
"キャンプ用",
"クッション性抜群",
"モーター付き",
"ベッド一体型",
"ディスプレイ配置可能",
"ミニ机付き",
"スピーカー付属",
"中国製",
"アンティーク",
"折りたたみ可能",
"重さ500g以内",
"24回払い無金利",
"現代的デザイン",
"近代的なデザイン",
"ルネサンス的なデザイン",
"アームなし",
"オーダーメイド可能",
"ポリカーボネート製",
"フットレスト付き",
}
estateFeatures = []string{
"最上階",
"防犯カメラ",
"ウォークインクローゼット",
"ワンルーム",
"ルーフバルコニー付",
"エアコン付き",
"駐輪場あり",
"プロパンガス",
"駐車場あり",
"防音室",
"追い焚き風呂",
"オートロック",
"即入居可",
"IHコンロ",
"敷地内駐車場",
"トランクルーム",
"角部屋",
"カスタマイズ可",
"DIY可",
"ロフト",
"シューズボックス",
"インターネット無料",
"地下室",
"敷地内ゴミ置場",
"管理人有り",
"宅配ボックス",
"ルームシェア可",
"セキュリティ会社加入済",
"メゾネット",
"女性限定",
"バイク置場あり",
"エレベーター",
"ペット相談可",
"洗面所独立",
"都市ガス",
"浴室乾燥機",
"インターネット接続可",
"テレビ・通信",
"専用庭",
"システムキッチン",
"高齢者歓迎",
"ケーブルテレビ",
"床下収納",
"バス・トイレ別",
"駐車場2台以上",
"楽器相談可",
"フローリング",
"オール電化",
"TVモニタ付きインタホン",
"デザイナーズ物件",
}
chairFeaturesMap map[string]int
estateFeaturesMap map[string]int
)
func init() {
chairFeaturesMap = make(map[string]int, len(chairFeatures))
for i, cf := range chairFeatures {
chairFeaturesMap[cf] = i + 1
}
estateFeaturesMap = make(map[string]int, len(estateFeatures))
for i, ef := range estateFeatures {
estateFeaturesMap[ef] = i + 1
}
}
func main() {
// chair
{
file, err := os.Open("chair_features.tsv")
if err != nil {
panic(err)
}
defer file.Close()
reader := csv.NewReader(file)
reader.Comma = '\t'
data := ""
// remove header
_, err = reader.Read() // 1行読み出し
if err != nil {
panic(err)
}
for {
line, err := reader.Read() // 1行読み出し
if err == io.EOF {
break
} else if err != nil {
panic(err)
}
if line[1] == "" {
continue
}
for _, feature := range strings.Split(line[1], ",") {
featureID, ok := chairFeaturesMap[feature]
if !ok {
panic(feature)
}
data += fmt.Sprintf("(%v, %v),", line[0], featureID)
}
}
fmt.Printf(
"INSERT INTO isuumo.chair_features (chair_id, feature_id) VALUES %s;\n",
strings.TrimSuffix(data, ","),
)
}
{
file, err := os.Open("estate_features.tsv")
if err != nil {
panic(err)
}
defer file.Close()
reader := csv.NewReader(file)
reader.Comma = '\t'
data := ""
// remove header
_, err = reader.Read() // 1行読み出し
if err != nil {
panic(err)
}
for {
line, err := reader.Read() // 1行読み出し
if err == io.EOF {
break
} else if err != nil {
panic(err)
}
if line[1] == "" {
continue
}
for _, feature := range strings.Split(line[1], ",") {
featureID, ok := estateFeaturesMap[feature]
if !ok {
panic(feature)
}
data += fmt.Sprintf("(%v, %v),", line[0], featureID)
}
}
fmt.Printf(
"INSERT INTO isuumo.estate_features (estate_id, feature_id) VALUES %s;",
strings.TrimSuffix(data, ","),
)
}
}