Код: Выделить всё
def num_removal (address):
import re
if not address:
return address
else:
clean address=address
List [ 'FLATNO', 'FLAT NO', 'FLAT.NO', 'FLAT. NO', 'FLAT NUMBER', 'FL',
'FLAT NUMBER', 'FLAT.NO', 'FLAT. NO', 'FLAT-NO', 'FLNO', 'FL NO',
'HOUSE. NO', 'HOUSE NO', 'HNO', 'Η NO', 'H.NO', 'H. NO', 'HOUSE NUMBER',
'PLOT NUMBER', 'PLOT.NO', 'PLOT. NO', 'PLOT-NO, PLOT NO', 'PLOT', 'P NO', 'P.NO', PNO,
'DOOR NO', 'DOOR-NO', 'DOOR.NO', 'DOORNO',
'DUPLEX NO', 'DUPLEX-NO', 'DUPLEX.NO', 'DUPLEXNO',
'ROOM NO','ROOM.NO', 'ROOM. NUMBER', 'ROOM NUMBER', 'QTR NO', 'NO.']
for keyword in List:
if keyword in address:
start_index= address.index(keyword)
end_index=start_index len (keyword) - 1
if "," in address [end_index+1:end_index+6]:
comma_index=address.index(",")
clean_address =address[:end_index+1]+re.sub(r'\d', address[end_index+1:comma_index])+address[comma_index:]
clean_address=clean_address.strip()
logic=1.1
else:
clean_address address[:end_index+1]+re.sub(r'\d',' ', address [end_index+1: end_index+6])+address(end_index+6:]
clean_address=clean_address.strip()
logic=1.2
else:
clean_address=address
logic=2.0
return clean_address,logic
num_removal=udf(PII_removal, returnType=StructType([ StructField("new_string", StringType(), True), StructField("new_double", DoubleType(), True)]))
df=df.withColumn('processed_daata',num_removal(df['address'])
с выше значение
udf помечает его логикой 2.0
Выше UDF не может найти НОМЕР ДОМА по адресу
любая модификация, необходимая в UDF для поиска лучшего соответствия подстроки< /п>
Подробнее здесь: https://stackoverflow.com/questions/786 ... ng-address