Я пытаюсь создать экземпляр наивного байесовского классификатора для классификации текстовых блоков (с заранее определенной классификацией). Пример ниже просто пытается сделать это с мужчиной/женщиной. Я попытался загрузить данные из файла (CSVloader) и создать экземпляры ниже. Проблема в том, что метод train.train() выдает исключение нулевого указателя. Кажется, это потому, что targetDictionary имеет значение null. Словарь данных заполнен. Как заставить targetDictionary заполнить экземпляр?
Моя фактическая цель - классифицировать бумажные рефераты, которые у меня есть в базе данных, как «Науку, политику, право, здоровье и т. Д.». Похоже, что байесовский классификатор является правильным выбором для этого.
Я повторил загруженный instanceList, и он, кажется, заполнен правильно, и dataDictionary заполнен, но TargetDictionary имеет значение null.
Использование Mallet 2.0.8 в Windows
public TestMallet() throws IOException {
ArrayList<Pipe> pipelist = new ArrayList<Pipe>();
pipelist.add (new CharSequenceLowercase() ) ;
pipelist.add (new CharSequence2TokenSequence(Pattern.compile("\\p{L}[\\p{L}\\p{P}]+\\p{L}")) ) ;
pipelist.add (new TokenSequenceRemoveStopwords (new File ("c:\\test\\config\\stopwords_en.txt"), "UTF-8", false, false, false) ) ;
pipelist.add (new TokenSequence2FeatureSequence()) ;
pipelist.add (new FeatureSequence2FeatureVector()) ; // Added but doesnt make any difference
InstanceList instances = new InstanceList (new SerialPipes(pipelist)) ;
Instance instance0 = new Instance("Hello World I am here and i am male my name is roger", "Male", "roger", "test") ;
Instance instance1 = new Instance("Hello World I am here and i am male my name is phil", "Male", "phil", "test") ;
Instance instance2 = new Instance("Hello World I am here and i am male my name is joe", "Male", "joe", "test") ;
Instance instance3 = new Instance("Hello World I am here and i am female my name is vira", "Female", "vira", "test") ;
Instance instance4 = new Instance("Hello World I am here and i am female my name is josie", "Female", "josie", "test") ;
instances.addThruPipe (instance0) ;
instances.addThruPipe (instance1) ;
instances.addThruPipe (instance2) ;
instances.addThruPipe (instance3) ;
instances.addThruPipe (instance4) ;
// Using Instance List to train
// ----------------------------
ClassifierTrainer trainer = new NaiveBayesTrainer();
trainer.train(instances);
// Null pointer exception here ( debugging, it looks like TargetDictionary is null)
}
Ожидая, что тренер правильно проанализирует.