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 }; return new String[] { null, name };
} }
protected String[] splitPOI(final String poi)
{
return new String[] { null, poi };
}
protected String[] splitAddress(final String address) protected String[] splitAddress(final String address)
{ {
return new String[] { null, address }; return new String[] { null, address };
@ -410,7 +415,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
} }
else if (type == 4) // poi 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 else if (type == 128) // crossing
{ {
@ -2100,7 +2106,8 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider
} }
else if (type == 3) 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 else
{ {

View file

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

View file

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

View file

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

View file

@ -91,17 +91,37 @@ public class InvgProvider extends AbstractHafasProvider
@Override @Override
protected String[] splitStationName(final String name) 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) for (final String place : PLACES)
{
if (name.startsWith(place + " ") || name.startsWith(place + "-")) if (name.startsWith(place + " ") || name.startsWith(place + "-"))
return new String[] { place, name.substring(place.length() + 1) }; 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); 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 @Override
public NearbyStationsResult queryNearbyStations(final Location location, final int maxDistance, final int maxStations) throws IOException 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})#"); private static final Pattern P_NORMALIZE_BUS = Pattern.compile("([א]?\\d{1,3})#");
@Override @Override

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -94,19 +94,29 @@ public class VgsProvider extends AbstractHafasProvider
@Override @Override
protected String[] splitStationName(final String name) protected String[] splitStationName(final String name)
{ {
final Matcher mComma = P_SPLIT_NAME_LAST_COMMA.matcher(name); final Matcher m = P_SPLIT_NAME_LAST_COMMA.matcher(name);
if (mComma.matches()) if (m.matches())
return new String[] { mComma.group(2), mComma.group(1) }; return new String[] { m.group(2), m.group(1) };
return super.splitStationName(name); 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 @Override
protected String[] splitAddress(final String address) protected String[] splitAddress(final String address)
{ {
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address); final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches()) if (m.matches())
return new String[] { mComma.group(1), mComma.group(2) }; return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address); 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); final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(name);
if (mComma.matches()) if (m.matches())
return new String[] { mComma.group(1), mComma.group(2) }; return new String[] { m.group(1), m.group(2) };
for (final String place : PLACES) for (final String place : PLACES)
{
if (name.startsWith(place + " ") || name.startsWith(place + ",")) if (name.startsWith(place + " ") || name.startsWith(place + ","))
return new String[] { place, name.substring(place.length() + 1) }; return new String[] { place, name.substring(place.length() + 1) };
}
return super.splitStationName(name); 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 @Override
protected String[] splitAddress(final String address) protected String[] splitAddress(final String address)
{ {
final Matcher mComma = P_SPLIT_NAME_FIRST_COMMA.matcher(address); final Matcher m = P_SPLIT_NAME_FIRST_COMMA.matcher(address);
if (mComma.matches()) if (m.matches())
return new String[] { mComma.group(1), mComma.group(2) }; return new String[] { m.group(1), m.group(2) };
return super.splitStationName(address); return super.splitStationName(address);
} }