コード例 #1
0
ファイル: bhsheb_stat.py プロジェクト: jdlee726/kimsbible
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')
コード例 #2
0
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)
コード例 #3
0
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)
コード例 #4
0
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")
コード例 #5
0
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
コード例 #6
0
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='')