2014-05-18 4 views
1

Je suis en train de former fichier en-NER-location.bin utilise opennlp en Java La chose est que je suis le fichier texte de formation dans le format suivant <START:location> Fontana <END> <START:location> Palo Verde <END> <START:location> Picacho <END>incapable de former location.bin en utilisant opennlp avec java

et i formé le fichier en utilisant le code suivant

import java.io.BufferedOutputStream; 
    import java.io.BufferedReader; 
    import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.FileOutputStream; 
    import java.io.FileReader; 
    import java.io.IOException; 
    import java.io.InputStream; 
    import java.nio.charset.Charset; 
    import java.util.Collections; 
    import opennlp.tools.namefind.NameFinderME; 
    import opennlp.tools.namefind.NameSample; 
    import opennlp.tools.namefind.NameSampleDataStream; 
    import opennlp.tools.namefind.TokenNameFinderModel; 
    import opennlp.tools.tokenize.Tokenizer; 
    import opennlp.tools.tokenize.TokenizerME; 
    import opennlp.tools.tokenize.TokenizerModel; 
    import opennlp.tools.util.ObjectStream; 
    import opennlp.tools.util.PlainTextByLineStream; 
    import opennlp.tools.util.Span; 

    public class TrainNames { 
@SuppressWarnings("deprecation") 
public void TrainNames() throws IOException{ 
    File fileTrainer=new File("citytrain.txt"); 
    File output=new File("en-ner-location.bin"); 
    ObjectStream<String> lineStream = new PlainTextByLineStream(new FileInputStream(fileTrainer), "UTF-8"); 
    ObjectStream<NameSample> sampleStream = new NameSampleDataStream(lineStream); 
    System.out.println("lineStream = " + lineStream); 
    TokenNameFinderModel model = NameFinderME.train("en", "location", sampleStream, Collections.<String, Object>emptyMap(), 1, 0); 

    BufferedOutputStream modelOut = null; 
    try { 
     modelOut = new BufferedOutputStream(new FileOutputStream(output)); 
     model.serialize(modelOut); 
    } finally { 
     if (modelOut != null) 
      modelOut.close(); 
    } 
} 
    } 

Je suis pas d'erreurs ou des avertissements, mais lorsque je tente d'obtenir un nom de ville d'une chaîne comme celui-ci cnt = "John envisage de se spécialiser en génie électrique en UC Fontana et poursuivre une carrière chez IBM. "; Il renvoie toute la chaîne n'importe qui pourrait me dire pourquoi ... ??

Répondre

0

Bienvenue sur SO! Il semble que vous ayez besoin de plus de contexte autour de chaque annotation d'emplacement. Je crois qu'actuellement openNLP pense que vous l'entraînez pour trouver des mots (n'importe quel mot) parce que vos données d'entraînement n'ont qu'un seul mot. Vous devez annoter des emplacements dans des phrases entières et vous aurez besoin d'au moins quelques centaines d'échantillons pour commencer à voir de bons résultats.

Voir cette réponse ainsi: How I train an Named Entity Recognizer identifier in OpenNLP?

+0

salut j'ai changé le fichier de formation comme vous le suggérez et i inclus 100 phrases containng le nom de la ville et les tagué mais aussi il ne fonctionne pas .... où pensez vous J'ai mal fait – user3649086

+0

essayez de changer votre appel à .train ci-dessus à ceci: TokenNameFinderModel model = NameFinderME.train ("en", "location", sampleStream, null); – markg

Questions connexes