org.unlaxer.jaddress.parser.HeuristicBlockMatcher Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of japanese-address-parser Show documentation
Show all versions of japanese-address-parser Show documentation
a simplejapanese address parser
The newest version!
package org.unlaxer.jaddress.parser;
import org.unlaxer.jaddress.entity.standard.階層要素;
public class HeuristicBlockMatcher{
public enum MatchResult{
noMatch,
withSuffix,
withoutSuffix,
;
public boolean isMatch() {
return this == withSuffix || this == withoutSuffix;
}
}
public static MatchResult isMatch(ParsingTarget parsingTarget , TripletAddressToken triplet , 階層要素 _階層要素) {
StringAndCharacterKinds stringAndCharacterKinds = triplet.matched().stringAndCharacterKinds().strip();
CharacterKinds characterKinds = new CharacterKinds(stringAndCharacterKinds);
StringAndCharacterKinds successor = triplet.successor().stringAndCharacterKinds().strip();
String successorString = successor.asString();
if(characterKinds.isNumber() &&
(successorString.startsWith("号室"))){//||
//successor.equals("号"))) {
parsingTarget.addResolverResult(
new ResolverResult(ResolverResultKindOfBoolean.Block要素中に号室を発見));
return MatchResult.noMatch;
}
if(triplet.predecessor().stringAndCharacterKinds().size()>1) {
parsingTarget.addResolverResult(
new ResolverResult(ResolverResultKindOfBoolean.Block要素の前段のCharacter種類が2個以上));
return MatchResult.noMatch;
}
if(triplet.predecessor().stringAndCharacterKinds().joined.length()>2) {
parsingTarget.addResolverResult(
new ResolverResult(ResolverResultKindOfBoolean.Block要素の前段の文字列が3文字以上));
return MatchResult.noMatch;
}
if(successor.isPresent()) {
StringAndCharacterKind term = successor.get(0);
switch (_階層要素) {
case 町域Top1:
if(isMatch(term , CharacterKind.suffix丁目)) {
parsingTarget.addResolverResult(new ResolverResult(ResolverResultKindOfBoolean.丁目要素確定));
return MatchResult.withSuffix;
}
if(isMatch(term, CharacterKind.suffix地番,CharacterKind.suffix号 ,
CharacterKind.suffix棟 , CharacterKind.suffix階 , CharacterKind.suffix号室 )) {
return MatchResult.noMatch;
}
break;
case 町域Top2:
if(isMatch(term , CharacterKind.suffix地番)) {
parsingTarget.addResolverResult(new ResolverResult(ResolverResultKindOfBoolean.番地要素確定));
return MatchResult.withSuffix;
}
if(isMatch(term, CharacterKind.suffix丁目,CharacterKind.suffix号 ,
CharacterKind.suffix棟 , CharacterKind.suffix階 , CharacterKind.suffix号室 )) {
return MatchResult.noMatch;
}
break;
case 町域Top3:
case 町域Top4:
if(isMatch(term , CharacterKind.suffix号)) {
parsingTarget.addResolverResult(new ResolverResult(ResolverResultKindOfBoolean.号要素確定));
return MatchResult.withSuffix;
}
if(isMatch(term, CharacterKind.suffix丁目,CharacterKind.suffix地番 ,
CharacterKind.suffix棟 , CharacterKind.suffix階 , CharacterKind.suffix号室 )) {
return MatchResult.noMatch;
}
break;
default:
break;
}
}
return MatchResult.withoutSuffix;
}
static boolean isMatch(StringAndCharacterKind target , CharacterKind... characterKindOfSuffiixies ) {
for(CharacterKind characterKindOfSuffix: characterKindOfSuffiixies) {
for(String suffix : characterKindOfSuffix.strings()) {
if(suffix.equals(target.string)){
return true;
}
}
}
return false;
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy