1. Python / Говнокод #16633

    −99

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    def str_to_weight(val, format_str_max, format_str_min=None, separator=u",", long=3):
        """
        %fgr (full gr)  %cgr (cut gr) %kg
        example
        >>> str_to_weight('0.120', u'%kg%fgr kg', u'%kg%fgr kg', ',', 3)
        u'0,120 kg'
        >>> str_to_weight('0.120', u'%kg%fgr kg', u'%fgr gr', ',', 3)
        u'120 gr'
        >>> str_to_weight('0.120', u'%kg%fgr kg', u'%cgr gr', ',', 3)
        u'12 gr'
        """
    
        if isinstance(val, basestring):
            try:
                num = float(val.replace(',', '.'))
            except ValueError:
                return None
        elif isinstance(val, float):
            num = val
        else:
            return None
    
        format_str = format_str_min if num < 1 and format_str_min else format_str_max
    
        kg = u'%.f' % int(num)
        fgr = re.sub(u'^\d+.', u'', (u'%.' + str(long) + u'f') % num)
        if num < 1:
            fgr = re.sub('^0+', '', fgr)
        cgr = re.sub(u'0+$', u'', fgr)
    
        if fgr and '%kg' in format_str:
            fgr = separator + fgr
    
        if cgr and '%kg' in format_str:
            cgr = separator + cgr
    
        return format_str.replace(u'%fgr', fgr).replace(u'%cgr', cgr).replace(u'%kg', kg)
    
    
    def create_ru_weight_patterns(weight):
        res = [
            str_to_weight(weight, u'^%kg%cgr.?кг|%kg%cgr.?л', u'^%fgr.?г|%fgr.?мл', separator=u'[\.|,]'),
            str_to_weight(weight, u'[ |\t|\n]%kg%cgr.?кг|%kg%cgr.?л', u'[ |\t|\n]%fgr.?г|%fgr.?мл', separator=u'[\.|,]'),
            str_to_weight(weight, u'%kg%cgr.?кг|%kg%cgr.?л', u'%fgr.?г|%fgr.?мл', separator=u'[\.|,]'),
            str_to_weight(weight, u'%kg%cgr.?кг|%kg%cgr.?л', separator=u'[\.|,]')
        ]
        return filter(lambda x: x, res)

    Чо айдишники, есть вес, я легко его найду в товаре
    Через месяц...

    Запостил: kyzi007, 02 Сентября 2014

    Комментарии (14) RSS

    • Можно человеку показать NLTK, чтобы ему было чем комнатушку обогревать длинными зимними вечерами.
      Ответить
      • Этот человек я. Но спасибо )
        Уже понятно что пошел рагульный путь и там можно одной регуляркой обойтись.
        Ответить
        • Не нужно регуляркой, ну или не совсем. Легче сначала найти все числа в строке (ну сколько их там будет до десятка небось?), а потом посмотреть что там за слово после числа.
          Ответить
          • Да, я в общем не с того пошла. Достаточно опознать все веса с блоков текста и посмотреть где правильный а не искать сразу точное совпадение.
            Примерно в момент осознания что я что то навертела и запостила это.
            Ответить
            • А что здесь происходит? Какая задача?
              Ответить
              • Есть список товаров на странице, надо взять параметры конкретного. Я решила что удобно будет привязываться к весу. Собственно в коде я преобразую число(вес) которое мне пришло в регулярку бредовым способом.
                Ответить
                • А если на странице несколько товаров с одинаковым весом?
                  Ответить
                  • Меня вот тоже волнует, что килограмм говна и килограмм золота – один товар.
                    Ответить
                  • Такое может быть только если на товар акция и оно отдельно должно ручками пробиваться для каждого сайта.
                    А вообще - это страница одного товара всегда.
                    Ответить
                    • Не совсем в тему, но, думаю, намек будет понятен.
                      http://habrahabr.ru/post/146109/

                      >всегда
                      На каждое "всегда" есть своё "иногда".
                      Ответить
                      • Если это не так то матчер ошибся и это пропалят.
                        Ответить
    • опять пост в стиле - я не против помощи, но если вы настаиваете?
      Ответить
      • Нет. Вроде я тут никогда помощи и не просила, не то место кагбе.
        Ответить
      • Разве что моральной: "не переживай, нам тоже с подобным говном работать приходится".
        Ответить

    Добавить комментарий