ent_offline_udf_russia.py 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. #!/usr/bin/env /usr/bin/python3
  2. # -*- coding:utf-8 -*-
  3. import hashlib
  4. # 企业库唯一性调整,离线数据udf
  5. from dw_base.spark.udf.customs.common_clean import clean_company_name
  6. escape_mapping = {
  7. """: '"',
  8. "&lt;": "<",
  9. "&gt;": ">",
  10. "&amp;": "&",
  11. "&apos;": "'"
  12. }
  13. rus_head = [
  14. 'ООО',
  15. 'АО',
  16. 'ПАО',
  17. 'ЗАО',
  18. 'ИП',
  19. 'Общество с ограниченной ответственностью',
  20. 'Акционерное общество',
  21. 'Публичное акционерное общество',
  22. 'Закрытое акционерное общество',
  23. 'Индивидуальный предприниматель'
  24. ]
  25. def replace_escape_char(input_str):
  26. if not input_str:
  27. return None
  28. for key, value in escape_mapping.items():
  29. input_str = input_str.replace(key, value)
  30. return input_str
  31. def generate_md5_hash(input_str: str):
  32. input_data = input_str.encode('utf-8')
  33. md5_hash = hashlib.md5()
  34. md5_hash.update(input_data)
  35. return md5_hash.hexdigest()
  36. def generate_tid_rus(company_name: str,
  37. business_number: str,
  38. region: str) -> str or None:
  39. if not company_name:
  40. return None
  41. if business_number:
  42. input_str = business_number + 'AAA'
  43. else:
  44. if region:
  45. input_str = f"{company_name}-{region}BBB"
  46. else:
  47. input_str = company_name + 'CCC'
  48. return 'RUS' + generate_md5_hash(input_str)
  49. def clean_company_name_extra(s: str) -> str or None:
  50. if s:
  51. # 去除前缀
  52. for prefix in rus_head:
  53. if s.startswith(prefix.upper()):
  54. s = s[len(prefix):]
  55. break
  56. # 去除字符串前后的空格
  57. s = s.strip()
  58. return s
  59. return None
  60. def clean_company_name_rus(company_name: str) -> str or None:
  61. if company_name:
  62. replace_name = replace_escape_char(company_name)
  63. name = clean_company_name(replace_name)
  64. if name:
  65. name = clean_company_name_extra(name)
  66. return name
  67. return None
  68. region_mapping = {
  69. 'Нижегородская область': 'Нижегородская область',
  70. 'Тамбовская область': 'Тамбовская область',
  71. 'Саратовская область': 'Саратовская область',
  72. 'Пермский край': 'Пермский край',
  73. 'Кировская область': 'Кировская область',
  74. 'Еврейская автономная область': 'Еврейская автономная область',
  75. 'Херсонская область': None,
  76. 'Красноярский край': 'Красноярский край',
  77. 'Тюменская область': 'Тюменская область',
  78. 'Липецкая область': 'Липецкая область',
  79. 'Коми (Республика)': 'Республика Коми',
  80. 'Владимирская область': 'Владимирская область',
  81. 'Башкортостан (Республика)': 'Республика Башкортостан',
  82. 'Санкт-Петербург': 'Город Санкт-Петербург',
  83. 'Калининградская область': 'Калининградская область',
  84. 'Бурятия (Республика)': 'Республика Бурятия',
  85. 'Амурская область': 'Амурская область',
  86. 'Камчатский край': 'Камчатский край',
  87. 'Оренбургская область': 'Оренбургская область',
  88. 'Севастополь': 'Севастополь',
  89. 'Марий Эл (Республика)': 'Республика Марий Эл',
  90. 'Астраханская область': 'Астраханская область',
  91. 'Алтай (Республика)': 'Республика Алтай',
  92. 'Ивановская область': 'Ивановская область',
  93. 'Тульская область': 'Тульская область',
  94. 'Мурманская область': 'Мурманская область',
  95. 'Саха (Республика) (Якутия)': 'Республика Саха (Якутия)',
  96. 'Чеченская Республика': 'Чеченская Республика',
  97. 'Ленинградская область': 'Ленинградская область',
  98. 'Луганская Народная Республика': None,
  99. 'Челябинская область': 'Челябинская область',
  100. 'Томская область': 'Томская область',
  101. 'Мордовия (Республика)': 'Республика Мордовия',
  102. 'Кабардино-Балкарская Республика': 'Кабардино-Балкарская Республика',
  103. 'Республика Татарстан': 'Республика Татарстан',
  104. 'Северная Осетия-Алания (Республика)': 'Республика Северная Осетия-Алания',
  105. 'Тверская область': 'Тверская область',
  106. 'Ярославская область': 'Ярославская область',
  107. 'Иркутская область': 'Иркутская область',
  108. 'Орловская область': 'Орловская область',
  109. 'Рязанская область': 'Рязанская область',
  110. 'Сахалинская область': 'Сахалинская область',
  111. 'Волгоградская область': 'Волгоградская область',
  112. 'Ставропольский край': 'Ставропольский край',
  113. 'Псковская область': 'Псковская область',
  114. 'Московская область': 'Московская область',
  115. 'Магаданская область': 'Магаданская область',
  116. 'Приморский край': 'Приморский край',
  117. 'Хакасия (Республика)': 'Республика Хакасия',
  118. 'Самарская область': 'Самарская область',
  119. 'Карачаево-Черкесская Республика': 'Карачаево-Черкесская Республика',
  120. 'Чувашская Республика-Чувашия': 'Чувашская Республика',
  121. 'Смоленская область': 'Смоленская область',
  122. 'Свердловская область': 'Свердловская область',
  123. 'Ингушетия (Республика)': 'Республика Ингушетия',
  124. 'Новгородская область': 'Новгородская область',
  125. 'Ростовская область': 'Ростовская область',
  126. 'Пензенская область': 'Пензенская область',
  127. 'Вологодская область': 'Вологодская область',
  128. 'Кемеровская область': 'Кемеровская область - Кузбасс',
  129. 'Москва': 'Город Москва',
  130. 'Курганская область': 'Курганская область',
  131. 'Белгородская область': 'Белгородская область',
  132. 'Курская область': 'Курская область',
  133. 'Архангельская область': 'Архангельская область',
  134. 'Ульяновская область': 'Ульяновская область',
  135. 'Воронежская область': 'Воронежская область',
  136. 'Брянская область': 'Брянская область',
  137. 'Донецкая Народная Республика': None,
  138. 'Республика Крым': 'Республика Крым',
  139. 'Костромская область': 'Костромская область',
  140. 'Дагестан (Республика)': 'Республика Дагестан',
  141. 'Калужская область': 'Калужская область',
  142. 'Запорожская область': None,
  143. 'Забайкальский край': 'Забайкальский край',
  144. 'Адыгея (Республика) (Адыгея)': 'Республика Адыгея',
  145. 'Хабаровский край': 'Хабаровский край',
  146. 'Чукотский автономный округ': 'Чукотский автономный округ',
  147. 'Краснодарский край': 'Краснодарский край',
  148. 'Алтайский край': 'Алтайский край',
  149. 'Калмыкия (Республика)': 'Республика Калмыкия',
  150. 'Омская область': 'Омская область',
  151. 'Новосибирская область': 'Новосибирская область',
  152. 'Байконур': 'Байконур',
  153. 'Удмуртская Республика': 'Удмуртская Республика',
  154. 'Тыва (Республика)': 'Республика Тыва',
  155. 'Карелия (Республика)': 'Республика Карелия'
  156. }
  157. def get_standard_region(region: str) -> str or None:
  158. if not region:
  159. return None
  160. return region_mapping.get(region)
  161. if __name__ == '__main__':
  162. name = 'Хакасия (Республика)'
  163. print(get_standard_region(name))
  164. pass