OSM Fa Fixer python script

hello to community. we like to know your opinion about this script. about a year ago i wrote a python script that fixes following cases on OSM:

  1. it converts English numbers (Arabic numerals , like:0123456789 ) in “name” tag to Farsi numbers (Eastern Arabic numerals , like ۰۱۲۳۴۵۶۷۸۹ ) if “name” is Farsi (consider in Iran all names in “name” tag should be in Farsi or local language)… we like to do this automated edit with script because there is a lot of cases like :
    مریم 5
    which is wrong and should be converted to: مریم ۵.
    this issue with numbers is happening that users uses none standard keyboards which doesn’t support Farsi numbers. also there are some Arabic numbers (٤٥٦) that we like to convert to Persian (۴۵۶) in Iran.
  2. Converting Arabic (Ya, Ka) (ك , ي) characters into their equivalents in Persian encoding (ک , ی). again this problem is caused be cause users and mappers uses none standard Farsi keyboard. now this is the most tricky one case. we should discuss more about this because some of our friends in our community thinks we shouldn’t do this. i like to know why?!
    so i think i should separate this two case into 2 different script …
    سلام به همه اعضای جامعه.
    ما دوست داریم نظرتون رو راجع به استفاده از این اسکریپت بدونیم. حدود یک سال پیش من یک اسکریپت پایتون ساختم که موارد زیر رو توی نقشه اصلاح میکنه:
    الف) تبدیل اعداد انگلیسی و فارسی به معادل فارسی در تگ نام. ما اینکار رو به این دلیل انجام میدیم که اکثر کاربرها و کسانی که اطلاعاتی رو وارد نقشه میکنند از کیبورد استاندارد فارسی استفاده نمیکنند و به همین دلیل اعدادی که وارد نام یک عارضه میکنند به صورت انگلیسی وارد میشه به جای فارسی.
    مریم 5 - مریم ۵
    ب) تبدیل حروف عربی ك , ي به معادل فارسی ک , ی .این مشکل هم بخاطر استفاده نکردن کاربرها از کیبورد استاندارد هستش. اصلاح این مشکل به صورت خودکار کم چالش بر انگیز هستش که باعث شده عده ای مخالفت کنند. به همین دلیل نیاز داریم نظر اکثریت جامعه رو بدونیم.
    به همین دلیل فکر میکنم بهتر این هستش که این 2 مورد رو به صورت 2 اسکریپت جدا گانه داشته باشیم و استفاده کنیم.
    لطفا نظرات و اطلاعات تکمیلی رو اینجا بیان کنید.
    با سپاس

Wiki Page : https://wiki.openstreetmap.org/wiki/Automated_edits/FaNumberFixer

this is a changeset of the latest time i ran this script:
https://www.openstreetmap.org/changeset/69313135
i know i should created a separate and a dedicated user account for this kind of edit and i will do it soon. and with the help of Sosha we will create a wiki page for this script.
how this script works ? we use an OverPass query to download required data using JOSM , save the downloaded data to a file. giving this file to the script and it will fix stuff and after validation we will upload the modified file using JOSM.
این آخرین چنجستی هستش که من این اسکریپت رو اجرا کردم:
https://www.openstreetmap.org/changeset/69313135
میدونم که باید یه اکانت جداگانه و مختص برای این اسکریپت بسازم و به زودی اینکار رو میکنم. و با کمک سوشا به زودی یه صفحه ویکی هم ایجاد میکنیم…

درود نوید جان و ممنون برای ایجاد این مطلب.

همونطور که اطلاع داری اسکریپت یک سری ضعف ها داره که باید این ضعف هاش برطرف بشه و تا موقعی هم که مشکلاتش برطرف نشده، نباید اجرا بشه.

دلیل مخالفت من اینه که افرادی معتقد هستن برای اجرای یک اسکریپت، سود و ضررش رو باید دید و اگر سودش بیشتر از ضررش باشه دلیل قانع کننده ایه برای اجراش. اما من مخالف این ایده م چون که وقتی ابزارهای دیگه ای هست به ما این اجازه رو میده که کار رو دقیقتر و تمیزتر انجام بدیم، منطقی نیست سراغ گزینه های ناایمن یا پر ریسک دیگه ای بریم، اونم در شرایطی که اون موضوعات اورژانسی نیستن.
خب یه موقع هست و یک موضوع اورژانسیه و باید سریع درست بشه، شاید بشه برای این مورد بحث سود و ضرر رو پیش کشید. اما برای داده هایی مانند این موضوع که فوریت نداره، بحث سود و ضرر منطقی بنظر نمیاد.

