OpenNLP - 标记字符串数组

OpenNLP - Tokenize an Array of Strings

我正在尝试使用 OpenNLP 分词器对文本文件进行分词。 我所做的是,我读取了一个 .txt 文件并将其存储在一个列表中,想要遍历每一行,标记该行并将标记化的行写入一个新文件。

行中:

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) {
        }
      }
    }
   }
  }

有人知道如何完成这个任务吗?

正如编译器所说,您尝试将字符串数组(tokenize() 的结果)分配给字符串(tokens[i] 是一个字符串)。所以你应该在内循环中声明和使用 tokens 并在那里写 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();

顺便说一句,您确定您的源文件是 csv 文件吗?如果它实际上是一个纯文本文件,那么你用逗号分割文本并将这些块交给 Opennlp,它的性能可能会更差,因为它的模型是在普通句子上训练的,而不是像你的那样分割。