org.unlaxer.jaddress.parser.processor.BuildingTokenizer 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.processor;
import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.unlaxer.jaddress.entity.standard.SingleOrRange階層要素;
import org.unlaxer.jaddress.entity.standard.定義済みRange階層要素;
import org.unlaxer.jaddress.entity.standard.階層要素;
import org.unlaxer.jaddress.parser.AddressContext;
import org.unlaxer.jaddress.parser.AddressElement;
import org.unlaxer.jaddress.parser.AddressElementFactory;
import org.unlaxer.jaddress.parser.AddressProcessor;
import org.unlaxer.jaddress.parser.BuildingHierarchyResolverResult;
import org.unlaxer.jaddress.parser.BuildingNameSplitter;
import org.unlaxer.jaddress.parser.IntermediateResult;
import org.unlaxer.jaddress.parser.NumberParser;
import org.unlaxer.jaddress.parser.ParsingState;
import org.unlaxer.jaddress.parser.ParsingTarget;
import org.unlaxer.jaddress.parser.TargetStateAndElement;
import org.unlaxer.jaddress.parser.TripletAddressToken;
import org.unlaxer.util.Singletons;
import org.unlaxer.util.collection.TreeNode;
public class BuildingTokenizer implements AddressProcessor {
Logger logger = LoggerFactory.getLogger(getClass());
@Override
public ParsingState targetState() {
return ParsingState.建物名の抜き出しをする;
}
// @Override
// public 階層要素 target階層要素() {
// return 階層要素.建物以降;
// }
static NumberParser numberParser = Singletons.get(NumberParser.class);
@Override
public TargetStateAndElement process(ParsingTarget parsingTarget) {
AddressContext addressContext = parsingTarget.addressContext();
IntermediateResult intermediateResult = parsingTarget.intermediateResult();
Optional buildingHierarchyResult = intermediateResult.buildingHierarchy();
// 建物階層 buildingHierarchy = intermediateResult.建物階層();
TreeNode targetNode = targetNode(parsingTarget);
AddressElement addressElement = targetNode.get();
logger.debug("target block address {}" , addressElement);
Optional matchedWithBuilding =
buildingHierarchyResult.map(resolverResult->BuildingNameSplitter.split(addressElement, resolverResult))
.orElse(Optional.empty());
matchedWithBuilding.ifPresent(matched->{
addressContext.addChild(
targetNode ,
AddressElementFactory.of(
matched.joinPredecessorAndMatched(),
階層要素.建物
)
);
addressContext.addChild(
targetNode ,
AddressElementFactory.of(
matched.successor(),
定義済みRange階層要素.建物より後
)
);
});
// if(buildingHierarchy == 建物階層.建物無し ||
// (buildingHierarchy == 建物階層.建物名のみ && matchedWithBuilding.isPresent())){
//
// return new TargetStateAndElement(
// ParsingState.建物より後のTokenをmappingする ,
// SingleOrRange階層要素.of(定義済みRange階層要素.全体));
// }
return new TargetStateAndElement(
ParsingState.建物より後の分割をする ,
matchedWithBuilding.isPresent() ?
SingleOrRange階層要素.of(定義済みRange階層要素.建物より後):
parsingTarget.target階層要素()
);
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy