Example #1
0
def role_viterbi(vertexs, wordnet_optimum, hmm, trie, recognition_attr, tag_func, viterbi_fun=viterbi_template):
    tag_list = tag_func(vertexs)
    if Config.debug:
        sb = []
        for i, tag in enumerate(tag_list):
            sb.append(u"[ %s %s ]" % (vertexs[i].real_word, tag))
        print u"角色观察: %s" % u"".join(sb)

    tag_list = viterbi_fun(tag_list, hmm)
    if Config.debug:
        sb = []
        for i, tag in enumerate(tag_list):
            sb.append(u"%s/%s" % (vertexs[i].real_word, tag))
        print (u"角色标注:[%s]" % u", ".join(sb))

    tag_str = [str(x) for x in tag_list]
    tag_str = "".join(tag_str)
    search = Searcher(trie, tag_str)
    vertexs_offset = [0] * len(vertexs)
    offset = 1
    # head tail skip
    for i, v in enumerate(vertexs[1:-1]):
        vertexs_offset[i + 1] = offset
        offset += len(vertexs[i + 1].real_word)
    while search.next():
        name_str = ""
        for i in range(search.begin, search.begin + len(search.key)):
            name_str += vertexs[i].real_word

        # 添加到词网内
        vertex = Vertex(name_str, attribute=recognition_attr)
        wordnet_optimum.add(vertexs_offset[search.begin], vertex)
    vertexs = viterbi(wordnet_optimum.vertexs)
    return vertexs
Example #2
0
def role_viterbi(vertexs,
                 wordnet_optimum,
                 hmm,
                 trie,
                 recognition_attr,
                 tag_func,
                 viterbi_fun=viterbi_template):
    tag_list = tag_func(vertexs)
    if Config.debug:
        sb = []
        for i, tag in enumerate(tag_list):
            sb.append(u"[ %s %s ]" % (vertexs[i].real_word, tag))
        print u"角色观察: %s" % u"".join(sb)

    tag_list = viterbi_fun(tag_list, hmm)
    if Config.debug:
        sb = []
        for i, tag in enumerate(tag_list):
            sb.append(u"%s/%s" % (vertexs[i].real_word, tag))
        print(u"角色标注:[%s]" % u", ".join(sb))

    tag_str = [str(x) for x in tag_list]
    tag_str = ''.join(tag_str)
    search = Searcher(trie, tag_str)
    vertexs_offset = [0] * len(vertexs)
    offset = 1
    # head tail skip
    for i, v in enumerate(vertexs[1:-1]):
        vertexs_offset[i + 1] = offset
        offset += len(vertexs[i + 1].real_word)
    while search.next():
        name_str = ""
        for i in range(search.begin, search.begin + len(search.key)):
            name_str += vertexs[i].real_word

        # 添加到词网内
        vertex = Vertex(name_str, attribute=recognition_attr)
        wordnet_optimum.add(vertexs_offset[search.begin], vertex)
    vertexs = viterbi(wordnet_optimum.vertexs)
    return vertexs
Example #3
0
def role_viterbi(vertexs, wordnet_optimum, hmm, trie, recognition_attr, tag_func):
    tag_list = tag_func(vertexs)
    tag_list = viterbi_template(tag_list, hmm)
    tag_str = [str(x) for x in tag_list]
    tag_str = ''.join(tag_str)
    search = Searcher(trie, tag_str)
    vertexs_offset = [0] * len(vertexs)
    offset = 1
    # head tail skip
    for i, v in enumerate(vertexs[1:-1]):
        vertexs_offset[i + 1] = offset
        offset += len(vertexs[i + 1].real_word)
    while search.next():
        name_str = ""
        for i in range(search.begin, search.begin + len(search.key)):
            name_str += vertexs[i].real_word

        # 添加到词网内
        vertex = Vertex(name_str, attribute=recognition_attr)
        wordnet_optimum.add(vertexs_offset[search.begin], vertex)
    vertexs = viterbi(wordnet_optimum.vertexs)
    return vertexs