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.
119 lines
3.2 KiB
119 lines
3.2 KiB
#!/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") |