org.unlaxer.jaddress.elaticesearch.RequestData Maven / Gradle / Ivy
package org.unlaxer.jaddress.elaticesearch;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RequestData {
private Pattern pattern = Pattern.compile("([^0-9-]+)([0-9-]+)");
private Pattern pattern2 = Pattern.compile("(.+[市郡])(.+)");
private final String SPACE = " +| +";
enum Field {
text, //
zip, //
address, //
manshon, //
todoufuken, //
shikutyousongun, //
kutyouson, //
mati, //
tyoume, //
banti, //
gou, //
tatemono, //
tou, //
// kai, //
heyabangou //
;
// unknown,//
public String keyword() {
return this.name() + ".keyword";
}
};
public String id;
public Map map;
public RequestData(int id, String text) {
super();
this.id = String.valueOf(id);
parse(text);
}
private void parse(String text) {
map = new HashMap<>();
String[] split = text.split("\t");
add(Field.text, text);
add(Field.zip, split[0]);
add(Field.address, split[1]);
address1();
if (split.length == 3) {
add(Field.manshon, split[2]);
manshon1();
}
}
private void address1() {
String val = map.get(Field.address.name());
String[] split = val.split(SPACE);
// 大阪府
if (split[0].endsWith("府")) {
add(Field.todoufuken, split[0]);
} else {
System.out.println(this.id + ":" + split[0]);
}
// 大阪府 大阪市都島区 大阪市都島区高倉町1-9-8 フォーレスト 303
if (split[2].contains(split[1])) {
split[2] = split[2].replace(split[1], "");
}
// 大阪市住吉区
if (split[1].endsWith("市")) {
add(Field.shikutyousongun, split[1]);
} else {
Matcher ma = pattern2.matcher(split[1]);
if (ma.find()) {
if (ma.groupCount() == 2) {
add(Field.shikutyousongun, ma.group(1));
add(Field.kutyouson, ma.group(2));
} else {
System.out.println(this.id + ":E1:" + split[1]);
}
} else {
if(split[1].endsWith("郡")) {
add(Field.shikutyousongun, split[1]);
}else {
add(Field.shikutyousongun, getShikutyousongun(split[1]));
add(Field.kutyouson, split[1]);
}
}
}
// 山之内3-3-5
Matcher ma = pattern.matcher(split[2]);
if (ma.find()) {
if (ma.groupCount() == 2) {
add(Field.mati, ma.group(1));
tyoumeSpliter(ma.group(2));
} else {
System.out.println(this.id + ":E2:" + ma.group(1));
}
} else {
// 大阪府 高槻市 大字 原924
ma = pattern.matcher(split[3]);
if (ma.find()) {
if (ma.groupCount() == 2) {
add(Field.mati, split[2] + ma.group(1));
tyoumeSpliter(ma.group(2));
} else {
System.out.println(this.id + ":E3:" + ma.group(1));
}
} else {
System.out.println(this.id + ":E4:" + split[3]);
}
}
}
private void tyoumeSpliter(String val) {
String[] tmp2 = val.split("-");
switch (tmp2.length) {
case 1:
add(Field.banti, tmp2[0]);
break;
case 2:
add(Field.tyoume, tmp2[0]);
add(Field.banti, tmp2[1]);
break;
case 3:
add(Field.tyoume, tmp2[0]);
add(Field.banti, tmp2[1]);
add(Field.gou, tmp2[2]);
break;
case 4:
add(Field.tyoume, tmp2[0]);
add(Field.banti, tmp2[1]);
add(Field.gou, tmp2[2]);
add(Field.heyabangou, tmp2[3]);
break;
case 5:
add(Field.tyoume, tmp2[0]);
add(Field.banti, tmp2[1]);
add(Field.gou, tmp2[2]);
add(Field.tou, tmp2[3]);
add(Field.heyabangou, tmp2[4]);
break;
default:
System.out.println(this.id + ":E5:" + val);
throw new IllegalArgumentException("Unexpected value: " + tmp2.length);
}
}
private void manshon1() {
// バラけすぎなので、適当に割当
//ex) length == 1
// グランクレールK402
//上住吉住宅2-102
//1212号
//カサコモド
//903
//3-D
//-501
//ロイヤルハイツ宏和F-8号
//府住18-714
//府営住宅
//5棟109
//4F
//2A
//4C
//高槻病院
//UR賃貸マンション
//紺田拓洋
//市営井高野第6住宅
String val = map.get(Field.manshon.name());
String[] wk = val.split(SPACE);
switch (wk.length) {
case 1:
add(Field.tatemono, val);
break;
case 2:
add(Field.tatemono, wk[0]);
add(Field.heyabangou, wk[1]);
break;
case 3:
add(Field.tatemono, wk[0] + " " + wk[1]);
add(Field.heyabangou, wk[2]);
break;
case 4:
add(Field.tatemono, wk[0] + " " + wk[1] + " " + wk[2]);
add(Field.heyabangou, wk[3]);
break;
default:
System.out.println(this.id + ":E6:" + val);
throw new IllegalArgumentException("Unexpected value: " + val);
}
}
private void add(Field field, String value) {
map.put(field.name(), value);
}
private String getShikutyousongun(String val) {
//足りない 市、郡 を追加
if (val.equals("堺区")) {
return "堺市";
} else if (val.equals("城東区")) {
return "大阪市";
} else if (val.equals("生野区")) {
return "大阪市";
} else if (val.equals("忠岡町")) {
return "泉北郡";
} else if (val.equals("浪速区")) {
return "大阪市";
}
throw new IllegalArgumentException("Unexpected value: " + val);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy