package com.example.dell.apacheopennlp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import java.io.IOException; import java.io.InputStream; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.Span; public class apacheOpenNLP extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_apache_open_nlp); final TextView txt = (TextView) findViewById (R.id.txtView); InputStream inputStream = null; TokenizerModel tokenModel =null; try{ inputStream = getAssets().open("en-token.bin"); tokenModel = new TokenizerModel (inputStream); inputStream.close(); } catch (IOException e) { e.printStackTrace(); txt.setText (e.toString ()+" inside catch of token"); } if(tokenModel!=null) { TokenizerME tokenizer = new TokenizerME (tokenModel); String paragraph = "Tutorialspoint is located in Hyderabad"; String tokens[] = tokenizer.tokenize (paragraph); InputStream locationInputStream=null; TokenNameFinderModel locationModel = null; try { locationInputStream = getAssets ( ).open ("en-ner-location.bin"); locationModel = new TokenNameFinderModel (locationInputStream); } catch (IOException e) { e.printStackTrace ( ); txt.setText (e.toString ()+" inside catch of location"); } if (locationModel != null) { NameFinderME nameFinder = new NameFinderME (locationModel); Span nameSpans[] = nameFinder.find (tokens); String result = null; for (Span s : nameSpans) //result= s.toString()+" "+tokens[s.getStart()]; result += s.toString ( ); txt.setText (result); } else{ // txt.setText ("Location model is empty"); } } } }
Я использую apache OpenNLP для извлечения местоположения в предложении.Я отладил код и обнаружил, что после NameFinderME nameFinder = new NameFinderME (locationModel);сбой приложения Android с сообщением «Приложение перестало работать» Как решить эту проблему?
Можете ли вы попробовать изменить nameFinder, который будет объявлен как тип интерфейса TokenNameFinder?
Просто попробуйте заменить
NameFinderME nameFinder = null
на
TokenNameFinder nameFinder = null
Остальное все должнобыть таким же.