def search_word(request, search_term): search_term = canonicalise_word(search_term) matching_words = Word.objects.find_by_variant(search_term) similar_words = set(Word.objects.find_by_variant_fuzzy(search_term)) similar_words = similar_words - set(matching_words) parsed_words = [] for parse_result in parse_morphology(search_term): printable_parts = [] for part in parse_result: if isinstance(part, Morpheme): printable_parts.append(part.morpheme) else: printable_parts.append(part) parts = [] for part in parse_result: if isinstance(part, Morpheme): if part.primary_word: parts.append({ 'vorto': part.primary_word.word, 'parto': part.morpheme }) else: parts.append({'vorto': None, 'parto': part.morpheme}) else: parts.append({'vorto': None, 'parto': part}) parsed_words.append({ 'rezulto': "-".join(printable_parts), 'partoj': parts, }) translations = [{ 'vorto': trans.word.word, 'traduko': trans.translation, 'kodo': trans.language_code, 'lingvo': trans.language } for trans in Translation.objects.filter(translation=search_term)] return JsonResponse({ 'preciza': [word.word for word in matching_words], 'malpreciza': sorted([word.word for word in similar_words], cmp=compare_esperanto_strings), 'vortfarado': parsed_words, 'tradukoj': translations, })
def search_word(request, search_term): search_term = canonicalise_word(search_term) matching_words = Word.objects.find_by_variant(search_term) similar_words = set(Word.objects.find_by_variant_fuzzy(search_term)) similar_words = similar_words - set(matching_words) parsed_words = [] for parse_result in parse_morphology(search_term): printable_parts = [] for part in parse_result: if isinstance(part, Morpheme): printable_parts.append(part.morpheme) else: printable_parts.append(part) parts = [] for part in parse_result: if isinstance(part, Morpheme): if part.primary_word: parts.append({'vorto': part.primary_word.word, 'parto': part.morpheme}) else: parts.append({'vorto': None, 'parto': part.morpheme}) else: parts.append({'vorto': None, 'parto': part}) parsed_words.append({ 'rezulto': "-".join(printable_parts), 'partoj': parts, }) translations = [ {'vorto': trans.word.word, 'traduko': trans.translation, 'kodo': trans.language_code, 'lingvo': trans.language} for trans in Translation.objects.filter(translation=search_term) ] return JsonResponse({ 'preciza': [word.word for word in matching_words], 'malpreciza': sorted([word.word for word in similar_words], cmp=compare_esperanto_strings), 'vortfarado': parsed_words, 'tradukoj': translations, })
def get_parsed_string(compound): """Given a string of a compound word, return a list of strings of potential parses. find_roots does the main work and we just convert the Morpheme objects here. """ object_parses = parse_morphology(compound) parses = [] for object_parse in object_parses: parse = [] for component in object_parse: if type(component) == str: parse.append(component) else: # component is a Morpheme object parse.append(component.morpheme) parses.append('-'.join(parse)) return parses