def parsing(): if request.method == 'POST': rangeCode = request.form['parsingCode'] nodeList = codetorange(rangeCode) rangeStr = codetostr(rangeCode, bookListKor) if nodeList == False: return False result = "<h4>" + rangeStr + "</h4>" result += "<div>" for verseNode in nodeList: result += booknameconv( str(T.sectionFromNode(verseNode)[0]), bookList, bookListKorAbbr) + str( T.sectionFromNode(verseNode)[1]) + ":" + str( T.sectionFromNode(verseNode)[2]) + " " wordNode = L.d(verseNode, otype='word') for n in wordNode: result += "<span>" result += "[" + F.g_word_utf8.v(n) + "] " strong = get_strong(n) gloss = get_kor_hgloss(strong, n) result += gloss + " " # result += F.gloss.v(L.u(n, otype='lex')[0]).replace("<", "").replace(">", "") + " " if F.pdp.v(n) == "verb": result += "(" + F.voc_utf8.v(L.u(n, otype='lex')[0]) + ") " result += kb.eng_to_kor( F.vs.v(n), 'abbr') + "." + kb.eng_to_kor( F.vt.v(n), 'abbr') + "." + kb.eng_to_kor( F.ps.v(n), 'abbr') + kb.eng_to_kor( F.gn.v(n), 'abbr') + kb.eng_to_kor( F.nu.v(n), 'abbr') + " " if F.prs_ps.v(n) != 'unknown': result += "접미." result += kb.eng_to_kor( F.prs_ps.v(n), 'abbr') + kb.eng_to_kor( F.prs_gn.v(n), 'abbr') + kb.eng_to_kor( F.prs_nu.v(n), 'abbr') + " " result += "</span>" result += "<br>" result += "</div>" return result else: return render_template('bhsheb_parsing.html')
def show_verse_function(node): wordsNode = L.d(node, otype='word') wordsNode.reverse() verse_api = {'words': [], 'gloss': [], 'pdp': [], 'parse': [], 'suff': []} for w in wordsNode: verse_api['words'].append(F.g_word_utf8.v(w)) strong = get_strong(w) verse_api['gloss'].append(get_kor_hgloss(strong, w)) # verse_api['gloss'].append(F.gloss.v(L.u(w, otype='lex')[0])) pdp = kb.eng_to_kor(F.pdp.v(w), 'abbr') if pdp == '동': pdp_str = pdp + "(" + kb.eng_to_kor(F.vs.v(w), 'abbr') + ")" verse_api['pdp'].append(pdp_str) parse_str = kb.eng_to_kor(F.vt.v(w), 'abbr') + "." + kb.eng_to_kor( F.ps.v(w), 'abbr') + kb.eng_to_kor( F.gn.v(w), 'abbr') + kb.eng_to_kor(F.nu.v(w), 'abbr') verse_api['parse'].append(parse_str) elif pdp == '명': verse_api['pdp'].append(pdp) parse_str = kb.eng_to_kor(F.gn.v(w), 'abbr') + kb.eng_to_kor( F.nu.v(w), 'abbr') verse_api['parse'].append(parse_str) else: verse_api['pdp'].append(pdp) verse_api['parse'].append('') if F.g_prs_utf8.v(w) != "": suff_str = "접미." + kb.eng_to_kor( F.prs_ps.v(w), 'abbr') + kb.eng_to_kor( F.prs_gn.v(w), 'abbr') + kb.eng_to_kor( F.prs_nu.v(w), 'abbr') verse_api['suff'].append(suff_str) else: verse_api['suff'].append('') section = T.sectionFromNode(wordsNode[0]) eng_chp_vrs = kb.heb_vrs_to_eng(section[0], str(section[1]), str(section[2])) verse_str = {"kjv": [], "kor": []} for c_v in eng_chp_vrs: chp_vrs = re.split(":", c_v) verse_str['kjv'].append( kb.json_to_verse(section[0], chp_vrs[0], chp_vrs[1], 'kjv')) verse_str['kor'].append( kb.json_to_verse(section[0], chp_vrs[0], chp_vrs[1], 'korean')) return render_template('bhsheb_verse.html', verse_api=verse_api, section=section, verse_str=verse_str)
def show_word_function(node): w_f = show_bhsheb_word_function(node) for k, v in w_f.items(): w_f[k] = kb.eng_to_kor(v, 'full') return render_template('bhsheb_word.html', w_f=w_f)
def text_page(book='Genesis', chapter=1): #캐싱파일 유무 확인 if not os.path.isfile("kimsbible/static/cached/bhsheb/" + book + "-" + str(chapter) + ".html"): chpNode = T.nodeFromSection((book, chapter)) verseNode = L.d(chpNode, otype='verse') whole_chpNode = T.nodeFromSection((book, )) last_chp = T.sectionFromNode(whole_chpNode, lastSlot=True) verse = "<ol>" #성경읽기 도우미 코드에서 1절 번호를 구하기 위해 절수를 구함 i = -1 for v in verseNode: i = i + 1 section = T.sectionFromNode(v) vcode = vp.nodetocode(section, vp.bookList) verse += '<li>' verse += '<div class=verseContainer>' verse += '<div class=verseNode>' wordsNode = L.d(v, otype='word') for w in wordsNode: clauseNode = L.u(w, otype='clause') phraseNode = L.u(w, otype='phrase') firstClauseWordNode = L.d(clauseNode[0], otype='word')[0] firstPhraseWordNode = L.d(phraseNode[0], otype='word')[0] lastClauseWordNode = L.d(clauseNode[0], otype='word')[-1] lastPhraseWordNode = L.d(phraseNode[0], otype='word')[-1] if w == firstClauseWordNode: verse += '<span class=clauseNode clause_node=' + str( clauseNode[0]) + '>' verse += "<span class=clause1>C:" + kb.eng_to_kor( F.typ.v(clauseNode[0]), 'full') + "</span>" if w == firstPhraseWordNode: verse += '<span class=phraseNode phrase_node=' + str( phraseNode[0]) + '>' verse += "<span class=phrase1>P:" + kb.eng_to_kor( F.typ.v(phraseNode[0]), 'full') + "," + kb.eng_to_kor( F.function.v(phraseNode[0]), 'full') + "</span>" if F.qere_utf8.v(w): verse += '<span class=wordNode>' verse += F.g_word_utf8.v(w) + ' ' verse += '</a></span>' verse += '<span class=wordNode><a tabindex=0 class=word_elm data-poload=/bhsheb/word/' + str( w) + ' data-toggle=popover data-trigger=focus>' verse += F.qere_utf8.v(w) verse += '</a></span>' if F.qere_trailer_utf8.v(w): verse += '<span class=trailerNode>' verse += F.qere_trailer_utf8.v(w) verse += '</span>' else: # 정관사와 전치사가 결합된 단어의 경우 빈 값으로 전치사 정보가 들어와서 틀이 깨지는 현상을 방지하기 위함. if not F.g_word_utf8.v(w): continue verse += '<span class=wordNode><a tabindex=0 class=word_elm data-poload=/bhsheb/word/' + str( w) + ' data-toggle=popover data-trigger=focus>' verse += F.g_word_utf8.v(w) verse += '</a></span>' if F.trailer_utf8.v(w): verse += '<span class=trailerNode>' verse += F.trailer_utf8.v(w) verse += '</span>' if w == lastPhraseWordNode: verse += '</span>' if w == lastClauseWordNode: verse += '</span>' #절분석 버튼 verse += '<br><span>' verse += '<button type="button" class="btn btn-outline-secondary btn-sm bhsheb_verse_analysis" verse_node=' + str( v) + '>절분석</button>' verse += '</span> ' #절노트 버튼 versenote_url = "../../commentary/vcode/" + vcode + "/" verse += '<span>' verse += '<a href="' + versenote_url + '" target="_blank"><button class="btn btn-outline-secondary btn-sm verse_note">주석</button></a>' verse += '</span>' verse += '</div>' #versenode verse += '<div class="transversions">' #개역한글 번역본 eng_chp_vrs = kb.heb_vrs_to_eng(section[0], str(section[1]), str(section[2])) for c_v in eng_chp_vrs: chp_vrs = re.split(":", c_v) kor_vrs = kb.json_to_verse(section[0], chp_vrs[0], chp_vrs[1], 'korean') verse += "<p class='kor' id='kor' dir=ltr align=left>" + kor_vrs + "</p>" #kjv 번역본 eng_chp_vrs = kb.heb_vrs_to_eng(section[0], str(section[1]), str(section[2])) for c_v in eng_chp_vrs: chp_vrs = re.split(":", c_v) kjv_vrs = kb.json_to_verse(section[0], chp_vrs[0], chp_vrs[1], 'kjv') verse += "<p class='kjv' id='kjv' dir=ltr align=left>" + kjv_vrs + "</p>" verse += "</div>" #transversions verse += '</div>' #versecontainer verse += '</li>' verse += '</ol>' kml_file = kml_url + book_abb[book] + '.' + str(chapter) + '.' + "kml" #원문읽기도우미를 위한 코드 (1절을 구함) vcode = int(vcode) - int(i) #캐싱페이지 작성 data = render_template('bhsheb_text.html', verse=verse, book=book, chapter=chapter, last_chp=last_chp[1], kml_file=kml_file, google_map_api=google_map_api, vcode=str(vcode)) f = open( "kimsbible/static/cached/bhsheb/" + book + "-" + str(chapter) + ".html", 'w') f.write(data) f.close() return render_template('bhsheb_text.html', verse=verse, book=book, chapter=chapter, last_chp=last_chp[1], kml_file=kml_file, google_map_api=google_map_api, vcode=str(vcode)) #캐싱파일이 있을 경우 else: return app.send_static_file("cached/bhsheb/" + book + "-" + str(chapter) + ".html")
def verbaldata(verb): verb = verb.replace('שׁ', 'שׁ').replace('שׂ', 'שׂ') verb = verb.replace('ם','מ').replace('ך','כ').replace('ן','נ').replace('ף','פ').replace('ץ','צ') verb = verb.replace('ש1', 'שׁ').replace('ש2', 'שׂ') query = "word lex_utf8="+verb S.search(query) fetch_data = list(S.fetch()) if len(fetch_data) == 0: return False i = 0 wordlist = {} wholelist = [] checklist = [] for w in fetch_data: node = w[0] if F.ps.v(node) == "unknown": ps = '' else: ps = F.ps.v(node) if F.gn.v(node) == "unknown": gn = '' else: gn = F.gn.v(node) if F.nu.v(node) == "unknown": nu = '' else: nu = F.nu.v(node) if F.prs_ps.v(node) == "unknown": prs_ps = '' else: prs_ps = F.prs_ps.v(node) if F.prs_gn.v(node) == "unknown": prs_gn = '' else: prs_gn = F.prs_gn.v(node) if F.prs_nu.v(node) == "unknown": prs_nu = '' else: prs_nu = F.prs_nu.v(node) checkvalue = F.vs.v(node) + F.vt.v(node) + ps + gn + nu + prs_ps + prs_gn + prs_nu if F.pdp.v(node) != "verb" or checkvalue in checklist: continue else: if F.vs.v(node) == 'hif' or F.vs.v(node) == 'hit' or F.vs.v(node) == 'htpo' or F.vs.v(node) == 'hof' or F.vs.v(node) == 'nif': lang= "Heb" elif F.vs.v(node) == 'piel' or F.vs.v(node) == 'poal' or F.vs.v(node) == 'poel' or F.vs.v(node) == 'pual' or F.vs.v(node) == 'qal': lang = "Heb" else: lang = "Arm" if F.vt.v(node) == 'wayq': verb = F.g_word_utf8.v(node-1) + F.g_word_utf8.v(node) else: verb = F.g_word_utf8.v(node) query = "<a href=/bhsheb/search/?cons=" + F.lex_utf8.v(node) + "&tense=" + F.vt.v(node) + "&stem=" + F.vs.v(node) query += "&ps=" + F.ps.v(node) query += "&gn=" + F.gn.v(node) query += "&nu=" + F.nu.v(node) query += "&prs_ps=" + F.prs_ps.v(node) query += "&prs_gn=" + F.prs_gn.v(node) query += "&prs_nu=" + F.prs_nu.v(node) query += " target=_blank>검색</a>" wordlist = { "lang": tr.eng_to_kor(lang, "abbr"), "verb": tr.eng_to_kor(verb, "abbr"), "stem": tr.eng_to_kor(F.vs.v(node), "abbr"), "tense": tr.eng_to_kor(F.vt.v(node), "abbr"), "ps": tr.eng_to_kor(ps, "abbr"), "gn": tr.eng_to_kor(gn, "abbr"), "nu": tr.eng_to_kor(nu, "abbr"), "prs_ps": tr.eng_to_kor(prs_ps, "abbr"), "prs_gn": tr.eng_to_kor(prs_gn, "abbr"), "prs_nu": tr.eng_to_kor(prs_nu, "abbr"), "query": query } wholelist.append(wordlist) checklist.append(F.vs.v(node) + F.vt.v(node) + ps + gn + nu + prs_ps + prs_gn + prs_nu) i = i + 1 if i == 0: return False sortedlist = sorted(wholelist, key=sortkeypicker(['lang', 'stem', 'tense', 'ps', 'gn', 'nu', 'prs_ps', 'prs_gn', 'prs_nu'])) return sortedlist
def studytools_reading_bhsheb(): if request.method == 'POST': rangeCode = request.form['rangeCode'] check1 = request.form['check1'] check2 = request.form['check2'] check3 = request.form['check3'] sections = rangeCode.split(";") result = '<div class="reading">' result += '<h3>알파알렙 성경 원문읽기 도우미 (구약)</h3><br>' if not check1: parsing = '<h4>단어 문법 분석</h4>' parsing += '<font size=2>불변화사나 전치사 등과 같이 빈번하게 등장하는 단어들은 단어 리스트 참조</font>' parsing += '<br><br><div class="parsing">' vocalist = {} for section in sections: nodeList = stat.codetorange(section) if nodeList == False: error = "오류가 발생했습니다. 아마 존재하지 않는 구절범위를 입력하신 것 같습니다." return error if len(nodeList) > 100: error = "범위가 너무 많습니다. 100절 이하의 범위를 입력해 주세요." return error sectionTitle = stat.codetostr(section, stat.bookListKor) result += '<h4>' + sectionTitle + '</h4>' # result += '<br>' result += '<div class="section">' for node in nodeList: section = T.sectionFromNode(node) wordsNode = L.d(node, otype='word') if not check3: result += '<span class=chpvrs>' + str( section[2]) + '</span> <span class="verse">' + T.text( wordsNode) + '</span>' if not check1: parsing += stat.booknameconv( section[0], stat.bookList, stat.bookListKorAbbr) + str( section[1]) + ":" + str(section[2]) + "<br>" for w in wordsNode: strong = get_strong(w) gloss = get_kor_hgloss(strong, w) if not check2: root = F.voc_utf8.v(L.u(w, otype='lex')[0]) if not root in vocalist: vocalist[root] = gloss if not check1: pdp = kb.eng_to_kor(F.pdp.v(w), 'full') if pdp == '전치사' or pdp == '관사' or pdp == '접속사' or pdp == '관계사' or pdp == '부사': continue parsing += '<span class="parsing_heb">' parsing += "[" + F.g_word_utf8.v(w) + "] " parsing += "</span>" parsing += pdp + " " if pdp == '동사': parsing += "(" + F.voc_utf8.v( L.u(w, otype='lex')[0]) + ") " parsing += kb.eng_to_kor( F.vs.v(w), 'full') + "." + kb.eng_to_kor( F.vt.v(w), 'full') + "." + kb.eng_to_kor( F.ps.v(w), 'full') + "." + kb.eng_to_kor( F.gn.v(w), 'full') + "." + kb.eng_to_kor( F.nu.v(w), 'full') + " " if F.prs_ps.v(w) != 'unknown': parsing += "접미." parsing += kb.eng_to_kor( F.prs_ps.v(w), 'full') + "." + kb.eng_to_kor( F.prs_gn.v(w), 'full') + "." + kb.eng_to_kor( F.prs_nu.v(w), 'full') + " " if pdp == '명사' or pdp == '형용사': parsing += "(" + F.voc_utf8.v( L.u(w, otype='lex')[0]) + ") " parsing += kb.eng_to_kor( F.gn.v(w), 'full') + "." + kb.eng_to_kor( F.nu.v(w), 'full') + " " if F.g_prs_utf8.v(w) != "": parsing += "접미." + kb.eng_to_kor( F.prs_ps.v(w), 'full') + "." + kb.eng_to_kor( F.prs_gn.v(w), 'full') + "." + kb.eng_to_kor( F.prs_nu.v(w), 'full') + " " parsing += "(" + gloss + ")<br>" if not check1: parsing += "<br>" result += '</div><br><br>' if not check1: parsing += '</div><br><br>' result += parsing if not check2: result += '<h4>단어 리스트</h4>' result += '<br>' result += '<div class="wordlist">' sorted_vocalist = sorted(vocalist.items()) for voca in sorted_vocalist: result += '<span class="parsing_heb">' + voca[ 0] + '</span> <span class="parsing">' + voca[ 1] + '</span><br>' result += '</div>' result += '</div>' result += '<div class="notice">일러두기<br>' result += '저작권: 저작자표시-비영리-동일조건변경허락 4.0 국제 (CC BY-NC-SA 4.0)<br>' result += '본 내용은 알파알렙성경(app.alphalef.com)을 통해서 출력되었습니다. 이 문서를 자유롭게 변형하거나 배포할 수 있습니다. 단, 상업적인 이용은 불가하며 공유시 자료출처가 명시된 본 일러두기 부분을 반드시 첨부하여 주시면 감사하겠습니다.' result += '</div>' return result elif request.method == 'GET': vcode = request.args.get('v') return render_template('bhsheb_studytools_reading.html', vcode=vcode) else: return render_template('bhsheb_studytools_reading.html', vcode='')