| | |
| | import os |
| | import sys |
| | import re |
| | from rapidfuzz import fuzz |
| | import requests |
| | import json |
| |
|
| | |
| | |
| |
|
| | ''' |
| | 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"] |
| | |
| | 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): |
| | |
| | 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] |
| | |
| |
|
| | 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): |
| | if entity not in context: |
| | return None |
| | d = { |
| | "entity": entity, |
| | "question": question, |
| | "context": context |
| | } |
| | |
| | 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 |
| |
|