Mechanical Edits/Mateusz Konieczny - bot account/fix many obvious typos
Page content created as advised on Automated_Edits_code_of_conduct#Document_and_discuss_your_plans.
Who
I, Mateusz Konieczny using my bot account
contact
message via OSM I will respond also to PMs to the bot account. In both cases I will be notified about incoming PMs via email and notifications in OSM editors.
Why
Why it is useful? It helps newbies to avoid becoming confused. It protects against such values becoming established. Without drudgery that would be required from the manual cleanup. It also makes easier to add missing values and makes easier to use OpenStreetMap data, including support in editors which explain/translate meaning of surface values.
Why automatic edit? I have a massive queue (in thousands and tens of thousands) of automatically detectable issues which are not reported by mainstream validators, require fixes and fix requires review or complete manual cleanup.
There is no point in manual drudgery here, with values obviously fixable.
This values here do NOT require manual overview. If this cases will turn out to be an useful signal of invalid editing than I will remain reviewing nearby areas where bot edited.
I already skipped edits to primary tags except few blatant cases where mistake is easy to miss (flowerbed until recently was not rendered). Typos in primary tags that cause them to be outright missing from typical map rendering is often coupled with other serious problems. Probably because it indicates mapping by newbies who are likely to be confused also by other complexities. The same goes for access tags that I will keep fixing manually. Though typos in for example shop values are safe to fix automatically, probably because effects are less noticeable. Also, more obvious typos in rare, typically not rendered amenity tags are often safe to fix.
Yes, bot edit WILL cause objects to be edited. Nevertheless, as result map data quality will improve.
This values were found automatically based on taginfo and iD presets, also accessed via taginfo.
Taginfo values statistics list values in OSM database, while iD presets list which values are known for given keys.
Multiple heuristics were applies to find various typos, for example "cuisine=bubble tea" was found to match "cuisine=bubble_tea" from iD presets after space was replaced by underscore.
"cuisine=Thai" to "cuisine=thai" after lowercasing value.
"cuising=regional1" to "cuisine=regional" after skipping ending.
All values were looked at then manually to drop any dubious replacement (for example healthcare=nursery to heatlhcare=nurse was skipped).
Samples was also looked at in OSM, with many values just edited. Note that not each replacement was sampled: as many, many have just few cases, so sampling and verifying ends with just editing all of them manually.
If you see any values where edit would be dubious, not safe or in any way problematic: let me know.
(BTW, one typo in iD presets was found while looking for typos, see https://github.com/openstreetmap/id-tagging-schema/pull/1063 )
(also, bug in https://taginfo.openstreetmap.org/projects/historic_place#tags listing was found thanks to additional review - see https://www.facebook.com/groups/historic.place/permalink/2715780891914218/ - it was fixed by maintainers of that project )
Some conversion were found manually in addition to iD presets, currently it is only cycleway:both.
I also contacted community already in some cases (like sport values with ; and in some cases of extra trailing characters) - via changeset comments and notes.
Response confirmed that this changes are a good idea - and that just editing will be better than asking more people.
Numbers
Depends on how many new objects appear - depends on editing activity in OSM.
#What section has number of affected objects for each value as of 2024-03-03. None is used more than 1000 times.
How
state before a mechanical edit (example for a tunnel value):
state after an edit:
With changeset comment " fixing unusual tunnel values with a clear replacement". Bot changeset is also tagged with tags that mark it as automatic, provide link to discussion approving edit, link repository with source code etc
Discussion
- https://lists.openstreetmap.org/pipermail/talk/2024-March/088514.html
- https://community.openstreetmap.org/t/proposed-bot-edit-fixing-bunch-of-typos-in-tags/110039/
- https://www.openstreetmap.org/changeset/148979715 [resolved]
- https://www.openstreetmap.org/changeset/149026774 [resolved]
- https://www.openstreetmap.org/changeset/149024167 [resolved]
- https://www.openstreetmap.org/changeset/148995504
- https://community.openstreetmap.org/t/bot-proposal-automatically-fix-several-tags/127989 and https://lists.openstreetmap.org/pipermail/talk/2025-March/088662.html - for extension in 2025
- https://community.openstreetmap.org/t/proposed-automated-edit-seperate-to-separate/129812 https://lists.openstreetmap.org/pipermail/talk/2025-May/088688.html - seperate values
Repetition
This is reoccurring edit and may be made as soon as new matching elements appear. At this moment triggering new edit requires human intervention so exact schedule is not predictable and bot may stop running at any moment.
This can change in a future. If bot is abandoned and does not run, feel free to ping me. If I am unable to run it any more feel free to use my code. Note that it may require going through bot approval process again and that code is on specific license.
https://codeberg.org/matkoniecz/OpenStreetMap_cleanup_scripts/src/branch/master/recurrent_bot_edits may have more up to date code version that what is listed on this page
What
Initial list
Due to technical limitations moved to /initial list (wiki was showing lua errors, not links to wiki pages)
Extension proposed in 2025
Tags where value has clear and obvious replacement. Count listed as of 2025-03-26
water_source=*
- water_source = 'Water Tank' (note presence of spaces!) ->
water_source=water_tank
4 instances - water_source = 'Water tank' (note presence of spaces!) ->
water_source=water_tank
3 instances - water_source = 'water tank' (note presence of spaces!) ->
water_source=water_tank
1 instances water_source=Main
->water_source=main
4 instanceswater_source=main1
->water_source=main
1 instanceswater_source=maink
->water_source=main
1 instances
- water_source = 'Water Tank' (note presence of spaces!) ->
transformer=*
transformer=distributiona
->transformer=distribution
1 instances
trail_visibility=*
trail_visibility=good∑
->trail_visibility=good
2 instancestrail_visibility=GOOD
->trail_visibility=good
16 instancestrail_visibility=Bad
->trail_visibility=bad
2 instancestrail_visibility=Good
->trail_visibility=good
2 instancestrail_visibility=intermediatel
->trail_visibility=intermediate
1 instancestrail_visibility=Excellent
->trail_visibility=excellent
1 instancestrail_visibility=excellentC
->trail_visibility=excellent
1 instancestrail_visibility=none
->trail_visibility=np
? instances
residential=*
- residential = 'trailer park' (note presence of spaces!) ->
residential=trailer_park
7 instances residential=Apartments
->residential=apartments
3 instances
- residential = 'trailer park' (note presence of spaces!) ->
sac_scale=*
- sac_scale = 'Demanding Mountain Hiking' (note presence of spaces!) ->
sac_scale=demanding_mountain_hiking
1 instances sac_scale=mountain_hiking1
->sac_scale=mountain_hiking
1 instances
- sac_scale = 'Demanding Mountain Hiking' (note presence of spaces!) ->
stop=*
toilets:disposal=*
toilets:disposal=Flush
->toilets:disposal=flush
5 instancestoilets:disposal=pit_latrine
->toilets:disposal=pitlatrine
1 instancestoilets:disposal=Bucket
->toilets:disposal=bucket
1 instances
tomb=*
tower:type=*
tower:type=Bell_tower
->tower:type=bell_tower
3 instances- tower:type = 'bell tower' (note presence of spaces!) ->
tower:type=bell_tower
2 instances tower:type=Observation
->tower:type=observation
1 instancestower:type=lighting1
->tower:type=lighting
19 instancestower:type=lighting3
->tower:type=lighting
1 instancestower:type=lighting11
->tower:type=lighting
2 instancestower:type=Communication
->tower:type=communication
7 instancestower:type=communication11
->tower:type=communication
3 instancestower:type=communication3
->tower:type=communication
2 instancestower:type=lightingw
->tower:type=lighting
2 instancestower:type=communication22
->tower:type=communication
1 instancestower:type=communication2
->tower:type=communication
1 instancestower:type=communicationb
->tower:type=communication
1 instancestower:type=communication1
->tower:type=communication
1 instancestower:type=observation3
->tower:type=observation
1 instances
piste:type=*
piste:type=ice-skate
->piste:type=ice_skate
4 instancespiste:type=Nordic
->piste:type=nordic
2 instancespiste:type=nordic;
->piste:type=nordic
2 instancespiste:type=nordicv
->piste:type=nordic
1 instancespiste:type=Skitour
->piste:type=skitour
1 instances
piste:grooming=*
piste:grooming=back_country
->piste:grooming=backcountry
1 instances
orientation=*
orientation=Parallel
->orientation=parallel
10 instancesorientation=parallell
->orientation=parallel
4 instancesorientation=parallel3
->orientation=parallel
1 instances
military_service=*
- military_service = 'air force' (note presence of spaces!) ->
military_service=air_force
1 instances
- military_service = 'air force' (note presence of spaces!) ->
golf=*
- golf = 'water hazard' (note presence of spaces!) ->
golf=water_hazard
1 instances golf=club_house
->golf=clubhouse
1 instances
- golf = 'water hazard' (note presence of spaces!) ->
parcel_pickup=*
parcel_pickup=yes;
->parcel_pickup=yes
2 instances
incline=*
house=*
house=detachedor
->house=detached
2 instances
hazard=*
dock=*
direction=*
direction=anti-clockwise
->direction=anticlockwise
189 instancesdirection=Forward
->direction=forward
29 instancesdirection=Both
->direction=both
8 instancesdirection=anti_clockwise
->direction=anticlockwise
3 instancesdirection=backward--
->direction=backward
1 instancesdirection=Anticlockwise
->direction=anticlockwise
1 instancesdirection=Clockwise
->direction=clockwise
1 instancesdirection=clockwise.
->direction=clockwise
1 instances
healthcare:speciality=*
surface=*
bicycle_parking=*
bicycle_parking=Stands
->bicycle_parking=stands
3 instancesbicycle_parking=stands2
->bicycle_parking=stands
1 instancesbicycle_parking=stands6
->bicycle_parking=stands
1 instancesbicycle_parking=Wall_loops
->bicycle_parking=wall_loops
1 instancesbicycle_parking=wall_loops21
->bicycle_parking=wall_loops
1 instancesbicycle_parking=building2
->bicycle_parking=building
1 instances
camera:type=*
camera:type=Dome
->camera:type=dome
3 instancescamera:type=Fixed
->camera:type=fixed
5 instances
castle_type=*
castle_type=hill_fort
->castle_type=hillfort
23 instances
access=*
Seperate
For some reason "seperate" is a common misspelling in "separate". This typo can be safely fixed for several key by an automated edit, without loss of anything useful.
cycleway:right=*
cycleway:right=seperate
->cycleway:right=separate
14 instances
cycleway:left=*
cycleway:left=seperate
->cycleway:left=separate
6 instances
cycleway:both=*
cycleway:both=seperate
->cycleway:both=separate
0 instances
cycleway=*
sidewalk:right=*
sidewalk:right=seperate
->sidewalk:right=separate
368 instances
sidewalk:left=*
sidewalk:left=seperate
->sidewalk:left=separate
129 instances
sidewalk:both=*
sidewalk:both=seperate
->sidewalk:both=separate
64 instances
sidewalk=*
parking:right=*
parking:right=seperate
->parking:right=separate
20 instances
parking:left=*
parking:left=seperate
->parking:left=separate
21 instances
parking:both=*
parking:both=seperate
->parking:both=separate
29 instances
ramp=*
ramp:wheelchair=*
ramp:wheelchair=seperate
->ramp:wheelchair=separate
15 instances
Removed values, after approval
;q suffixes - see https://www.openstreetmap.org/changeset/148995504
Opt-out
Please write at https://community.openstreetmap.org/ in thread where discussion has taken place.
See #Discussion