All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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