ما ابزارهای خوبی مثل سایت مپ رولت رو داریم که میتونیم با ریسک کمتر مشکلات نقشه رو باهاش حل کنیم. لذا پیشنهاد من تا موقع دست یابی به یک نتیجه، استفاده از سایت مپرولت هست.

در مورد فارسی کردن اعداد مثل همون “مریم 5” اعمال کردن اسکریپت به نفعمون نیست؟ حالا اگه فرضا عدد عربی هم باشه و تبدیل به عدد فارسی بشه فکر نمیکنم مشکلی رو ایجاد کنه
البته باز شما بیشتر از من موضوع رو بررسی کردین من نظر و چالش شخصیم رو گفتم. چون یکپارچه نبودن اعداد موجب مشکلاتی من جمله توی سرچ میشه

دقیقا مشکل همینه که نمیشه تفکیکی بین مریم 5 و مثلا مکانی که اسمش
B13
هست تفکیکی قائل شد و همه اینها به مریم ۵ و
b۱۳
تغییر پیدا میکنن.

این یک مثال بود و در عمل البته رخ داده.

مثال های دیگه میشه مثلا به نام های عربی اشاره کرد که بهتره با نویسه های عربی نوشته شده باشن و اسکریپت اون ها رو تغییر میده.

ضمن تشکر بابت اهمیتی که به این موضوع دادین، من یکی از مخالفان این کار هستم :slight_smile:

دربارهٔ ارقام

مشخصاً مشکلم با تبدیل ارقام عربیه. دلیلم را در قسمت حروف ك و ي میگم

البته درمورد ارقام انگلیسی این هم قابل تأمله:

دربارهٔ حروف ك و ي

اما مسئله اینجاست که علت این مشکل فقط صفحه کلید غیراستاندارد نیست.

پیام زیر را قبلا در گروه تلگرام فرستاده بودم که اینجا ارسالش میکنم:

منظورم را اگه بخوام بازتر کنم باید بگم که مثلا یک کاربر عرب به عنوان گردشگر یا زائر به ایران میاد و هتلی چیزی را ثبت میکنه. این کاربر بدون توجه به اینکه در کشور دیگری قرار داره، با پیشفرضهایی که از ویرایش در کشور خودش داشته نام عربی را در تگ **نیم **مینویسه در حالی که اینجا ایرانه و نام فارسی در تگ **نیم **و نام عربی در تگ نیم:عر نوشته میشه. اما اسکریپت شما فقط یک فرض داره: کاربر از صفحه کلید فارسی غیراستاندارد استفاده میکنه؛ در حالی که در این مثال، کاربر از قواعد تگ نویسی پیروی نکرده و این مشکل پیش آمده.

با تفکیک این دو کار موافقم و ایدهٔ خیلی خوبیه. اما به نظرم بهتره اسکریپت شما کار پیدا کردن این موارد رو انجام بده و اصلاح رو بر عهده کاربر انسان بگذاره. مزیت دیگر این کار را با یک مثال میگم. فرض کنید اون کاربری که مثال زدم دو جا را خلاف قواعد تگنویسی کرده باشه:

  1. name = شقق ابوعزيز
  2. name = شقق ابوعمر

اسکریپت شما مورد اول را پیدا میکنه چون ي داره. اما مورد دوم را پیدا نمیکنه. اما اگه یک انسان اینها را بررسی کنه، احتمالا متوجه اشتباه این کاربر میشه و بقیهٔ ویرایشهای او را هم بررسی میکنه و راهنماییش هم میکنه که طبق قواعد پیش بره.

اگر این مشکل فقط به خاطر صفحه کلید غیراستاندارد هم میبود، چه آنکه الآن صفحه کلید غیراستاندارد سهم زیادی در این مشکل داره، بهتره بررسی کنیم ببینیم مشکل چیه و در چه سیستم عاملی این کار انجام میشه و راهنمایی های لازم را به کاربران بدیم. آیا دوران استفاده از صفحه کلید غیراستاندارد به سر نیامده؟

