Я пытаюсь обучить новую пользовательскую модель OpenNLP NER для использования в моем Android приложении. Используя cmd я обучил 377 лиц. Результат: Training data summary:
#Sentences: 15377
#Tokens: 322432
#grocery entities: 377
Я использовал 15 тысяч предложений Engli sh от корпорации OpenNLP. Я добавил свои 300 предложений с помощью START: продуктовый Xxxx END с тегами. Я перетасовал свои предложения. Я убедился, что все сущности начинаются с заглавной буквы, а остальные строчными буквами. Однако, когда я использую свой класс NLP, который должен выбирать эти объекты из текста OCR, ничего не отображается. Что я делаю неправильно? Это слишком мало сущностей? Будет ли достаточно пометки раз? Или я должен пометить его каждый раз, когда упоминается сущность? Что еще мне нужно сделать? Мне нужно только выбрать объект и показать его на экране. Мой код должен работать. Позвольте мне также включить это здесь:
public class NLP extends Activity {
TextView textView, header, secondHeader, name_output;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nlp);
header = findViewById(R.id.nlp_text);
secondHeader = findViewById(R.id.text_name);
name_output = findViewById(R.id.output);
textView = findViewById(R.id.ocr_text);
Intent intent = getIntent();
String nlp_text = intent.getStringExtra(Intent.EXTRA_TEXT);
assert nlp_text != null;
nlp_text = nlp_text.replace("-", "");
nlp_text = nlp_text.replace(".", "");
nlp_text = nlp_text.replace(",", "");
nlp_text = nlp_text.replace("\n", " ");
AssetManager assetManager = getAssets();
InputStream in_name;
InputStream in_token;
try {
in_token = assetManager.open("en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(in_token);
TokenizerME tokenizer = new TokenizerME(tokenModel);
String[] tokens = tokenizer.tokenize(nlp_text);
in_name = assetManager.open("en-ner-groc.bin");
TokenNameFinderModel model_name = new TokenNameFinderModel(in_name);
NameFinderME nameFinder_name = new NameFinderME(model_name);
Span[] nameSpans1 = nameFinder_name.find(tokens);
for (Span s : nameSpans1) {
for (int index = s.getStart(); index < s.getEnd(); index++) {
name_output.setText(tokens[index] + " ");
}
}
} catch (Exception ex) {
Log.e("NLP", "message: " + ex.getMessage(), ex);
}
textView.setText(nlp_text);
}
}
Помощь очень ценится! Спасибо!