#!/usr/bin/env python # -*- coding: utf-8 -*- import random import pymorphy2 from trademark.models import Trademark, Product, Nice from django.http import HttpResponse import json from django.views.decorators.cache import never_cache def _get_random_list(qs): _list = list(qs) random.shuffle(_list) return _list def _get_dic_words(words): words_dict = {} for key in words: key = key.lower() if key in words_dict: value = words_dict[key] words_dict[key] = value + 1 else: words_dict[key] = 1 return words_dict def get_notation(list_words, normalize=False, t=0): if t: print 't', list_words if len(list_words) > 1: notation = list_words[random.randint(0, len(list_words) - 1)] else: notation = list_words[0] if normalize: # print 'normalize 44', notation, notation[0], notation[1] morph = pymorphy2.MorphAnalyzer().parse(notation[0])[0] try: result = morph.inflect({'sing', 'nomn'}).word, notation[1] except: result = get_notation(list_words, normalize=True, t=1) else: # print notation result = notation[0], notation[1] result = result[0].capitalize(), result[1] return result def get_lists_for_notation(trademark): _words = [] _generic_words = [] morph = pymorphy2.MorphAnalyzer() try: products = trademark.products.all() for product in products: if product: nice_id = product.nice_id product_phrase = product.title.split(',') for phrase in product_phrase: words = phrase.\ lower().\ replace(';', '').\ replace('.', '').\ replace('[', '').\ replace(']', ''). \ replace('(', ''). \ replace(')', ''). \ replace('\n', '') if len(words.split()) == 1: _words.append((words.replace(' ', ''), nice_id)) fraction_phrase = words.lower().split(' ') for word in fraction_phrase: p = morph.parse(word)[0] if len(word) >= 3 and p.tag.POS == 'NOUN': _generic_words.append((p.normal_form, nice_id)) except Product.DoesNotExist: return False, False return _words, _generic_words @never_cache def get_random_list_trademarks(request, status='Expired', count=10): ico = '' notation = '' trademark_list = [] expired_trademarks = Trademark.objects.filter(status=status).order_by('?')[:50] random_list = _get_random_list(expired_trademarks)[:count*2] for trademark in random_list: words, generic_words = get_lists_for_notation(trademark) if len(trademark.title.split(' ')) > 3: continue if words: notation = get_notation(words) # print 'words', notation, notation[1] if not words and generic_words: # print generic_words notation = get_notation(generic_words, normalize=True) # print 'generic_words', notation, notation[0], notation[1] if notation: try: pass # print notation[1] # print notation glyph = Nice.objects.get(nice_id=notation[1]).glyph or 'fa-snowflake-o' except Nice.DoesNotExist: glyph = 'fa-snowflake-o' else: continue # brand = u'{}'.format(trademark) trademark_list.append({ 'product': notation[0], 'name': trademark.title.title(), 'trademark': trademark.id, 'glyph': glyph }) response = { 'count': len(trademark_list), 'status': 'ok', 'items': trademark_list[:count] } return HttpResponse(json.dumps(response), content_type="application/json")