#!/usr/bin/env python # -*- coding: utf-8 -*- import random import pymorphy2 from trademark.models import Trademark, Product from django.http import HttpResponse import json 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): if len(list_words) > 1: notation = list_words[random.randint(0, len(list_words) - 1)] else: notation = list_words[0] if normalize: morph = pymorphy2.MorphAnalyzer().parse(notation)[0] try: result = morph.inflect({'plur', 'nomn'}).word except: result = get_notation(list_words, normalize=True) else: result = notation result = result.capitalize() 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: 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(' ', '')) 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) except Product.DoesNotExist: return False, False return _words, _generic_words def get_random_list_trademarks(request, status='Expired', count=10): notation = '' trademark_list = [] expired_trademarks = Trademark.objects.filter(status=status) random_list = _get_random_list(expired_trademarks)[:count] for trademark in random_list: words, generic_words = get_lists_for_notation(trademark) if words: notation = get_notation(words) if not words and generic_words: notation = get_notation(generic_words, normalize=True) if notation: brand = u'{notation} "{title}"'.format(notation=notation, title=trademark) # print u'%s' % notation + u' "%s"' % trademark else: brand = u'{}'.format(trademark) trademark_list.append({'name': brand, 'ico': 'fa' }) response = {'count': len(trademark_list), 'status': 'ok', 'items': trademark_list} return HttpResponse(json.dumps(response), content_type="application/json")