OpenNLP: что я пропускаю или делаю неправильно? - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь обучить новую пользовательскую модель 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);
}
}

Помощь очень ценится! Спасибо!

...