mirror of
https://github.com/qurator-spk/sbb_ner.git
synced 2025-07-02 23:49:55 +02:00
implement demo interface;fix eval bug in ner webapp; beautify textline_rec code
This commit is contained in:
parent
3c12e5538a
commit
9560f70580
7 changed files with 168 additions and 313 deletions
|
@ -385,6 +385,8 @@ def model_predict(dataloader, device, label_map, model):
|
||||||
temp_2.pop() # skip last token since its [SEP]
|
temp_2.pop() # skip last token since its [SEP]
|
||||||
y_pred.append(temp_2)
|
y_pred.append(temp_2)
|
||||||
break
|
break
|
||||||
|
else:
|
||||||
|
y_pred.append(temp_2)
|
||||||
|
|
||||||
return y_pred
|
return y_pred
|
||||||
|
|
||||||
|
|
|
@ -93,12 +93,16 @@ class NERPredictor:
|
||||||
features = [convert_examples_to_features(ex, self._label_to_id, self._max_seq_length, self._bert_tokenizer)
|
features = [convert_examples_to_features(ex, self._label_to_id, self._max_seq_length, self._bert_tokenizer)
|
||||||
for ex in examples]
|
for ex in examples]
|
||||||
|
|
||||||
|
assert len(sentences) == len(features)
|
||||||
|
|
||||||
data_loader = NerProcessor.make_data_loader(None, self._batch_size, self._local_rank, self._label_to_id,
|
data_loader = NerProcessor.make_data_loader(None, self._batch_size, self._local_rank, self._label_to_id,
|
||||||
self._max_seq_length, self._bert_tokenizer, features=features,
|
self._max_seq_length, self._bert_tokenizer, features=features,
|
||||||
sequential=True)
|
sequential=True)
|
||||||
|
|
||||||
prediction_tmp = model_predict(data_loader, self._device, self._label_map, self._model)
|
prediction_tmp = model_predict(data_loader, self._device, self._label_map, self._model)
|
||||||
|
|
||||||
|
assert len(sentences) == len(prediction_tmp)
|
||||||
|
|
||||||
prediction = []
|
prediction = []
|
||||||
for fe, pr in zip(features, prediction_tmp):
|
for fe, pr in zip(features, prediction_tmp):
|
||||||
prediction.append((fe.tokens[1:-1], pr))
|
prediction.append((fe.tokens[1:-1], pr))
|
||||||
|
@ -185,125 +189,47 @@ def fulltext(ppn):
|
||||||
if row_data.text is None:
|
if row_data.text is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
text += html.escape(str(row_data.text)) + '<br><br><br>'
|
text += row_data.text + " "
|
||||||
|
|
||||||
ret = {'text': text, 'ppn': ppn}
|
ret = {'text': text, 'ppn': ppn}
|
||||||
|
|
||||||
return jsonify(ret)
|
return jsonify(ret)
|
||||||
|
|
||||||
|
|
||||||
@app.route('/digisam-tokenized/<ppn>')
|
@app.route('/tokenized', methods=['GET', 'POST'])
|
||||||
def tokenized(ppn):
|
def tokenized():
|
||||||
|
|
||||||
df = digisam.get(ppn)
|
raw_text = request.json['text']
|
||||||
|
|
||||||
if len(df) == 0:
|
sentences = tokenizer.parse_text(raw_text)
|
||||||
return 'bad request!', 400
|
|
||||||
|
|
||||||
text = ''
|
result = [(sen, i) for i, (sen, _) in enumerate(sentences)]
|
||||||
for row_index, row_data in df.iterrows():
|
|
||||||
|
|
||||||
if row_data.text is None:
|
return jsonify(result)
|
||||||
continue
|
|
||||||
|
|
||||||
sentences = tokenizer.parse_text(row_data.text)
|
|
||||||
|
|
||||||
for sen, _ in sentences:
|
|
||||||
|
|
||||||
text += html.escape(str(sen)) + '<br>'
|
|
||||||
|
|
||||||
text += '<br><br><br>'
|
|
||||||
|
|
||||||
ret = {'text': text, 'ppn': ppn}
|
|
||||||
|
|
||||||
return jsonify(ret)
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/ner-bert-tokens/<model_id>/<ppn>')
|
@app.route('/ner-bert-tokens/<model_id>', methods=['GET', 'POST'])
|
||||||
def ner_bert_tokens(model_id, ppn):
|
def ner_bert_tokens(model_id):
|
||||||
|
|
||||||
df = digisam.get(ppn)
|
raw_text = request.json['text']
|
||||||
|
|
||||||
if len(df) == 0:
|
sentences = tokenizer.parse_text(raw_text)
|
||||||
return 'bad request!', 400
|
|
||||||
|
|
||||||
text = ''
|
prediction = predictor_store.get(model_id).classify_text(sentences)
|
||||||
for row_index, row_data in df.iterrows():
|
|
||||||
|
|
||||||
if row_data.text is None:
|
output = []
|
||||||
continue
|
|
||||||
|
|
||||||
sentences = tokenizer.parse_text(row_data.text)
|
for tokens, word_predictions in prediction:
|
||||||
|
|
||||||
prediction = predictor_store.get(model_id).classify_text(sentences)
|
output_sentence = []
|
||||||
|
|
||||||
for tokens, word_predictions in prediction:
|
for token, word_pred in zip(tokens, word_predictions):
|
||||||
|
|
||||||
for token, word_pred in zip(tokens, word_predictions):
|
output_sentence.append({'token': html.escape(token), 'prediction': word_pred})
|
||||||
|
|
||||||
text += html.escape("{}({})".format(token, word_pred))
|
output.append(output_sentence)
|
||||||
|
|
||||||
text += '<br>'
|
return jsonify(output)
|
||||||
|
|
||||||
text += '<br><br><br>'
|
|
||||||
|
|
||||||
ret = {'text': text, 'ppn': ppn}
|
|
||||||
|
|
||||||
return jsonify(ret)
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/digisam-ner/<model_id>/<ppn>')
|
|
||||||
def digisam_ner(model_id, ppn):
|
|
||||||
|
|
||||||
df = digisam.get(ppn)
|
|
||||||
|
|
||||||
if len(df) == 0:
|
|
||||||
return 'bad request!', 400
|
|
||||||
|
|
||||||
text = ''
|
|
||||||
|
|
||||||
for row_index, row_data in df.iterrows():
|
|
||||||
|
|
||||||
if row_data.text is None:
|
|
||||||
continue
|
|
||||||
|
|
||||||
sentences = tokenizer.parse_text(row_data.text)
|
|
||||||
|
|
||||||
prediction = predictor_store.get(model_id).classify_text(sentences)
|
|
||||||
|
|
||||||
for tokens, word_predictions in prediction:
|
|
||||||
|
|
||||||
last_prediction = 'O'
|
|
||||||
|
|
||||||
for token, word_pred in zip(tokens, word_predictions):
|
|
||||||
|
|
||||||
if token == '[UNK]':
|
|
||||||
continue
|
|
||||||
|
|
||||||
if not token.startswith('##'):
|
|
||||||
text += ' '
|
|
||||||
|
|
||||||
token = token[2:] if token.startswith('##') else token
|
|
||||||
|
|
||||||
if word_pred != 'X':
|
|
||||||
last_prediction = word_pred
|
|
||||||
|
|
||||||
if last_prediction == 'O':
|
|
||||||
text += html.escape(token)
|
|
||||||
elif last_prediction.endswith('PER'):
|
|
||||||
text += '<font color="red">' + html.escape(token) + '</font>'
|
|
||||||
elif last_prediction.endswith('LOC'):
|
|
||||||
text += '<font color="green">' + html.escape(token) + '</font>'
|
|
||||||
elif last_prediction.endswith('ORG'):
|
|
||||||
text += '<font color="blue">' + html.escape(token) + '</font>'
|
|
||||||
|
|
||||||
text += '<br>'
|
|
||||||
|
|
||||||
text += '<br><br><br>'
|
|
||||||
|
|
||||||
ret = {'text': text, 'ppn': ppn}
|
|
||||||
|
|
||||||
return jsonify(ret)
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/ner/<model_id>', methods=['GET', 'POST'])
|
@app.route('/ner/<model_id>', methods=['GET', 'POST'])
|
||||||
|
|
|
@ -35,9 +35,9 @@
|
||||||
<div class="form-group row ml-2">
|
<div class="form-group row ml-2">
|
||||||
<label for="task" class="col-sm-2 col-form-label">Task:</label>
|
<label for="task" class="col-sm-2 col-form-label">Task:</label>
|
||||||
<select id="task" class="selectpicker col-md-auto" onchange="task_select()">
|
<select id="task" class="selectpicker col-md-auto" onchange="task_select()">
|
||||||
<option value="2">Wort- und Satztokenisierung</option>
|
<option value="tokenize">Wort- und Satztokenisierung</option>
|
||||||
<option value="3" selected>Named Entity Recognition</option>
|
<option value="ner" selected>Named Entity Recognition</option>
|
||||||
<option value="4">BERT Tokens</option>
|
<option value="bert-tokens">BERT Tokens</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row ml-2" id="model_select">
|
<div class="form-group row ml-2" id="model_select">
|
||||||
|
@ -48,8 +48,7 @@
|
||||||
|
|
||||||
<div class="form-group row ml-2">
|
<div class="form-group row ml-2">
|
||||||
<label for="inputtext" class="col-sm-2 col-form-label">Input text:</label>
|
<label for="inputtext" class="col-sm-2 col-form-label">Input text:</label>
|
||||||
<!-- <input id="inputtext" class="col-sm-8" type="text" rows=10/> -->
|
<textarea id="inputtext" class=" col-sm-8 form-control" rows="10" required></textarea>
|
||||||
<textarea id="inputtext" class=" col-sm-8 form-control" rows="3" required></textarea>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group row ml-2">
|
<div class="form-group row ml-2">
|
||||||
|
@ -75,5 +74,6 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<script src="js/ner.js"></script>
|
<script src="js/ner.js"></script>
|
||||||
|
<script src="js/ner-demo.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
34
qurator/sbb_ner/webapp/static/js/ner-demo.js
Normal file
34
qurator/sbb_ner/webapp/static/js/ner-demo.js
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
$('#nerform').submit(
|
||||||
|
function(e){
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
var task = $('#task').val();
|
||||||
|
var model_id = $('#model').val();
|
||||||
|
var input_text = $('#inputtext').val()
|
||||||
|
|
||||||
|
do_task(task, model_id, input_text);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
$.get( "/models")
|
||||||
|
.done(
|
||||||
|
function( data ) {
|
||||||
|
var tmp="";
|
||||||
|
$.each(data,
|
||||||
|
function(index, item){
|
||||||
|
|
||||||
|
selected=""
|
||||||
|
if (item.default) {
|
||||||
|
selected = "selected"
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp += '<option value="' + item.id + '" ' + selected + ' >' + item.name + '</option>'
|
||||||
|
});
|
||||||
|
$('#model').html(tmp);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
task_select()
|
||||||
|
});
|
|
@ -4,7 +4,31 @@ $(document).ready(function(){
|
||||||
$('#nerform').submit(
|
$('#nerform').submit(
|
||||||
function(e){
|
function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
load_ppn();
|
|
||||||
|
var task = $('#task').val();
|
||||||
|
var model_id = $('#model').val();
|
||||||
|
|
||||||
|
var spinner_html =
|
||||||
|
`<div class="d-flex justify-content-center">
|
||||||
|
<div class="spinner-border align-center" role="status">
|
||||||
|
<span class="sr-only">Loading...</span>
|
||||||
|
</div>
|
||||||
|
</div>`;
|
||||||
|
|
||||||
|
var ppn = $('#ppn').val()
|
||||||
|
|
||||||
|
$("#resultregion").html(spinner_html);
|
||||||
|
|
||||||
|
$.get( "/digisam-fulltext/" + ppn)
|
||||||
|
.done(function( data ) {
|
||||||
|
|
||||||
|
do_task(task, model_id, data.text)
|
||||||
|
})
|
||||||
|
.fail(
|
||||||
|
function() {
|
||||||
|
console.log('Failed.');
|
||||||
|
$("#resultregion").html('Failed.');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -41,115 +65,3 @@ $(document).ready(function(){
|
||||||
|
|
||||||
task_select()
|
task_select()
|
||||||
});
|
});
|
||||||
|
|
||||||
function task_select() {
|
|
||||||
|
|
||||||
var task = $('#task').val();
|
|
||||||
|
|
||||||
if (task < 3) {
|
|
||||||
$('#model_select').hide()
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$('#model_select').show()
|
|
||||||
}
|
|
||||||
|
|
||||||
$("#resultregion").html("");
|
|
||||||
$("#legende").html("");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function load_ppn() {
|
|
||||||
|
|
||||||
var ppn = $('#ppn').val()
|
|
||||||
|
|
||||||
var text_region_html =
|
|
||||||
`<div class="card">
|
|
||||||
<div class="card-header">
|
|
||||||
Ergebnis:
|
|
||||||
</div>
|
|
||||||
<div class="card-block">
|
|
||||||
<div id="textregion" style="overflow-y:scroll;height: 65vh;"></div>
|
|
||||||
</div>
|
|
||||||
</div>`;
|
|
||||||
|
|
||||||
var legende_html =
|
|
||||||
`<div class="card">
|
|
||||||
<div class="card-header">
|
|
||||||
Legende:
|
|
||||||
<div class="ml-2" >[<font color="red">Person</font>]</div>
|
|
||||||
<div class="ml-2" >[<font color="green">Ort</font>]</div>
|
|
||||||
<div class="ml-2" >[<font color="blue">Organisation</font>]</div>
|
|
||||||
<div class="ml-2" >[keine Named Entity]</div>
|
|
||||||
</div>
|
|
||||||
</div>`;
|
|
||||||
|
|
||||||
var spinner_html =
|
|
||||||
`<div class="d-flex justify-content-center">
|
|
||||||
<div class="spinner-border align-center" role="status">
|
|
||||||
<span class="sr-only">Loading...</span>
|
|
||||||
</div>
|
|
||||||
</div>`;
|
|
||||||
|
|
||||||
$("#legende").html("");
|
|
||||||
|
|
||||||
var task = $('#task').val();
|
|
||||||
var model_id = $('#model').val();
|
|
||||||
|
|
||||||
console.log("Task: " + task);
|
|
||||||
|
|
||||||
if (task == 1) {
|
|
||||||
$("#resultregion").html(spinner_html);
|
|
||||||
|
|
||||||
$.get( "/digisam-fulltext/" + ppn)
|
|
||||||
.done(function( data ) {
|
|
||||||
$("#resultregion").html(text_region_html)
|
|
||||||
$("#textregion").html(data.text)
|
|
||||||
})
|
|
||||||
.fail(
|
|
||||||
function() {
|
|
||||||
console.log('Failed.');
|
|
||||||
$("#resultregion").html('Failed.');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else if (task == 2) {
|
|
||||||
$("#resultregion").html(spinner_html);
|
|
||||||
|
|
||||||
$.get( "/digisam-tokenized/" + ppn,
|
|
||||||
function( data ) {
|
|
||||||
$("#resultregion").html(text_region_html)
|
|
||||||
$("#textregion").html(data.text)
|
|
||||||
}).fail(
|
|
||||||
function() {
|
|
||||||
console.log('Failed.')
|
|
||||||
$("#resultregion").html('Failed.')
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else if (task == 3) {
|
|
||||||
|
|
||||||
$("#resultregion").html(spinner_html);
|
|
||||||
|
|
||||||
$.get( "/digisam-ner/" + model_id + "/" + ppn,
|
|
||||||
function( data ) {
|
|
||||||
$("#resultregion").html(text_region_html)
|
|
||||||
$("#textregion").html(data.text)
|
|
||||||
$("#legende").html(legende_html)
|
|
||||||
}).fail(
|
|
||||||
function(a,b,c) {
|
|
||||||
console.log('Failed.')
|
|
||||||
$("#resultregion").html('Failed.')
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else if (task == 4) {
|
|
||||||
$("#resultregion").html(spinner_html);
|
|
||||||
|
|
||||||
$.get( "/digisam-ner-bert-tokens/" + model_id + "/" + ppn,
|
|
||||||
function( data ) {
|
|
||||||
$("#resultregion").html(text_region_html)
|
|
||||||
$("#textregion").html(data.text)
|
|
||||||
}).fail(
|
|
||||||
function(a,b,c) {
|
|
||||||
console.log('Failed.')
|
|
||||||
$("#resultregion").html('Failed.')
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,39 +1,9 @@
|
||||||
|
|
||||||
$(document).ready(function(){
|
|
||||||
|
|
||||||
$('#nerform').submit(
|
|
||||||
function(e){
|
|
||||||
e.preventDefault();
|
|
||||||
do_task();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
$.get( "/models")
|
|
||||||
.done(
|
|
||||||
function( data ) {
|
|
||||||
var tmp="";
|
|
||||||
$.each(data,
|
|
||||||
function(index, item){
|
|
||||||
|
|
||||||
selected=""
|
|
||||||
if (item.default) {
|
|
||||||
selected = "selected"
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp += '<option value="' + item.id + '" ' + selected + ' >' + item.name + '</option>'
|
|
||||||
});
|
|
||||||
$('#model').html(tmp);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
task_select()
|
|
||||||
});
|
|
||||||
|
|
||||||
function task_select() {
|
function task_select() {
|
||||||
|
|
||||||
var task = $('#task').val();
|
var task = $('#task').val();
|
||||||
|
|
||||||
if (task < 3) {
|
if ((task != "ner") && (task != "bert-tokens")){
|
||||||
$('#model_select').hide()
|
$('#model_select').hide()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -44,10 +14,9 @@ function task_select() {
|
||||||
$("#legende").html("");
|
$("#legende").html("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function do_task(task, model_id, input_text) {
|
||||||
|
|
||||||
function do_task() {
|
var post_data = { "text" : input_text }
|
||||||
|
|
||||||
var input_text = $('#inputtext').val()
|
|
||||||
|
|
||||||
var text_region_html =
|
var text_region_html =
|
||||||
`<div class="card">
|
`<div class="card">
|
||||||
|
@ -55,7 +24,7 @@ function do_task() {
|
||||||
Ergebnis:
|
Ergebnis:
|
||||||
</div>
|
</div>
|
||||||
<div class="card-block">
|
<div class="card-block">
|
||||||
<div id="textregion" style="overflow-y:scroll;height: 65vh;"></div>
|
<div id="textregion" style="overflow-y:scroll;height: 55vh;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
|
|
||||||
|
@ -79,31 +48,45 @@ function do_task() {
|
||||||
|
|
||||||
$("#legende").html("");
|
$("#legende").html("");
|
||||||
|
|
||||||
var task = $('#task').val();
|
if (task == "fulltext") {
|
||||||
var model_id = $('#model').val();
|
$("#resultregion").html(text_region_html)
|
||||||
|
$("#textregion").html(input_text)
|
||||||
|
}
|
||||||
|
else if (task == "tokenize") {
|
||||||
|
|
||||||
// if (task == 2) {
|
$("#resultregion").html(spinner_html)
|
||||||
// $("#resultregion").html(spinner_html);
|
|
||||||
//
|
|
||||||
// $.get( "/digisam-tokenized/" + ppn,
|
|
||||||
// function( data ) {
|
|
||||||
// $("#resultregion").html(text_region_html)
|
|
||||||
// $("#textregion").html(data.text)
|
|
||||||
// }).fail(
|
|
||||||
// function() {
|
|
||||||
// console.log('Failed.')
|
|
||||||
// $("#resultregion").html('Failed.')
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
//
|
|
||||||
if (task == 3) {
|
|
||||||
|
|
||||||
$("#resultregion").html(spinner_html);
|
$.ajax(
|
||||||
|
{
|
||||||
|
url: "/tokenized",
|
||||||
|
data: JSON.stringify(post_data),
|
||||||
|
type: 'POST',
|
||||||
|
contentType: "application/json",
|
||||||
|
success:
|
||||||
|
function( data ) {
|
||||||
|
text_html = ""
|
||||||
|
data.forEach(
|
||||||
|
function(sentence) {
|
||||||
|
|
||||||
post_data = { "text" : input_text }
|
text_html += JSON.stringify(sentence)
|
||||||
|
|
||||||
console.log(post_data)
|
text_html += '<br/>'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
$("#resultregion").html(text_region_html)
|
||||||
|
$("#textregion").html(text_html)
|
||||||
|
$("#legende").html(legende_html)
|
||||||
|
}
|
||||||
|
,
|
||||||
|
error:
|
||||||
|
function(error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else if (task == "ner") {
|
||||||
|
|
||||||
|
$("#resultregion").html(spinner_html)
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: "/ner/" + model_id,
|
url: "/ner/" + model_id,
|
||||||
|
@ -141,43 +124,40 @@ function do_task() {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// $.post( "/ner/" + model_id, post_data).done(
|
|
||||||
// function( data ) {
|
|
||||||
//
|
|
||||||
// text_region_html = ""
|
|
||||||
// data.forEach(
|
|
||||||
// function(sentence) {
|
|
||||||
// sentence.forEach(
|
|
||||||
// function(token) {
|
|
||||||
// text_region_html += token.word + "(" + token.prediction + ") "
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
// )
|
|
||||||
//
|
|
||||||
// $("#resultregion").html(text_region_html)
|
|
||||||
// $("#textregion").html(data.text)
|
|
||||||
// $("#legende").html(legende_html)
|
|
||||||
// }).fail(
|
|
||||||
// function(a,b,c) {
|
|
||||||
// console.log('Failed.')
|
|
||||||
// $("#resultregion").html('Failed.')
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
// else
|
else if (task == "bert-tokens") {
|
||||||
//
|
$("#resultregion").html(spinner_html);
|
||||||
// if (task == 4) {
|
|
||||||
// $("#resultregion").html(spinner_html);
|
$.ajax(
|
||||||
//
|
{
|
||||||
// $.get( "/digisam-ner-bert-tokens/" + model_id + "/" + ppn,
|
url: "/ner-bert-tokens/" + model_id,
|
||||||
// function( data ) {
|
data: JSON.stringify(post_data),
|
||||||
// $("#resultregion").html(text_region_html)
|
type: 'POST',
|
||||||
// $("#textregion").html(data.text)
|
contentType: "application/json",
|
||||||
// }).fail(
|
success:
|
||||||
// function(a,b,c) {
|
function( data ) {
|
||||||
// console.log('Failed.')
|
text_html = ""
|
||||||
// $("#resultregion").html('Failed.')
|
data.forEach(
|
||||||
// });
|
function(sentence) {
|
||||||
// }
|
sentence.forEach(
|
||||||
|
function(part) {
|
||||||
|
|
||||||
|
if (text_html != "") text_html += ' '
|
||||||
|
|
||||||
|
text_html += part.token + "(" + part.prediction + ")"
|
||||||
|
})
|
||||||
|
text_html += '<br/>'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
$("#resultregion").html(text_region_html)
|
||||||
|
$("#textregion").html(text_html)
|
||||||
|
$("#legende").html(legende_html)
|
||||||
|
}
|
||||||
|
,
|
||||||
|
error:
|
||||||
|
function(error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -35,10 +35,10 @@
|
||||||
<div class="form-group row ml-2">
|
<div class="form-group row ml-2">
|
||||||
<label for="task" class="col-sm-2 col-form-label">Task:</label>
|
<label for="task" class="col-sm-2 col-form-label">Task:</label>
|
||||||
<select id="task" class="selectpicker col-md-auto" onchange="task_select()">
|
<select id="task" class="selectpicker col-md-auto" onchange="task_select()">
|
||||||
<option value="1">OCR-Text aus ALTO Datei</option>
|
<option value="fulltext">OCR-Text aus ALTO Datei</option>
|
||||||
<option value="2">Wort- und Satztokenisierung</option>
|
<option value="tokenize">Wort- und Satztokenisierung</option>
|
||||||
<option value="3" selected>Named Entity Recognition</option>
|
<option value="ner" selected>Named Entity Recognition</option>
|
||||||
<option value="4">BERT Tokens</option>
|
<option value="bert-tokens">BERT Tokens</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row ml-2" id="model_select">
|
<div class="form-group row ml-2" id="model_select">
|
||||||
|
@ -72,6 +72,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<script src="js/ner.js"></script>
|
||||||
<script src="js/ner-ds-sbb.js"></script>
|
<script src="js/ner-ds-sbb.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
Loading…
Add table
Add a link
Reference in a new issue