Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 27, 2014 12:29:13

Xendler
Зарегистрирован: 2014-04-27
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание таблицы из текстовых файлов

Доброго времени суток, форумчане. Имеются текстовые файлы с объявлениями о продаже квартир. Данные в файлах не структурированные. Необходимо извлечь данные из текстовиков и рассортировать их в таблицу csv по полям:
Руслан
1. ID объявления
2. N выпуска презента -> дата выпуска
3. Адрес: 2 столб-> район
4. Кол-во комнат - число
5. Квадратура - число
6. Телефон 1
7. Телефон 2
8. Цена - в миллионах
9. п/стр: 1,0,NULL
10. дерев 1,0, нулл
11. панель 1,0, нулл
12. кирпич 1,0, нулл
13. монолит 1,0, нулл
14. сталинки 1,0, нулл
15. бараки 1,0, нулл
16. этаж - число
17. монолит-кирп 1,0, нулл
18. с/у разд 1,0, нулл
19. обмен - 1 0 нулл
20. хрущ 1,0, нулл
Нужно номера домов (если есть) в отдельный столбец. Местоположение (если есть) тоже убрать в отдельный столбец

Всё необходимое добавил прикрепленным файлом.

Прикреплённый файлы:
attachment Необходимые данные и наработки.rar (46,4 KБ)

Офлайн

#2 Апрель 27, 2014 13:06:24

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Создание таблицы из текстовых файлов

Ну. И что Вы хотите от нас?
Где Ваш код?

Офлайн

#3 Апрель 27, 2014 14:23:29

Xendler
Зарегистрирован: 2014-04-27
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание таблицы из текстовых файлов

