def exact_search(word, docs, flag, expand, page, per_page): db = Database() word = word.split()[0] req1 = 'SELECT COUNT(DISTINCT doc_id) FROM `annotator_token` WHERE token="' + word + '" ' if flag: req1 += 'AND doc_id IN (' + ','.join(docs) + ');' docs_len = int(db.execute(req1)[0][0]) n_req = 'SELECT COUNT(DISTINCT sent_id) FROM `annotator_token` WHERE token="' + word + '" ' if flag: n_req += 'AND doc_id IN (' + ','.join(docs) + ');' sent_num = int(db.execute(n_req)[0][0]) req2 = 'SELECT DISTINCT sent_id FROM `annotator_token` WHERE token="' + word + '" ' if flag: req2 += 'AND doc_id IN (' + ','.join(docs) + ')' req2 += ' LIMIT %d,%d;' % ((page - 1) * per_page, per_page) sentences = '(' + ', '.join([str(i[0]) for i in db.execute(req2)]) + ')' if sentences != '()': req3 = 'SELECT sent_id, num FROM `annotator_token` WHERE token="' + word + '" AND sent_id IN ' + sentences tokens = db.execute(req3) else: tokens = [] # tokens = Token.objects.filter(token__exact=word) e = defaultdict(list) for i, j in tokens: e[i].append(j) jq = [] sent_list = [ShowSentence(i, e[i], expand) for i in e] for sent in sent_list: jq.append(jquery.replace('***', str(sent.id))) return jq, sent_list, word, docs_len, sent_num
def get_subcorpus(query): req = 'SELECT id FROM `annotator_document` WHERE 1 ' if u'checked' in query: req += 'AND checked=True ' if u'annotated' in query: req += 'AND annotated=True ' gender = query.get(u'gender').encode('utf-8') if gender != u'any': req += 'AND gender="' + gender + '" ' date1 = query.get(u'date1') if date1 != u'': req += 'AND date1>=' + date1 + ' ' date2 = query.get(u'date2') if date2 != u'': req += 'AND date2<=' + date2 + ' ' genre = query.getlist(u'genre[]') if genre != []: req += make_small_query(genre, 'genre') major = query.getlist(u'major[]') if major != []: req += make_small_query(major, 'major') course = query.getlist(u'course[]') if course != []: req += make_small_query(course, 'course') db = Database() docs = [str(i[0]) for i in db.execute(req)] subsum = db.execute( 'SELECT SUM(sentences), SUM(words) FROM `annotator_document` WHERE id IN (' + req + ')') flag = False if req == 'SELECT id FROM `annotator_document` WHERE 1 ' else True return docs, subsum[0][0], subsum[0][1], flag
def get_annotations(sentid): u""" Получает из базы данных все исправления к предложению с заданным id. :param id: номер предложения в базе данных :return: массив аннотаций к предложению Каждая аннотация добавляется в виде такого кортежа: (начало исправления INTEGER, конец исправления INTEGER, текст исправления, приписанные тэги в строку через запятую). Если исправления нет (а только приписан тэг\комментарий), то аннотация в массив не добавляется. Если в списке тэгов аннотации есть тэг "Del", обозначающий лишнее слово, то аннотация в массив добавляется (т.е. пустая строка исправления в этом случае сама по себе является исправлением). """ db = Database() req = 'SELECT `tag`, `data` FROM annotator_annotation WHERE document_id=%d' % sentid arr = [] rows = db.execute(req) for row in rows: d = json.loads(row[1]) try: corr = d['corrs'] except: corr = '' quote = d['quote'] comment = d['text'] owner = d['owner'][0] arr.append({ 'owner': owner, 'tag': row[0], 'corr': corr, 'quote': quote, 'comment': comment }) return arr
def get_correction(request, doc_id): """ Получает из базы данных исправленные варианты предложения с заданным id. :param request: информация о запросе :param doc_id: номер предложения в базе данных :return: HTTPResponse - json с двумя строками, который затем передается в javascript """ db = Database() req = 'SELECT correct, correct2 FROM annotator_sentence WHERE id=%s' % doc_id s = list(db.execute(req)[0]) return HttpResponse(json.dumps(s), content_type="application/json")
def get_correction(request, doc_id): """ Получает из базы данных исправленные варианты предложения с заданным id. :param request: информация о запросе :param doc_id: номер предложения в базе данных :return: HTTPResponse - json с двумя строками, который затем передается в javascript """ db = Database() req = 'SELECT correct, correct2 FROM annotator_sentence WHERE id=%s' %doc_id s = list(db.execute(req)[0]) return HttpResponse(json.dumps(s), content_type="application/json")
def list_tags(self): arr = [] req = 'SELECT DISTINCT tag FROM `annotator_annotation`' db = Database() tags_db = db.execute(req) for tag in list(tags_db): tag = list(tag) if ', ' in tag[0]: split_tags = tag[0].split(', ') for el in split_tags: if el.lower() not in arr: arr.append(el.lower()) else: if tag[0].lower() in arr: arr.append(tag[0].lower()) return sorted(set(arr))
def list_tags(self): arr = [] req = 'SELECT DISTINCT tag FROM `annotator_annotation`' db = Database() tags_db = db.execute(req) for tag in list(tags_db): tag = list(tag) if ',' in tag[0]: split_tags = tag[0].split(',') for el in split_tags: el = re.sub('\s+', '', el) if el.lower() not in arr: arr.append(el.lower()) else: tag[0] = re.sub('\s+', '', tag[0]) if tag[0].lower() not in arr: arr.append(tag[0].lower()) arr = sorted(arr) return arr
def get_sent_annotations(self, id): u""" Получает из базы данных все исправления к предложению с заданным id. :param id: номер предложения в базе данных :return: массив аннотаций к предложению Каждая аннотация добавляется в виде такого кортежа: (начало исправления INTEGER, конец исправления INTEGER, текст исправления, приписанные тэги в строку через запятую). Если исправления нет (а только приписан тэг\комментарий), то аннотация в массив не добавляется. Если в списке тэгов аннотации есть тэг "Del", обозначающий лишнее слово, то аннотация в массив добавляется (т.е. пустая строка исправления в этом случае сама по себе является исправлением). """ db = Database() req = 'SELECT `tag`, `start`, `end`, `data` FROM annotator_annotation WHERE document_id=%d' %id arr = [] rows = db.execute(req) for row in rows: d = json.loads(row[3]) corr = d['corrs'] if corr != '' or 'Insert' in row[0]: arr.append((int(row[1]), int(row[2]), corr, row[0])) return arr
def get_sent_annotations(self, id): u""" Получает из базы данных все исправления к предложению с заданным id. :param id: номер предложения в базе данных :return: массив аннотаций к предложению Каждая аннотация добавляется в виде такого кортежа: (начало исправления INTEGER, конец исправления INTEGER, текст исправления, приписанные тэги в строку через запятую). Если исправления нет (а только приписан тэг\комментарий), то аннотация в массив не добавляется. Если в списке тэгов аннотации есть тэг "Del", обозначающий лишнее слово, то аннотация в массив добавляется (т.е. пустая строка исправления в этом случае сама по себе является исправлением). """ db = Database() req = 'SELECT `tag`, `start`, `end`, `data` FROM annotator_annotation WHERE document_id=%d' % id arr = [] rows = db.execute(req) for row in rows: d = json.loads(row[3]) corr = d['corrs'] if corr != '' or 'Insert' in row[0]: arr.append((int(row[1]), int(row[2]), corr, row[0])) return arr
def collect_full_data(arr): db = Database() word, lex, gram, err, docs, flag, page, per_page = arr err = err.strip() s = bincode(word, lex, gram, err) if s == '0000': return [], 0, 0 elif s == '0001': req_template = ''' FROM annotator_annotation LEFT JOIN annotator_sentence ON annotator_annotation.document_id = annotator_sentence.id WHERE 1 ''' req_template += parse_gram(err, 'tag') if flag: req_template += 'AND doc_id_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT document_id)''' + req_template req1 = 'SELECT DISTINCT document_id' + req_template req = 'SELECT DISTINCT document_id, start, end' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id_id)''' + req_template elif s == '0010': req_template = ''' FROM annotator_morphology LEFT JOIN annotator_token ON annotator_token.id = annotator_morphology.token_id WHERE 1 ''' + parse_gram(gram, 'gram') if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template elif s == '0011': req_template = ''' FROM annotator_token LEFT JOIN annotator_morphology ON annotator_token.id = annotator_morphology.token_id LEFT JOIN annotator_annotation ON annotator_token.sent_id = annotator_annotation.document_id WHERE 1 %s AND num>= annotator_annotation.start AND num <= annotator_annotation.end %s''' % ( parse_gram(err, 'tag'), parse_gram(gram, 'gram')) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template elif s == '0100': req_template = ''' FROM annotator_morphology LEFT JOIN annotator_token ON annotator_token.id = annotator_morphology.token_id WHERE 1 ''' req_template += parse_lex(lex) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template elif s == '0101': req_template = ''' FROM annotator_token LEFT JOIN annotator_morphology ON annotator_token.id = annotator_morphology.token_id LEFT JOIN annotator_annotation ON annotator_token.sent_id = annotator_annotation.document_id WHERE 1 %s AND num>= annotator_annotation.start AND num <= annotator_annotation.end %s''' % ( parse_gram(err, 'tag'), parse_lex(lex)) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template elif s == '0110': req_template = ''' FROM annotator_morphology LEFT JOIN annotator_token ON annotator_token.id = annotator_morphology.token_id WHERE 1 %s %s''' % (parse_lex(lex), parse_gram(gram, 'gram')) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template elif s == '0111': req_template = ''' FROM annotator_token LEFT JOIN annotator_morphology ON annotator_token.id = annotator_morphology.token_id LEFT JOIN annotator_annotation ON annotator_token.sent_id = annotator_annotation.document_id WHERE 1 %s AND num>= annotator_annotation.start AND num <= annotator_annotation.end %s %s''' % ( parse_gram(err, 'tag'), parse_lex(lex), parse_gram(gram, 'gram')) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template elif s == '1000': req = '''SELECT DISTINCT sent_id, num FROM annotator_morphology LEFT JOIN annotator_token ON annotator_token.id = annotator_morphology.token_id WHERE 1 AND lem="%s" ''' % word if flag: req += 'AND doc_id IN (' + ','.join(docs) + ')' elif s == '1001': req_template = ''' FROM annotator_token LEFT JOIN annotator_morphology ON annotator_token.id = annotator_morphology.token_id LEFT JOIN annotator_annotation ON annotator_token.sent_id = annotator_annotation.document_id WHERE 1 AND lem="%s" AND num>= annotator_annotation.start AND num <= annotator_annotation.end %s ''' % ( word, parse_gram(err, 'tag')) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template elif s == '1010': req_template = ''' FROM annotator_morphology LEFT JOIN annotator_token ON annotator_token.id = annotator_morphology.token_id WHERE 1 AND lem="%s" %s''' % (word, parse_gram(gram, 'gram')) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template elif s == '1011': req_template = ''' FROM annotator_token LEFT JOIN annotator_morphology ON annotator_token.id = annotator_morphology.token_id LEFT JOIN annotator_annotation ON annotator_token.sent_id = annotator_annotation.document_id WHERE 1 AND lem="%s" AND num>= annotator_annotation.start AND num <= annotator_annotation.end %s %s''' % ( word, parse_gram(err, 'tag'), parse_gram(gram, 'gram')) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template elif s == '1100': req_template = ''' FROM annotator_morphology LEFT JOIN annotator_token ON annotator_token.id = annotator_morphology.token_id WHERE 1 AND lem="%s" %s''' % (word, parse_lex(lex)) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template elif s == '1101': req_template = ''' FROM annotator_token LEFT JOIN annotator_morphology ON annotator_token.id = annotator_morphology.token_id LEFT JOIN annotator_annotation ON annotator_token.sent_id = annotator_annotation.document_id WHERE 1 AND lem="%s" AND num>= annotator_annotation.start AND num <= annotator_annotation.end %s %s''' % ( word, parse_gram(err, 'tag'), parse_lex(lex)) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template elif s == '1110': req_template = ''' FROM annotator_token LEFT JOIN annotator_morphology ON annotator_token.id = annotator_morphology.token_id WHERE 1 AND lem="%s" %s %s ''' % (word, parse_lex(lex), parse_gram(gram, 'gram')) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template else: req_template = ''' FROM annotator_token LEFT JOIN annotator_morphology ON annotator_token.id = annotator_morphology.token_id LEFT JOIN annotator_annotation ON annotator_token.sent_id = annotator_annotation.document_id WHERE 1 AND lem="%s" AND num>= annotator_annotation.start AND num <= annotator_annotation.end %s %s %s''' % ( word, parse_gram(err, 'tag'), parse_lex(lex), parse_gram(gram, 'gram')) if flag: req_template += 'AND doc_id IN (' + ','.join(docs) + ')' n_req = '''SELECT COUNT(DISTINCT sent_id)''' + req_template req = 'SELECT DISTINCT sent_id, num' + req_template req1 = 'SELECT DISTINCT sent_id' + req_template d_req = '''SELECT COUNT(DISTINCT doc_id)''' + req_template rows = db.execute(req) # sent_num = int(db.execute(n_req)[0][0]) # d_num = int(db.execute(d_req)[0][0]) return rows, 0, 0