Hafas: More improvements to splitting place and name, mostly for POIs.

This commit is contained in:
Andreas Schildbach 2015-01-18 21:13:22 +01:00
parent 589cf69063
commit 7ff06cc2d4
20 changed files with 213 additions and 81 deletions

View file

@ -255,6 +255,11 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
return new String[] { null, name };
}
protected String[] splitPOI(final String poi)
{
return new String[] { null, poi };
}
protected String[] splitAddress(final String address)
{
return new String[] { null, address };
@ -410,7 +415,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
}
else if (type == 4) // poi
{
location = new Location(LocationType.POI, localId, lat, lon, null, value);
final String[] placeAndName = splitPOI(value);
location = new Location(LocationType.POI, localId, lat, lon, placeAndName[0], placeAndName[1]);
}
else if (type == 128) // crossing
{
@ -2100,7 +2106,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
}
else if (type == 3)
{
return new Location(LocationType.POI, null, lat, lon, null, name);
final String[] placeAndName = splitPOI(name);
return new Location(LocationType.POI, null, lat, lon, placeAndName[0], placeAndName[1]);
}
else
{

View file

@ -129,19 +129,29 @@ public final class BahnProvider extends AbstractHafasProvider
@Override
protected String[] splitStationName(final String name)
{
final Matcher mComma = P_SPLIT_NAME_ONE_COMMA.matcher(name);
if (mComma.matches())
return new String[] { mComma.group(2), mComma.group(1) };
final Matcher m = P_SPLIT_NAME_ONE_COMMA.matcher(name);
if (m.matches())
return new String[] { m.group(2), m.group(1) };
return super.splitStationName(name);
}
@Override
protected String[] splitPOI(final String poi)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(poi);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(poi);
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}

View file

@ -155,12 +155,22 @@ public final class BvgProvider extends AbstractHafasProvider
return place;
}
@Override
protected String[] splitPOI(final String poi)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(poi);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(poi);
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}

View file

@ -124,9 +124,9 @@ public class DsbProvider extends AbstractHafasProvider
@Override
protected String[] splitStationName(final String name)
{
final Matcher mParen = P_SPLIT_NAME_PAREN.matcher(name);
if (mParen.matches())
return new String[] { mParen.group(2), mParen.group(1) };
final Matcher m = P_SPLIT_NAME_PAREN.matcher(name);
if (m.matches())
return new String[] { m.group(2), m.group(1) };
return super.splitStationName(name);
}

View file

@ -91,17 +91,37 @@ public class InvgProvider extends AbstractHafasProvider
@Override
protected String[] splitStationName(final String name)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(name);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
for (final String place : PLACES)
{
if (name.startsWith(place + " ") || name.startsWith(place + "-"))
return new String[] { place, name.substring(place.length() + 1) };
else if (name.startsWith(place + ", "))
return new String[] { place, name.substring(place.length() + 2) };
}
return super.splitStationName(name);
}
@Override
protected String[] splitPOI(final String poi)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(poi);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(poi);
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}
@Override
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{

View file

@ -121,6 +121,16 @@ public class JetProvider extends AbstractHafasProvider
}
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}
private static final Pattern P_NORMALIZE_BUS = Pattern.compile("([א]?\\d{1,3})#");
@Override

View file

@ -112,9 +112,9 @@ public class LuProvider extends AbstractHafasProvider
@Override
protected String[] splitStationName(final String name)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(name);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(name);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(name);
}
@ -122,9 +122,9 @@ public class LuProvider extends AbstractHafasProvider
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}

View file

@ -107,19 +107,29 @@ public class NasaProvider extends AbstractHafasProvider
@Override
protected String[] splitStationName(final String name)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(name);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(name);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(name);
}
@Override
protected String[] splitPOI(final String poi)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(poi);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(poi);
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}

View file

@ -150,9 +150,9 @@ public class NvvProvider extends AbstractHafasProvider
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}

View file

@ -166,20 +166,28 @@ public class OebbProvider extends AbstractHafasProvider
protected String[] splitStationName(final String name)
{
for (final String place : PLACES)
{
if (name.startsWith(place + " "))
return new String[] { place, name.substring(place.length() + 1) };
}
return super.splitStationName(name);
}
@Override
protected String[] splitPOI(final String poi)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(poi);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(poi);
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}