4kpt_II
Ну. И что Вы хотите от нас?Где Ваш код?
код в архиве, папка “наработка”, но могу для простоты дела выложить и сюда.
streets=[
"2-я Артемовская",
"3-й Путевой",
"50-летия Октября",
"60-летия Октября",
"Абрикосовый",
"Авиационная",
"Авроры",
"Автобусная",
"Автобусный",
"Автономная",
"Автономный",
"Адмиральская",
"Адмиральский",
"Айвазовского",
"Аксенова",
"Албанский",
"Алеутская",
"Алеутский",
"Алтайская",
"Амурская",
"Амурский",
"Ангарская",
"Антенная",
"Армавирская",
"Арсеньева",
"Артемовская",
"Архангельская",
"Аэродромная",
"Байкальская",
"Байкальский",
"Балашовская",
"Балтийская",
"Барабинская",
"Бассейный",
"Батарейный",
"Батуевская Ветка",
"Батумская",
"Белинского",
"Беломорская",
"Белорусская",
"Бийская",
"Бикинская",
"Благодатный",
"Блюхера",
"Богачева",
"Богородская",
"Бойко-Павлова",
"Б.-Павлова",
"Больничная",
"Большая",
"Большой Аэродром",
"Бондаря",
"Братский",
"Брестская",
"Бробиджанская",
"Бурейская",
"Ватутина",
"Вахова",
"Верхнеудинская",
"Весенняя",
"Владивостокская",
"Владивостокское",
"Войкова",
"Вологодская",
"Волочаевская",
"Волочаевский городок",
"Волховская",
"Воровского",
"Воронежская",
"Воронежское",
"Ворошилова",
"Восточное",
"Восточный Семафор",
"Вострецова",
"Выборгская",
"Вяземская",
"Гагарина",
"Гайдара",
"Гамарника",
"Гаражный",
"Гвардейская",
"Геодезическая",
"Георгиевская",
"Герасимова",
"Герцена",
"Глинная",
"Гоголя",
"Горького",
"Госпитальный",
"Гражданский",
"Даниловского",
"Данчука",
"Даурская",
"Двойная",
"Дежнева",
"Демократический",
"Демьяна Бедного",
"Д. Бедного",
"Джамбула",
"Дзержинского",
"Дзержинского",
"Дикопольцева",
"Доватора",
"Донская",
"Донской",
"Дончука",
"Доступный",
"Дьяченко",
"Железнякова",
"Жданова",
"Жуковского",
"Забайкальская",
"Забайкальский",
"Запарина",
"Заречная",
"Засыпной",
"Зеленая",
"Зеленоборский",
"Знаменщикова",
"Зои Космодемьянской",
"Ивановский",
"Известковая",
"Изумрудная",
"Ильича",
"Индустриальная",
"Индустриальный",
"Инский",
"Иркутская",
"Иртышская",
"Иртышский",
"Истомина",
"Кабельная",
"Кавалерийский",
"Кавказская",
"Кадровый",
"Казанская",
"Казарменный",
"Казачья Гора",
"Калараша",
"Калинина",
"Калининская",
"Камышовый",
"Карельский",
"Карла Маркса",
"К. Маркса",
"Картографический",
"Каширская",
"Каширский",
"Ким Ю Чена",
"Кирова",
"Кирпичная",
"Кирпичный",
"Клубная",
"Клубный",
"Комсомольская",
"Кооперативная",
"Корабельная",
"Королева",
"Космическая",
"Костромская",
"Костромской",
"Кочнева",
"Красина",
"Красноармейская",
"Краснодарская",
"Краснодарский",
"Краснознаменная",
"Краснореченская",
"Краснореченский",
"Краснофлотская",
"Красный Яр",
"Криворожская",
"Крымская",
"Кубанская",
"Кубяка",
"Куйбышева",
"Кустарный",
"Кутузова",
"Ладожская",
"Ладожский",
"Лазо",
"Лейтенанта Шмидта",
"Ленина",
"Ленинградская",
"Ленинградский",
"Ленская",
"Лермонтова",
"Листопадная",
"Литовский",
"Локомотивная",
"Локомотивный",
"Ломоносова",
"Луговая",
"Льва Толстого",
"Л. Толстого",
"Магаданская",
"Магистральный",
"Майская",
"Малиновского",
"Мариинская",
"Марсовая",
"Матвеевское",
"Мате Залки",
"М. Залки",
"Матросский", 
"Машинистов",
"Маяковского",
"Мельничная",
"Менделеева",
"Металлистов",
"квартал Мира",
"Мирная",
"Молдавский",
"Молодежная",
"Монтажная",
"Монтажный",
"Морская",
"Московская",
"Мостовая",
"Муравьева-Амурского",
"Мухина",
"Набережная",
"Нагишкина",
"Нагорная",
"Надеждинская",
"Народная",
"Невская",
"Некрасова",
"Нефтяная",
"Нефтяной",
"Новая",
"Нововыборгская",
"Облачный",
"Оборонная",
"Оборская",
"Океанская",
"Окружная",
"Октябрьская",
"Олега Кошевого",
"О. Кошевого",
"Орджоникидзе",
"Осенняя",
"Островского",
"Павла Морозова",
"П. Морозова",
"Павленко",
"Павловича",
"Панфиловцев",
"Панькова",
"Парка Мира",
"Партизанская",
"Первомайская",
"Первостроителей",
"Перекопская",
"Пермская",
"Перспективная",
"Петра Комарова",
"Печерская",
"Пилотов",
"Пионерская",
"Планерная",
"Победы",
"Пограничный",
"Покуса",
"Полины Осипенко",
"Полоцкий",
"Полярная",
"Попова",
"Портовая",
"Постышева",
"Почтовая",
"Приамурская",
"Пригородная",
"Приисковая",
"Приморская",
"Прогрессивная",
"Производственная",
"Производственный",
"Пролетарская",
"Промывочная",
"Промышленная",
"Промышленный",
"Проточная",
"Профессора Даниловского",
"Пугачева",
"Путевая",
"Пушкина",
"Рабочая",
"Рабочий Городок",
"Радищева",
"Рекордная",
"Ремесленная",
"Ремесленный",
"Репина",
"Республиканская",
"Рокоссовского",
"Руднева",
"Садовая",
"Салтыкова-Щедрина",
"Санаторная",
"Санитарная",
"Санитарный",
"Саратовская",
"Саратовский",
"Свердлова",
"Светлая",
"Световая",
"Свирская",
"Свободный",
"Связная",
"Севастопольский",
"Сергеевская",
"Серышева",
"Сибирская",
"Сигнальная",
"Сидоренко",
"Синельникова",
"Слободская",
"Служебная",
"Соборная",
"Советская",
"Совхозная",
"Сормовский",
"Союзная",
"Спортивный",
"Станционная",
"Станционный",
"Степной",
"Степная",
"Стрелочный",
"Стрельникова",
"Строительная",
"Студенческий",
"Суворова",
"Сунгарийская",
"Сысоева",
"Ташкентская",
"Тимирязева",
"Тихоокеанская",
"Топографический",
"Тополево",
"Трамвайная",
"Трамвайный",
"Трехгорная",
"Трубный",
"Трудовая",
"Трудовой",
"Тургенева",
"Турнирный",
"Тюменский",
"Уборевича",
"Узловая",
"Украинский",
"Ульчский",
"Ульяновская",
"Уральская",
"Ургальская",
"Урицкого",
"Уссурийская",
"Уссурийский",
"Ухтомского",
"Фабричный",
"Федеративная",
"Федоровское",
"Флегонтова",
"Фоломеева",
"Фрунзе",
"Фурманова",
"Хабаровская",
"Хабаровский",
"Халтурина",
"Ханкайская",
"Холмогорская",
"Хорышева",
"Хрустальный",
"Целинная",
"Центральная",
"Черепичный",
"Чернореченская",
"Чернореченское",
"Черняховского",
"Чехова",
"Чкалова",
"Шабадина",
"Шатова",
"Шатурский",
"Шевченко",
"Шевчука",
"Шелеста",
"Шеронова",
"Шефская",
"Шимановская",
"Шимановского",
"Школьная",
"Шкотова",
"Шмаковская",
"Шмаковский",
"Шмидта",
"Энергетик",
"Энтузиастов",
"Юбилейная",
"Юнгов",
"Юности",
"Яровая",
"Ярославская",
"Ясная",
"Ясный",
"Яшина",
"ДОС"]
regions=[
"Центр",
"Южный",
"Северный",
"Приамурский",
"Краснореченское",
"Хор",
"Ракитное",
"Сергеевка",
"Пригород",
"Солнечный",
"Осиновая Речка",
"Некрасовка",
"Корфовский",
"Восточное",
"Бычиха",
"Заозерное",
"Благодатное",
"Галкино",
"Хабаровск-2",
"Мирное",
"Ильинка",
"Переяславка",
"Красная Речка",
"Березовка",
"Калинка"
]
import re
import os, zipfile
def getPhone(str):
    res = re.findall("(\d{1}-\d+-\d+-\d+-\d+)|(\d+-\d+-\d+)|(\d+-\d+)", str)
    for x in res[0]:
        if(x!=''):
            return x
