Example #1
0
def generate_chart():
    input_values = RequestValues(request.values, app.config)
    print(input_values)

    title = {"text": 'Kollokationsanalyse für:  ' + str(input_values['keywords'])}
    y_axis = {}
    series = []

    if len(input_values['keywords']) == 1:
        labels, data, database_result = create_single_analysis(input_values, app.config)
        y_axis['type'] = "logarithmic"
    elif len(input_values['keywords']) == 2:
        labels, data, database_result = create_contrastive_analysis(input_values, app.config)
    else:
        print('error unknown len of keywords')

    for keyword, d in zip(input_values['keywords'], data):
        series.append({"name": keyword, "data": d})

    measure = list(map(lambda k: k['y'], chain(*data)))

    y_axis['min'] = minimum(measure)
    y_axis['max'] = maximum(measure)

    if all(not d for d in database_result):
        return jsonify(series=[], title={"text": 'Keine Daten'}, xAxis={}, yAxis={}, labels=[], context_list=[],
                       info={}, exclude=[])

    return jsonify(series=series, title=title, yAxis=y_axis, labels=labels,
                   info={key: value for (key, value) in zip(input_values['keywords'], database_result)},
                   exclude=True if input_values['exclude_list'] else False)
Example #2
0
def create_contrastive_analysis(input_values, config):
    keywords = list(map(lambda value: clean_keyword(value), input_values['keywords']))
    used_measure = input_values['measure']

    overlap_limit = int(input_values['overlap_limit'] / 100 * input_values['limit'])

    overlap_query = create_overlap_query(keywords[0], keywords[1], input_values)
    overlap = execute_contrastive_analysis_query(overlap_query, config, used_measure)

    global_limit = (input_values['limit'] - min(overlap_limit, len(overlap))) // 2

    results = []
    for k in keywords:
        single_query = create_single_query(k, input_values, global_limit, list(overlap.keys()))
        term = execute_single_analysis_query(single_query, config, used_measure)
        results.append(term)

    overlap = remove_overlap_excess(overlap, overlap_limit)
    labels = list(results[0].keys()) + list(overlap.keys()) + list(results[1].keys())[::-1]

    results = append_overlap(results, overlap)

    measure = list(map(lambda k: k[1]['measure'], chain(results[0].values(), results[1].values())))
    max_value = maximum(measure)
    min_value = minimum(measure)

    data = transform_to_logistic_curve(results, labels, min_value, max_value)

    measure = list(map(lambda k: k['y'], chain(data[0], data[1])))
    max_value_new = maximum(measure)
    min_value_new = minimum(measure)

    offset = int((max_value - abs(min_value)) * 0.03)
    data = rescale(data, min_value, max_value, min_value_new, max_value_new, offset)

    return labels, data, results