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
|