def getRooms(str):
    res = re.findall("\d-комн", str)
    if len(res)>0:
        return res[0]
    else:
        return ""
def getSize(str):
    res = re.findall("\d+ кв. м.", str)
    if(len(res) == 0):
        return ""
    else :
        return re.findall("\d+", res[0])[0]
def getType(str):
    res = re.findall("(кирп\\.)|(стал\\.)|(пан\\.)|(хрущ\\.)", str)
    if(len(res)!=0):
        for x in res[0]:
            if( x != ''):
                return x
    return ""
	
def getPrice(str):
    res = re.findall("([0-9]* тыс\\.)|(\d{3,10}\\.)", str)
    if(len(res) != 0):
        if(res[0][0] != ''): 
            res = res[0][0]
            count = re.findall("(\d+)", res)[0]
            
            count+="000"
            return count
        else: 
            res = res[0][1]
            count = re.findall("(\d+)", res)[0]
            return count
        
    else:
        return "" 
pathToArchive = './3_2009.zip'
zipArchive = zipfile.ZipFile(pathToArchive, 'r')
infile=zipArchive.open('data/'+'nedv10.txt', 'r')
text=infile.readlines()
i=0;
for string in text:
    outfile = open("out"+".csv", "a")
    i+=1
    st=""
    reg=st
    for x in streets:
        if string.find(x)>-1:
            st=x
            break
    for x in regions:
        if string.find(x)>-1:
            reg=x
            break
    outfile.write(str(i)+"\t"+st+"\t"+reg+"\t"+getRooms(string)+"\t"+getType(string)+"\t"+getSize(string)+"\t\n")
    outfile.close()
