Changeset 14517 in josm for trunk/src


Ignore:
Timestamp:
2018-12-06T10:55:42+01:00 (5 years ago)
Author:
GerdP
Message:

see #17055 improve TagChecker

  • don't suggest fix value when given value is short and Levenshtein distance is 2

surface=u should not be fixed with surface=mud but highway=tra can be fixed with highway=track

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java

    r14508 r14517  
    533533                } else if (!isTagInPresets(key, value)) {
    534534                    // try to fix common typos and check again if value is still unknown
    535                     String fixedValue = harmonizeValue(prop.getValue());
     535                    final String harmonizedValue = harmonizeValue(prop.getValue());
     536                    String fixedValue = null;
    536537                    Set<String> possibleValues = getPresetValues(key);
    537538                    List<String> fixVals = new ArrayList<>();
    538539                    int maxPresetValueLen = 0;
    539                     if (!possibleValues.contains(fixedValue)) {
     540                    if (possibleValues.contains(harmonizedValue)) {
     541                        fixedValue = harmonizedValue;
     542                    } else {
    540543                        // use Levenshtein distance to find typical typos
    541544                        int minDist = MAX_LEVENSHTEIN_DISTANCE + 1;
     
    544547                            if (possibleVal.isEmpty())
    545548                                continue;
     549                            if (harmonizedValue.length() < 3 && possibleVal.length() >= harmonizedValue.length() + MAX_LEVENSHTEIN_DISTANCE) {
     550                                // don't suggest fix value when given value is short and lengths are too different
     551                                // for example surface=u would result in surface=mud
     552                                continue;
     553                            }
    546554                            maxPresetValueLen = Math.max(maxPresetValueLen, possibleVal.length());
    547                             int dist = Utils.getLevenshteinDistance(possibleVal, fixedValue);
     555                            int dist = Utils.getLevenshteinDistance(possibleVal, harmonizedValue);
    548556                            if (dist < minDist) {
    549557                                closest = possibleVal;
     
    555563                            }
    556564                        }
    557                         fixedValue = null;
    558565                        if (minDist <= MAX_LEVENSHTEIN_DISTANCE && maxPresetValueLen > MAX_LEVENSHTEIN_DISTANCE) {
    559566                            if (fixVals.size() < 2) {
Note: See TracChangeset for help on using the changeset viewer.