TymaaHammouda commited on
Commit
170771d
·
1 Parent(s): 8267058

Using post method

Browse files
Files changed (1) hide show
  1. app.py +94 -35
app.py CHANGED
@@ -9,6 +9,8 @@ from collections import namedtuple
9
  from Nested.utils.helpers import load_checkpoint
10
  from Nested.utils.data import get_dataloaders, text2segments
11
  import json
 
 
12
 
13
  app = FastAPI()
14
  print("Version 2...")
@@ -52,49 +54,106 @@ label_vocab = label_vocab[0] # the list loaded from pickle
52
  id2label = {i: s for i, s in enumerate(label_vocab.itos)}
53
 
54
 
55
- sentence = "ذهب احمد الى السوق"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  # Load tagger
57
- tagger, tag_vocab, train_config = load_checkpoint(checkpoint_path)
58
 
59
  # Convert text to a tagger dataset and index the tokens in args.text
60
- dataset, token_vocab = text2segments(sentence)
61
 
62
- vocabs = namedtuple("Vocab", ["tags", "tokens"])
63
- vocab = vocabs(tokens=token_vocab, tags=tag_vocab)
64
 
65
  # From the datasets generate the dataloaders
66
- dataloader = get_dataloaders(
67
- (dataset,),
68
- vocab,
69
- args_data,
70
- batch_size=32,
71
- shuffle=(False,),
72
- )[0]
73
 
74
  # Perform inference on the text and get back the tagged segments
75
- segments = tagger.infer(dataloader)
76
- segments_lists = []
 
 
 
 
 
 
 
 
 
77
 
78
 
79
- # Print results
80
  # for segment in segments:
81
- # s = [
82
- # f"{token.text} ({'|'.join([t['tag'] for t in token.pred_tag])})"
83
- # for token in segment
84
- # ]
85
- # print(" ".join(s))
86
-
87
-
88
- for segment in segments:
89
- for token in segment:
90
- segments_list = {}
91
- segments_list["token"] = token.text
92
- list_of_tags = [t['tag'] for t in token.pred_tag]
93
- list_of_tags = [i for i in list_of_tags if i not in('O',' ','')]
94
- if list_of_tags == []:
95
- segments_list["tags"] = ' '.join(['O'])
96
- else:
97
- segments_list["tags"] = ' '.join(list_of_tags)
98
- segments_lists.append(segments_list)
99
-
100
- print(segments_lists)
 
9
  from Nested.utils.helpers import load_checkpoint
10
  from Nested.utils.data import get_dataloaders, text2segments
11
  import json
12
+ from pydantic import BaseModel
13
+ from fastapi.responses import JSONResponse
14
 
15
  app = FastAPI()
16
  print("Version 2...")
 
54
  id2label = {i: s for i, s in enumerate(label_vocab.itos)}
55
 
56
 
57
+ class NERRequest(BaseModel):
58
+ text: str
59
+
60
+
61
+ @app.post("/predict")
62
+ def predict(request: NERRequest):
63
+
64
+ sentence = request.text # 👈 user input
65
+
66
+ # Load tagger
67
+ tagger, tag_vocab, train_config = load_checkpoint(checkpoint_path)
68
+
69
+ dataset, token_vocab = text2segments(sentence)
70
+
71
+ vocabs = namedtuple("Vocab", ["tags", "tokens"])
72
+ vocab = vocabs(tokens=token_vocab, tags=tag_vocab)
73
+
74
+ dataloader = get_dataloaders(
75
+ (dataset,),
76
+ vocab,
77
+ args_data,
78
+ batch_size=32,
79
+ shuffle=(False,),
80
+ )[0]
81
+
82
+ segments = tagger.infer(dataloader)
83
+
84
+ lists = []
85
+
86
+ for segment in segments:
87
+ for token in segment:
88
+ item = {}
89
+ item["token"] = token.text
90
+
91
+ list_of_tags = [t["tag"] for t in token.pred_tag]
92
+ list_of_tags = [i for i in list_of_tags if i not in ("O", " ", "")]
93
+
94
+ if not list_of_tags:
95
+ item["tags"] = ["O"]
96
+ else:
97
+ item["tags"] = list_of_tags
98
+
99
+ lists.append(item)
100
+
101
+ content = {
102
+ "resp": lists,
103
+ "statusText": "OK",
104
+ "statusCode": 0,
105
+ }
106
+
107
+ return JSONResponse(
108
+ content=content,
109
+ media_type="application/json",
110
+ status_code=200,
111
+ )
112
+
113
+
114
+ # sentence = "ذهب احمد إلى جامعة"
115
  # Load tagger
116
+ # tagger, tag_vocab, train_config = load_checkpoint(checkpoint_path)
117
 
118
  # Convert text to a tagger dataset and index the tokens in args.text
119
+ # dataset, token_vocab = text2segments(sentence)
120
 
121
+ # vocabs = namedtuple("Vocab", ["tags", "tokens"])
122
+ # vocab = vocabs(tokens=token_vocab, tags=tag_vocab)
123
 
124
  # From the datasets generate the dataloaders
125
+ # dataloader = get_dataloaders(
126
+ # (dataset,),
127
+ # vocab,
128
+ # args_data,
129
+ # batch_size=32,
130
+ # shuffle=(False,),
131
+ # )[0]
132
 
133
  # Perform inference on the text and get back the tagged segments
134
+ # segments = tagger.infer(dataloader)
135
+ # segments_lists = []
136
+
137
+
138
+ ## Print results
139
+ ## for segment in segments:
140
+ ## s = [
141
+ ## f"{token.text} ({'|'.join([t['tag'] for t in token.pred_tag])})"
142
+ ## for token in segment
143
+ ## ]
144
+ ## print(" ".join(s))
145
 
146
 
 
147
  # for segment in segments:
148
+ # for token in segment:
149
+ # segments_list = {}
150
+ # segments_list["token"] = token.text
151
+ # list_of_tags = [t['tag'] for t in token.pred_tag]
152
+ # list_of_tags = [i for i in list_of_tags if i not in('O',' ','')]
153
+ # if list_of_tags == []:
154
+ # segments_list["tags"] = ' '.join(['O'])
155
+ # else:
156
+ # segments_list["tags"] = ' '.join(list_of_tags)
157
+ # segments_lists.append(segments_list)
158
+
159
+ # print(segments_lists)