و دقیقا اینجا جاییه که باید به سراغ چیزی مثل سایت مپ رولت رفت تا این ها دونه به دونه بررسی بشن.

سلام.
من موافق اجرای اسکریپت هستم، چون از اونجایی که به صورت قرارداری، تگ
name
توی ایران، مخصوص اسم فارسی هست، لازمه این کار انجام بشه تا اعداد هم به حالت فارسی دربیان. هم اصول رعایت میشه، هم نظم و یکپارچگی در ظاهر (تایل ها) و باطن (اصل داده ها)ی نقشه بوجود میاره
فکر میکنم مشکل کیبوردهای کاربرها اونقدری مهم نباشه، چون خودم توی جستجوی سایت هم دیدم که وقتی عدد فارسی سرچ میکنم،، عوارضی هم با عدد انگلیسی برای من پیدا میکنه.
ضمن اینکه من هنوز مطمئن نیستم که درصد قابل توجهی از کاربرها، کیبورد غیراستاندارد داشته باشن.

لطفاً به این مثال توجه کنین:

فرض کنید یک کاربر عرب به قصد سفر به مشهد میرود و در هتل اعیان ساکن میشود. فرض کنید این هتل روی نقشه نیست و این کاربر میخواهد آن را ثبت کند. تگگذاری او اینطور است:

name = هوتيل أعيان

اگر به حروف این کلمه دقت کنیم:

ه و ت ي ل أ ع ي ا ن

دو تا ي و یک أ داره

اسکریپت ما يها و حتی أ را هم اصلاح میکند و حالا تگگذاری اینطور میشود:

name = هوتیل اعیان

آیا جای کلمهٔ هوتیل در تگ نیم است؟ یا میبایست در تگ نیم:عر قرار بگیرد؟

اگر موافقید که جای کلمهٔ **هوتیل ** در تگ **نیم:عر ** است، پس این اصلاح صرفاً سرنخ را از ما گرفته و این دادهٔ غیراصولی تا مدت بیشتری آنجا میماند

حدس میزنم از این دست مثال در شهرهای مذهبی زیاد باشه. مثلا برای خانه های مسافرپذیر یا مسافرخانه ها و…

مشابه این مثال را میتونیم برای ارقام چهار، پنج و شش عربی بزنیم. یعنی ممکن است در حالی ما این ارقام را فارسی میکنیم که منظور کاربر ایجادکنننده، واقعا ارقام عربی بوده و صرفا کلید تگ را اشتباه انتخاب کرده

سلام به همه ی دوستان عزیز و ممنون از نظرات زیبا و تخصصیشون و از اینکه اینقدر زیبا و موشکافانه مشکلات رو بررسی کردن و من و دیگر دوستان رو هم در جریان قرار دادن، واقعاً استفاده بردیم.
بعد از خوندن کلیه بحثها دلایلی که برای اجرا نشدن این اسکریپت عنوان شده رو محکمتر و منطقی تر از دلایلی که برای اجرا شدنش عنوان شده میبینم و با دوستان مخالف اجرا شدن این اسکریپت موافقترم. اگر بشه که این اسکریپت ارتقا پیدا کنه بصورتی که خطاهایی که دوستان مطرح کردن دیگه توش اتفاق نیوفته هیچ کس با اجرا شدن مجددش مخالفتی نخواهد داشت مگر اینکه دوباره خطای دیگه ای دیده بشه که باز هم باید تا حل کردن و ارتقاء مجدد اسکریپت از اجرا کردنش خودداری کرد.
بازم ممنون از این بحث مفید.

سوشا جان همونطور که قبلا صحبت کردیم ، مثالی که برای مشکل
B13
زدی قبلا در اسکریپت برطرف شده و حتی موارد بیشتری رو من در نظر دارم که اسکریپ بهبود پیدا کنه تا اینطور مشکلات جلوگیری بشه.
و این قبیل موارد قابل تشخیص و تفکیک هست انقدر با اطمینان نگید که نمیشه.

