def concordance_results(request, config): """Fetch concordances results.""" db = DB(config.db_path + '/data/') if request.collocation_type: first_hits = db.query(request["q"], request["method"], request["arg"], **request.metadata) second_hits = db.query(request["left"], request["method"], request["arg"], **request.metadata) hits = CombinedHitlist(first_hits, second_hits) else: hits = db.query(request["q"], request["method"], request["arg"], sort_order=request["sort_order"], **request.metadata) start, end, page_num = page_interval(request['results_per_page'], hits, request.start, request.end) concordance_object = { "description": { "start": start, "end": end, "results_per_page": request.results_per_page }, "query": dict([i for i in request]), "default_object": db.locals['default_object_level'] } formatting_regexes = [] if config.concordance_formatting_regex: for pattern, replacement in config.concordance_formatting_regex: compiled_regex = re.compile(r'%s' % pattern) formatting_regexes.append((compiled_regex, replacement)) results = [] for hit in hits[start - 1:end]: citation_hrefs = citation_links(db, config, hit) metadata_fields = {} for metadata in db.locals['metadata_fields']: metadata_fields[metadata] = hit[metadata] citation = citations(hit, citation_hrefs, config, report="concordance") context = get_concordance_text(db, hit, config.db_path, config.concordance_length) if formatting_regexes: for formatting_regex, replacement in formatting_regexes: context = formatting_regex.sub(r'%s' % replacement, context) result_obj = { "philo_id": hit.philo_id, "citation": citation, "citation_links": citation_hrefs, "context": context, "metadata_fields": metadata_fields, "bytes": hit.bytes } results.append(result_obj) concordance_object["results"] = results concordance_object['results_length'] = len(hits) concordance_object["query_done"] = hits.done return concordance_object
def concordance_results(request, config): """Fetch concordances results.""" db = DB(config.db_path + '/data/') if request.collocation_type: first_hits = db.query(request["q"], request["method"], request["arg"], **request.metadata) second_hits = db.query(request["left"], request["method"], request["arg"], **request.metadata) hits = CombinedHitlist(first_hits, second_hits) else: hits = db.query(request["q"], request["method"], request["arg"], sort_order=request["sort_order"], **request.metadata) start, end, page_num = page_interval(request['results_per_page'], hits, request.start, request.end) concordance_object = { "description": {"start": start, "end": end, "results_per_page": request.results_per_page}, "query": dict([i for i in request]), "default_object": db.locals['default_object_level'] } formatting_regexes = [] if config.concordance_formatting_regex: for pattern, replacement in config.concordance_formatting_regex: compiled_regex = re.compile(r'%s' % pattern) formatting_regexes.append((compiled_regex, replacement)) results = [] for hit in hits[start - 1:end]: citation_hrefs = citation_links(db, config, hit) metadata_fields = {} for metadata in db.locals['metadata_fields']: metadata_fields[metadata] = hit[metadata] citation = citations(hit, citation_hrefs, config, report="concordance") context = get_concordance_text(db, hit, config.db_path, config.concordance_length) if formatting_regexes: for formatting_regex, replacement in formatting_regexes: context = formatting_regex.sub(r'%s' % replacement, context) result_obj = { "philo_id": hit.philo_id, "citation": citation, "citation_links": citation_hrefs, "context": context, "metadata_fields": metadata_fields, "bytes": hit.bytes } results.append(result_obj) concordance_object["results"] = results concordance_object['results_length'] = len(hits) concordance_object["query_done"] = hits.done return concordance_object
def filter_words_by_property(request, config): """Filter words by property""" db = DB(config.db_path + '/data/') hits = db.query(request["q"], request["method"], request["arg"], **request.metadata) concordance_object = {"query": dict([i for i in request])} # Do these need to be captured in wsgi_handler? word_property = request["word_property"] word_property_value = request["word_property_value"] word_property_total = request["word_property_total"] new_hitlist = [] results = [] position = 0 more_pages = False if request.start == 0: start = 1 else: start = request.start for hit in hits: # get my chunk of text hit_val = get_word_attrib(hit, word_property, db) if hit_val == word_property_value: position += 1 if position < start: continue new_hitlist.append(hit) citation_hrefs = citation_links(db, config, hit) metadata_fields = {} for metadata in db.locals['metadata_fields']: metadata_fields[metadata] = hit[metadata] citation = citations(hit, citation_hrefs, config) context = get_concordance_text(db, hit, config.db_path, config.concordance_length) result_obj = { "philo_id": hit.philo_id, "citation": citation, "citation_links": citation_hrefs, "context": context, "metadata_fields": metadata_fields, "bytes": hit.bytes, "collocate_count": 1 } results.append(result_obj) if len(new_hitlist) == (request.results_per_page): more_pages = True break end = start + len(results) - 1 if len(results) < request.results_per_page: word_property_total = end else: word_property_total = end + 1 concordance_object['results'] = results concordance_object["query_done"] = hits.done concordance_object['results_length'] = word_property_total concordance_object["description"] = { "start": start, "end": end, "results_per_page": request.results_per_page, "more_pages": more_pages } return concordance_object
def filter_words_by_property(request, config): """Filter words by property""" db = DB(config.db_path + "/data/") hits = db.query(request["q"], request["method"], request["arg"], **request.metadata) concordance_object = {"query": dict([i for i in request])} # Do these need to be captured in wsgi_handler? word_property = request["word_property"] word_property_value = request["word_property_value"] word_property_total = request["word_property_total"] new_hitlist = [] results = [] position = 0 more_pages = False if request.start == 0: start = 1 else: start = request.start for hit in hits: # get my chunk of text hit_val = get_word_attrib(hit, word_property, db) if hit_val == word_property_value: position += 1 if position < start: continue new_hitlist.append(hit) citation_hrefs = citation_links(db, config, hit) metadata_fields = {} for metadata in db.locals["metadata_fields"]: metadata_fields[metadata] = hit[metadata] citation = citations(hit, citation_hrefs, config) context = get_concordance_text(db, hit, config.db_path, config.concordance_length) result_obj = { "philo_id": hit.philo_id, "citation": citation, "citation_links": citation_hrefs, "context": context, "metadata_fields": metadata_fields, "bytes": hit.bytes, "collocate_count": 1, } results.append(result_obj) if len(new_hitlist) == (request.results_per_page): more_pages = True break end = start + len(results) - 1 if len(results) < request.results_per_page: word_property_total = end else: word_property_total = end + 1 concordance_object["results"] = results concordance_object["query_done"] = hits.done concordance_object["results_length"] = word_property_total concordance_object["description"] = { "start": start, "end": end, "results_per_page": request.results_per_page, "more_pages": more_pages, } return concordance_object