2015-02-20 1 views
0

Я пытаюсь tokenize текстовый файл с использованием OpenNLP tokenizer. Что я делаю, я читаю в .txt-файле и сохраняю его в списке, хочу перебирать по каждой строке, маркерную линию и записывать токенизированную строку в новый файл.OpenNLP - Tokenize Array of Strings

В строке:

tokens[i] = tokenizer.tokenize(output[i]); 

я получаю:

Type mismatch: cannot convert from String[] to String 

Это мой код:

public class Tokenizer { 

    public static void main(String[] args) throws Exception { 

    InputStream modelIn = new FileInputStream("en-token-max.bin"); 

    try { 


     TokenizerModel model = new TokenizerModel(modelIn); 
     Tokenizer tokenizer = new TokenizerME(model); 

     CSVReader reader = new CSVReader(new FileReader("ParsedRawText1.txt"),',', '"', 1); 
     String csv = "ParsedRawText2.txt"; 
     CSVWriter writer = new CSVWriter(new FileWriter(csv),CSVWriter.NO_ESCAPE_CHARACTER,CSVWriter.NO_QUOTE_CHARACTER); 

     //Read all rows at once 
     List<String[]> allRows = reader.readAll(); 

     for(String[] output : allRows) { 
      //get current row 
      String[] tokens=new String[output.length]; 
      for(int i=0;i<output.length;i++){ 

       tokens[i] = tokenizer.tokenize(output[i]); 
       System.out.println(tokens[i]); 
      } 

      //write line 
      writer.writeNext(tokens); 
     } 
     writer.close(); 

    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    finally { 
     if (modelIn != null) { 
     try { 
      modelIn.close(); 
     } 
     catch (IOException e) { 
     } 
     } 
    } 
    } 
    } 

Кто-нибудь имеет какие-либо идеи, как выполнить эту задачу?

ответ

1

Как компилятор говорит, вы пытаетесь назначить массив строк (результат tokenize()) на String (tokens[i] - это строка). Таким образом, вы должны объявить и использовать tokens внутри внутреннего цикла и писать маркеры [] там тоже:

for (String[] output : allRows) { 
     // get current row 
     for (int i = 0; i < output.length; i++) { 
      String[] tokens = tokenizer.tokenize(output[i]); 
      System.out.println(tokens); 

      // write line 
      writer.writeNext(tokens); 
     } 
    } 
    writer.close(); 

Btw, вы уверены, что ваш исходный файл является CSV? Если на самом деле это обычный текстовый файл, вы разделяете текст запятыми и даете такие куски Opennlp, и это может ухудшиться, потому что его модель была обучена нормальным предложениям, а не разделялась как ваша.

+0

Эй, Никита, я понимаю, что ты сказал мне, но не может это исправить. Можете ли вы написать мне, как вы думали, что это должно быть? Спасибо! – Max

+0

Я добавил пример кода. Это то, что вы пытались сделать? –

+0

Да, спасибо! – Max