java - OpenNLP - 对字符串数组进行标记

标签 java apache nlp opennlp

我正在尝试使用 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 吗?如果它实际上是一个纯文本文件,那么你用逗号分割文本并将这些 block 提供给 Opennlp,它的性能可能会更差,因为它的模型是在正常句子上训练的,而不是像你的那样分割。

关于java - OpenNLP - 对字符串数组进行标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28634321/

相关文章:

java - 我想将 String 解析为 java 日期对象

python - NLTK - 在没有 Downloader UI 的情况下从命令行下载除 corpara 之外的所有 nltk 数据

machine-learning - 如何使用 MLE 来训练 n-gram 模型?

mysql - 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器

java - 如何为 Sling Resource 实现自定义 AdapterFactory?

python - spacy中模型最佳和模型最后之间的差异

java - 将邮件从收件箱移动到垃圾文件夹的算法

java - 如何在没有用户确认的情况下以编程方式设置可发现时间?

java删除列表中的反向字符串

php - 为什么 preg_match_all 会破坏此正则表达式?