예제 #1
0
    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
예제 #2
0
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
예제 #3
0
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")
예제 #4
0
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")
예제 #5
0
	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))
예제 #6
0
 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
예제 #7
0
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
예제 #8
0
    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
예제 #9
0
    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
예제 #10
0
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