ممنون از نظرتون. اینگونه موارد رو ما میتونیم توی اسکریپت یه لیست از کلمات کلیدی و پر تکرار عربی تهیه کنیم و به برنامه بگیم اگر این کلمات داخل اسم بود به اون اسم دست نزنه و تغییری ایجاد نکنه. تا حد زیادی مشکلات برطرف میشه.
و حالا چیزی که من میخوام اشاره کنم در جواب به شما اینکه که درسته اسکریپت اون کلمات عربی رو تغییر میده اما در واقعا مشکلی ایجاد نمیکنه و کاربرهای بعدی به راحتی میتونند این موارد رو تشخیص بدن و اصلاحات لازم رو انجام بدهند. این رو میگم چون دوستان قبلا گفتند که با تغییر این کلمات ، این مشکلات پنهان میشه و دیگه قابل پیدا کردن نیست که کاملا این طرز فکر اشتباهه.
از طرفی هم همونطور که توی صفحه ویکی مربوط به اسکریپت ها و ربات ها نوشته ، اگر مشکلی به صورت سیستماتیک برای داده ها پیش بیاد ، به صورت سیستماتیک هم قابل اصلاح هست. فرضا اگر اسکریپت ما کلمه “هوتیل” رو تغییر داد و ما بعدا متوجه این موضوع شدیم ، میتونید به یه حرکت ساده حتی بدون نیاز به برنامه نویسی تمام این موارد رو پیدا و اصلاح کنیم. پس به نظرم بذارید برنامه اجرا بشه و از مزیت هاش بهرمند بشیم و این مشکلات جزئی که پیش میاد رو (که اگه پیش بیاد که کم هم هستند) فعلا نادیده بگیریم و به مرور توسط کاربر ها و خودمون توسط برنامه برطرف کنیم…

سلام آقا کیارش عزیز.
بله همونطور که قبلا داخل گروه تلگرام گفتم این موارد تا حد زیادی قابل اصلاح هستش داخل برنامه.
نظر شما در رابطه با جدا کردن برنامه تبدیل اعداد و حروف عربی چیه ؟
با تبدیل اعداد موافقید یا کلا با هر دو مورد مخالف ؟
من خیلی دوست دارم نظره جامعه کشورهای دیگه رو بدونم. افرادی مثل کلادیوس و اندی و …

سلام نوید جان
با جدا شدنشون موافقم و فکر میکنم با هر اسکریپت نباید بیشتر از یک کار رو انجام داد. در کل اگر مشکلاتی که دوستان مطرح کردن قابل رفع باشه و بشه اسکریپت رو ارتقاء داد با اجرا شدنش مشکلی ندارم و فکر میکنم اگه بشه یک ادیت رو بدون نقص بصورت اتوماتیک انجام داد لزومی نداره که بصورت دستی انجامش بدیم. ولی در حال حاضر با توجه به بحثهای صورت گرفته حق رو به دوستان مخالف میدم و بنظرم اول باید این مشکلاتی که دوستان مطرح کردن مرتفع بشه و بعد اسکریپت اجرا بشه.

اگر این مشکل برطرف شده من دلیلی برای مخالفت با تبدیل ارقام انگلیسی نمیبینم و مخالف نیستم.

راهکار خوبیه. اما تا الان چندین بار ربات اجرا شده. پیشنهاد میکنم فعلا دست نگه داریم و تغییرات این چند مرتبه را یه ارزیابی بکنیم. مثلا اگه کسی بتونه از کل تغییراتی که اسکریپت تا به حالا روی اسامی انجام داده یه جدول در بیاره، مثلا اینطوری:

که مرورش راحت انجام بشه، من خودم قول میدم جدول رو مرور کنم و موارد اشتباه رو جدا کنم و بهتون اعلام کنم. اون موقع با دید شفافتر حتی میشه راجع به سود و زیانش هم صحبت کرد.

من معتقدم باعث مخفی شدن مشکل میشه. یعنی گرهی که با دست باز میشه را میسپاریم به دندان.

وقتی میتونیم با یک کوئری ساده همه کلمه های دارای ي و ك و ارقام عربی را دربیاریم و در اختیار کاربر بذاریم چرا این معیار را از خودمون بگیریم تا کاربران بخواهند به صورت تصادفی در ویرایشهاشون یا وقتی نقشه را مرور میکنن با چشم پیداشون کنن؟

