def get_words_with_block(self, block, exclude=None) -> [tuple]: """ This functions returns a list of Korean words which also contains blocks with the same etymology. When the etymology is not available, an empty list is returned. This typically happens when the input block is a suffix. """ if block.etymology: query = """SELECT word, etymology, meaning FROM `Korean` WHERE etymology LIKE '%{}%' AND length(word) = length(etymology) """.format(block.etymology) if exclude: query += """ AND word != '{}'""".format(exclude) self.cursor.execute(query) results = self.cursor.fetchall() words = [r for r in results if detect_language(r[1]) is not 'korean'] else: words = [] return words
#cgitb.enable() #UI.render_empty() # Entree UI.render_top() # Main form = cgi.FieldStorage() if 'word' in form.keys(): input_str = form["word"].value try: language = detect_language(_u(input_str)) except ValueError: language = None UI.render_error('Language not supported') if language == 'korean': from asian_word_analyzer.korean.db import DbUtil from asian_word_analyzer.korean.word import KoreanWord as Word elif language == 'thai': from asian_word_analyzer.thai.word import get_words_with_block from asian_word_analyzer.thai.word import ThaiWord as Word if 'Word' in locals(): word = Word(input_str, compute_ethym=True) UI.render_main(word)
def test_detect_language_failure(word): assert 'unknown' == detect_language(word, raise_if_unknown=False)
def test_detect_language_unknown(word): with pytest.raises(ValueError): detect_language(word, raise_if_unknown=True)
def test_detect_language(word, expected): assert expected == detect_language(word)
def get_word_and_db_util_classes(language): if language == 'korean': return KoreanDbUtil, KoreanWord elif language == 'thai': return ThaiDbUtil, ThaiWord # Entree UI.render_top() # Main form = cgi.FieldStorage() if 'word' in form.keys(): input_str = form["word"].value try: language = detect_language(_u(input_str)) except ValueError: UI.render_error('Language not supported') if 'language' in locals(): DbUtil, Word = get_word_and_db_util_classes(language) word = Word(input_str, compute_etymology=True) UI.render_main(word) blocks = word.get_blocks_for_selected_meaning() for block in blocks: word_tuples = DbUtil().get_words_with_block(block, exclude=word) words = [ Word(string=r[0], etymology=r[1], meaning=r[2]) for r in word_tuples ] UI.render_block(block, words)