View file

@ -136,9 +136,9 @@ public class RsagProvider extends AbstractHafasProvider
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}

View file

@ -118,19 +118,29 @@ public class SbbProvider extends AbstractHafasProvider
@Override
protected String[] splitStationName(final String name)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(name);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(name);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(name);
}
@Override
protected String[] splitPOI(final String poi)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(poi);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(poi);
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}

View file

@ -145,9 +145,9 @@ public class SeProvider extends AbstractHafasProvider
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_LAST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(2), mComma.group(1) };
final Matcher m = P_SPLIT_NAME_LAST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(2), m.group(1) };
return super.splitStationName(address);
}

View file

@ -297,9 +297,9 @@ public class SeptaProvider extends AbstractHafasProvider
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_LAST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(2), mComma.group(1) };
final Matcher m = P_SPLIT_NAME_LAST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(2), m.group(1) };
return super.splitStationName(address);
}

View file

@ -141,20 +141,28 @@ public class ShProvider extends AbstractHafasProvider
protected String[] splitStationName(final String name)
{
for (final String place : PLACES)
{
if (name.startsWith(place + " ") || name.startsWith(place + "-"))
return new String[] { place, name.substring(place.length() + 1) };
}
return super.splitStationName(name);
}
@Override
protected String[] splitPOI(final String poi)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(poi);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(poi);
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}

View file

@ -19,6 +19,7 @@ package de.schildbach.pte;
import java.io.IOException;
import java.util.Collection;
import java.util.regex.Matcher;
import de.schildbach.pte.dto.Location;
import de.schildbach.pte.dto.LocationType;
@ -114,6 +115,16 @@ public class SncbProvider extends AbstractHafasProvider
return super.splitStationName(name);
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}
@Override
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException
{

View file

@ -114,9 +114,9 @@ public class StockholmProvider extends AbstractHafasProvider
@Override
protected String[] splitStationName(final String name)
{
final Matcher mParen = P_SPLIT_NAME_PAREN.matcher(name);
if (mParen.matches())
return new String[] { mParen.group(2), mParen.group(1) };
final Matcher m = P_SPLIT_NAME_PAREN.matcher(name);
if (m.matches())
return new String[] { m.group(2), m.group(1) };
return super.splitStationName(name);
}
@ -124,9 +124,9 @@ public class StockholmProvider extends AbstractHafasProvider
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_LAST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(2), mComma.group(1) };
final Matcher m = P_SPLIT_NAME_LAST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(2), m.group(1) };
return super.splitStationName(address);
}

View file

@ -151,12 +151,22 @@ public class VbbProvider extends AbstractHafasProvider
return place;
}
@Override
protected String[] splitPOI(final String poi)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(poi);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(poi);
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}

View file

@ -94,19 +94,29 @@ public class VgsProvider extends AbstractHafasProvider
@Override
protected String[] splitStationName(final String name)
{
final Matcher mComma = P_SPLIT_NAME_LAST_COMMA.matcher(name);
if (mComma.matches())
return new String[] { mComma.group(2), mComma.group(1) };
final Matcher m = P_SPLIT_NAME_LAST_COMMA.matcher(name);
if (m.matches())
return new String[] { m.group(2), m.group(1) };
return super.splitStationName(name);
}
@Override
protected String[] splitPOI(final String poi)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(poi);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(poi);
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}

View file

@ -136,25 +136,33 @@ public class ZvvProvider extends AbstractHafasProvider
}
}
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(name);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(name);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
for (final String place : PLACES)
{
if (name.startsWith(place + " ") || name.startsWith(place + ","))
return new String[] { place, name.substring(place.length() + 1) };
}
return super.splitStationName(name);
}
@Override
protected String[] splitPOI(final String poi)
{
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(poi);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(poi);
}
@Override
protected String[] splitAddress(final String address)
{
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches())
return new String[] { mComma.group(1), mComma.group(2) };
final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (m.matches())
return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address);
}