و مزیت دیگه هم که قبلا گفتم، چهار نفر را به راه راست هدایت میکنیم که صفحه کلیدشون را اصلاح کنن یا اصلا اینطوری بگم، بعد از مکاتبه با کاربران مربوطه، متوجه میشیم که در بعضی سیستمها امکان اصلاح صفحه کلید نیست و همین اسکریپت چاره کار ماست.

بله، اما نگفته مجاز هستید با آگاهی به اشتباه، اشتباه سیستماتیک بکنید.

ممکنه قابل اجرا باشه. اما ما الان از اشتباه های اسکریپت اطلاع کامل نداریم. من به جز اون سه مورد چند مورد دیگه هم قبلا دیدم، ولی خیلی سخته بخوام دونه دونه در تاریخچه سایت دنبالشون بگردم.
اگر اون جدولی که ابتدای این پست گفتم را بتونیم تهیه کنیم، میشه راحت تر ایرادهای اسکریپت را درآورد و قضاوت کرد

هنوز اون مورد نامهایی که ممکنه واقعا عربی باشن و نباید عوض بشن پابرجاست.
راه حلی براش دارید؟

Hi all,

In general, as long as a script satisfies “Automated Edits code of conduct” https://wiki.openstreetmap.org/wiki/Automated_Edits_code_of_conduct and it helps the data integrity, can be helpful. Above detailed discussions explains how it may cause some minor damages that might remain invisible for a long time, looks like there can be solutions for that, like that report as a table of changes which needs to be investigated by human editors, or dividing it in to two separate scripts.
Thank you all for these informative discussions and special thank to Navid for this script and his professional approach to the issue.

Ebrahim

نوید جان، طی درخواستت مبنی بر این که توی اسکریپت بهت کمک بدم(در مورد راهحلی که بتونه مشکل رو حل کنه)، به این فکر کردم که از هر دو ابزار برای این موارد استفاده کنیم.

یعنی هم از مپ رولت بهره ببریم و هم از اسکریپت.

در مورد خود اسکریپت، چند بخش کردنش که کاملا لازم الجراست. یعنی همونطور که کیارش گفت، اسکریپت باید یه کار رو انجام بده و برای کارهای دیگه باید اسکریپت دیگه ای ایجاد بشه.

لطفا برای اسکریپت یک صفحه گیتهاب ایجاد کنید و یا اگر تمایل دارید من صفحه رو در ریپوزیتوری او اس ام ایران ایجاد کنم، اونجا اسکریپت رو به چند بخش میتونیم تقسیم کنیم، مشکلاتش رو با هم حل کنیم و یا از افراد دیگه ای بخوایم مشارکت کنن.

در همونجا لیستی از واژه هایی که نباید تغییر پیدا کنن رو هم با هم مینویسیم.

ولی در صورت بروز هر گونه مشکل و یا گزارشی در این رابطه، اسکریپت به هیچ وجه نباید تا موقع حل مشکل اجرا بشه.

من بعد از هر اجرا، وظیفه بررسی تغییرات ربات رو برعهده میگیرم تا اطمینان پیدا کنم مشکلی نباشه.

اسکریپت حداقل باید هر یک ماه ایجاد بشه و صفحه ویکی کاملی رو هم داشته باشه.

میتونیم همین روند رو برای کلیه ی اسکریپت هایی که قراره روی نقشه ایران کار کنن داشته باشیم.

اگر نکته ای از قلم انداختم لطفا بهم بگو تا نظرم رو در بارش بگم. چون احساس میکنم شاید به بعضی از سوالاتت جواب نداده باشم.

موفق باشی

سلام سوشا. ممنون از این پست.
من همین الان دارم روی اسکریپت کار میکنم و به دو بخش تقسیمش کردم و روی بخش تبدیل اعداد خیلی کار کردم و خوب شده. به زودی باهات صحبت میکنم که روی گیت هاب بذاریمیش. باید بهم دسترسی بدی فکر کنم از گیت هاب ایران که گفتی حالا اینو صحبت میکنیم سره فرصت.
فرمودی که هم از مپ رولت استفاده کنیم و هم اسکریپت ولی نگفتی که از مپ رولت چه استفاده ای میخوای بکنی در کناره برنامه.
مرسی از کمکت.