print(i)
    

Офлайн

#4 Апрель 27, 2014 23:52:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

Создание таблицы из текстовых файлов

Xendler
Данные в файлах не структурированные. Необходимо извлечь данные из текстовиков

составь грамматику
распознай последовательность лексем
отобрази последовательность лексем на набор данных

перед этим можно привести строки к удобному виду (удалить “шум”)

это пример строк, достаточных для отладки
Гамарника (Шуранова, 5). 3-комн. (13/17, 95/50/16, дом сдан, п/строит.). 8,8 млн. 61-88-05.
Гамарника - Шуранова . 3-комн. (13/17, нов. план., 88/50/13, комн. разд., 2 л/з, после строит., вид на Амур). 7 млн. 890 тыс. 28-31-77.
Гамарника - Шуранова. 3-комн. (дом сдан в 2013 г., монолит, 10/18, 93 кв. м, п/строит., док. готовы). 8 млн. 200-911, 42-10-10.

Тополево, Пионерская. 3-комн. (инд., 2/5, балк., с/у совм., 64/35/9, пластик, частично ремонт). 3,9 млн. 8-924-212-05-01.
Тополево. 3-комн. (2/4, удовл. сост., балк., 65 кв. м). 3 млн. 8-924-214-56-84.
39 магазин. 3-комн. (нов. план., 8/9, кирп., хор. сост., л/з 6 м, 60 кв. м, кухня 8,5 кв. м, все разд., пласт., более 3 лет в собств.). 3,6 млн. 69-16-19.

Xendler
код в архиве, папка “наработка”
в этой наработке слишком велика вероятность ошибки при распознавании
улицы берутся из списка, он всегда будет неполный
районы берутся из списка, он всегда будет неполный
надо их находить прямо в строке, какие бы они ни были

это набросок грамматики
<запись> ::= <адрес> <планировка> <подробности> <цена> <контакт>
<адрес> ::= <улица> | <улица> <район>
<планировка> ::= <число>-комн
<подробности> ::= (<список через запятую>)
<цена> ::= <число> млн | <число>,<число> млн
<контакт> ::= <телефон> | <телефон> <телефон>
<> ::= <>



Отредактировано py.user.next (Апрель 28, 2014 00:11:18)

Офлайн

#5 Апрель 29, 2014 00:37:20

Xendler
Зарегистрирован: 2014-04-27
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание таблицы из текстовых файлов

py.user.next
извиняюсь, но питон только начал изучать. большей части написанного не понимаю. Не могли бы описать подробнее?

Офлайн

#6 Апрель 29, 2014 03:16:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

Создание таблицы из текстовых файлов

Xendler
Не могли бы описать подробнее?
составь алгоритм решения задачи, без питона

нужно составить грамматику, порождающую язык объявлений
wiki. форма Бэкуса-Наура

Xendler
большей части написанного не понимаю
потому что оно к питону не относится, это из теории программирования



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version