Парсинг физических адресов
Как записать распарсенный адрес в одну строку, то есть 123456, г Москва, улица Марьинский парк ,д.21,кор.2
from natasha import (
Segmenter,
MorphVocab,
NewsEmbedding,
NewsMorphTagger,
NewsSyntaxParser,
NewsNERTagger,
PER,
NamesExtractor,
DatesExtractor,
MoneyExtractor,
AddrExtractor,
Doc
)
#from natasha.markup import show_markup, show_json
segmenter = Segmenter()
morph_vocab = MorphVocab()
emb = NewsEmbedding()
morph_tagger = NewsMorphTagger(emb)
syntax_parser = NewsSyntaxParser(emb)
ner_tagger = NewsNERTagger(emb)
names_extractor = NamesExtractor(morph_vocab)
dates_extractor = DatesExtractor(morph_vocab)
money_extractor = MoneyExtractor(morph_vocab)
addr_extractor = AddrExtractor(morph_vocab)
for line in df['Адрес объекта'].head(1):
display(addr_extractor.find(line))
Результат кода выше отражен на скриншоте, теперь мне надо записать распарсенный адрес в одну строку, то есть 123456, г Москва, улица Марьинский парк ,д.21,кор.2
Пробывала так:
listik = []
str_listik = []
for line in df['Адрес объекта'].head(100):
#display(addr_extractor.find(line).fact.parts)
#print(addr_extractor.find(line).fact.parts)
# for match in parser.findall(addr_extractor.find(line).fact.parts):
# print([_.value for _ in match.tokens])
for index, paramValue in enumerate(addr_extractor.find(line).fact.parts):
p=paramValue
i = index
if p.type=='индекс':
listik.append( p.value)
if p.type=='город':
listik.append( p.value)
if p.type=='улица':
listik.append( p.value)
if p.type=='дом':
listik.append( p.value + ',')
if p.type=='корпус':
listik.append(p.type + p.value + ',')
str_listik.append(' '.join(map(str,listik)))
print(str_listik)
В итоге получается одна строка с набором адресов, помогите получить разные строки.( отдельно по каждому адресу)
Ответы (1 шт):
Инициализацию/очистку listik = [] перенесите внутрь первого цикла (иначе в него будут собираться части всех адресов), а для строки str_listik.append(' '.join(map(str,listik))) добавьте отступ, чтобы она была внутри цикла (иначе в список str_listik попадает только последнее состояние списка listik).
str_listik = []
for line in df['Адрес объекта'].head(100):
listik = []
for index, paramValue in enumerate(addr_extractor.find(line).fact.parts):
p=paramValue
i = index
if p.type=='индекс':
listik.append( p.value)
if p.type=='город':
listik.append( p.value)
if p.type=='улица':
listik.append( p.value)
if p.type=='дом':
listik.append( p.value + ',')
if p.type=='корпус':
listik.append(p.type + p.value + ',')
str_listik.append(' '.join(map(str,listik)))
print(str_listik)
