File size: 6,477 Bytes
03c1af1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#from conf import *
import os
import sys
import re
from rapidfuzz import fuzz
import requests
import json

#assert os.path.exists(flair_ner_model_path)
#loaded_model: SequenceTagger = SequenceTagger.load(os.path.join(flair_ner_model_path ,"best-model.pt"))

'''
def one_item_process(r, loaded_model):
    #assert type(r) == type(pd.Series())
    zh = r["question"]
    zh = zh.replace(" ", "").strip()
    sentence = Sentence(" ".join(list(zh)))
    loaded_model.predict(sentence)
    sentence_str = str(sentence)
    ask_spans = re.findall(r'\["(.+?)"/ASK\]', sentence_str)
    sentence = re.findall(r'Sentence: "(.+?)"', sentence_str)
    if ask_spans:
        ask_spans = ask_spans[0]
    else:
        ask_spans = ""
    if sentence:
        sentence = sentence[0]
    else:
        sentence = ""
    ask_spans, sentence = map(lambda x: x.replace(" ", "").strip(), [ask_spans, sentence])
    return ask_spans, sentence
'''

def one_item_process_by_request(r):
    zh = r["question"]
    zh = zh.replace(" ", "").strip()
    response = requests.post("https://svjack-question-words-extractor-zh.hf.space/run/predict", json={
      "data": [
        zh,
    ]}).json()
    data = response["data"]
    #data = json.loads(data)
    if data:
        data = data[0]
        Question_words = data["Question words"]
    else:
        Question_words = ""
    return Question_words, zh


def retrieve_sent_split(sent,
                       stops_split_pattern = "|".join(map(lambda x: r"\{}".format(x),
                                                                 ",." + ",。" + ":?? "))
                       ):
    if not sent.strip():
        return []

    split_list = re.split(stops_split_pattern, sent)
    return split_list

def find_min_text_contain_entity_span(sent, entity_str, statement):
    #assert entity_str in sent
    span_list = list(filter(lambda x: entity_str in x ,retrieve_sent_split(sent)))
    if not span_list:
        return sent
    span_list = list(map(lambda x: (x, fuzz.ratio(x, statement)), span_list))
    return sorted(span_list, key = lambda t2: t2[1], reverse = True)[0][0]
    #return sorted(span_list, key = len)[0]

def to_statement(r):
    entity = r["entity"]
    question = r["question"]
    head = r["head"]
    context = r["context"]
    statement = question.replace(head, entity).replace("?", "").replace("?", "")
    top_chip = find_min_text_contain_entity_span(context, entity, statement)
    return statement, top_chip

'''
r = {'entity': '1901年',
 'question': '荷兰国会何时通过伦理政策?',
 'title': '爪哇岛',
 'context': '伊斯兰教被接受的同时,其教义也被融入了当地人长久以来的一些信仰,所以爪哇岛的伊斯兰教带有明显的本地特色  “荷兰东印度公司”在巴达维亚(今天的雅加达)建立了“贸易和行政管理总部” 在殖民统治时期,荷兰人将注意力集中在雅加达和其他一些海滨城市,例如三宝垄和泗水 荷兰殖民者还通过一些归顺的本土势力,间接对这个多山的岛屿进行统治,例如爪哇岛中部的马打兰王国  19世纪,荷兰政府从荷兰东印度公司手上接管了东印度群岛,1830年荷兰统治者开始实行所谓“耕种制”(荷兰语cultuurstelsel en cultuurprocenten)的变相奴役制度,导致了大范围的饥荒和贫困 随即发生了各种政治和社会反抗运动,其中一位名叫Multatuli的荷兰作家写了一本名叫《Max Havelaar》的小说,以抗议当时的社会状况 迫于各种反抗运动此起彼伏,1901年荷兰国会通过伦理政策(Etnisch beleid),客观上使一部分爪哇人接触到荷兰式教育,在这些人中,出现了很多杰出的印尼民族主义者,并且在二战后的印尼独立运动中起到了重要作用'}

qa_downstream_process(
    r["entity"],
    r["question"],
    r["context"],
    loaded_model
)

{'entity': '1901年',
 'question': '荷兰国会何时通过伦理政策?',
 'context': '伊斯兰教被接受的同时,其教义也被融入了当地人长久以来的一些信仰,所以爪哇岛的伊斯兰教带有明显的本地特色  “荷兰东印度公司”在巴达维亚(今天的雅加达)建立了“贸易和行政管理总部” 在殖民统治时期,荷兰人将注意力集中在雅加达和其他一些海滨城市,例如三宝垄和泗水 荷兰殖民者还通过一些归顺的本土势力,间接对这个多山的岛屿进行统治,例如爪哇岛中部的马打兰王国  19世纪,荷兰政府从荷兰东印度公司手上接管了东印度群岛,1830年荷兰统治者开始实行所谓“耕种制”(荷兰语cultuurstelsel en cultuurprocenten)的变相奴役制度,导致了大范围的饥荒和贫困 随即发生了各种政治和社会反抗运动,其中一位名叫Multatuli的荷兰作家写了一本名叫《Max Havelaar》的小说,以抗议当时的社会状况 迫于各种反抗运动此起彼伏,1901年荷兰国会通过伦理政策(Etnisch beleid),客观上使一部分爪哇人接触到荷兰式教育,在这些人中,出现了很多杰出的印尼民族主义者,并且在二战后的印尼独立运动中起到了重要作用',
 'head': '何时',
 'statement': '荷兰国会1901年通过伦理政策',
 'top_chip': '1901年荷兰国会通过伦理政策(Etnisch'}
'''
#def qa_downstream_process(entity, question, context, loaded_model = loaded_model):
def qa_downstream_process(entity, question, context):
    if entity not in context:
        return None
    d = {
        "entity": entity,
        "question": question,
        "context": context
    }
    #head_qst = one_item_process(d, loaded_model)
    head_qst = one_item_process_by_request(d)
    head, _ = head_qst
    d["head"] = head
    statement, top_chip = to_statement(d)
    d["statement"] = statement
    d["top_chip"] = top_chip
    return d

'''
@csrf_exempt
def qa_downstream_process_part(request):
    assert request.method == "POST"
    post_data = request.POST
    entity = post_data["entity"]
    question = post_data["question"]
    context = post_data["context"]
    output = qa_downstream_process(entity, question, context)
    if output is None:
        return HttpResponse(json.dumps(
            {"output": "No Answer"}
        ))
    assert type(output) == type({})
    req_str = json.dumps(output)
    return HttpResponse(
        req_str
    )
'''

if __name__ == "__main__":
    pass