You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

147 lines
4.0 KiB

#!/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")