csvIterator的参数在Mallet中意味着什么?

Lon*_*guy 4 nlp machine-learning text-analysis mallet topic-modeling

我正在使用mallet主题建模示例代码,虽然它运行正常,但我想知道这个语句的参数究竟是什么意思?

instances.addThruPipe(new CsvIterator(new FileReader(dataFile),
                                      "(\\w+)\\s+(\\w+)\\s+(.*)",
                                      3, 2, 1)  // (data, target, name) field indices                    
                     );
Run Code Online (Sandbox Code Playgroud)

mba*_*rov 7

文档:

这个迭代器,可能更恰当地称为Line Pattern Iterator,它读取文件并根据正则表达式返回每行一个实例.

如果您有表格的数据

[姓名] [标签] [数据]

你感兴趣的电话是

CsvIterator(java.io.Reader input, java.lang.String lineRegex, 
            int dataGroup, int targetGroup, int uriGroup) 
Run Code Online (Sandbox Code Playgroud)

第一个参数是如何读入数据,如文件阅读器或字符串阅读器.第二个参数是正则表达式,用于从读取器读取的每一行中提取数据.在您的示例中,您有(\\w+)\\s+(\\w+)\\s+(.*)哪些转换为:

  • 1个或多个字母数字字符(捕获组,这是实例的名称),后跟
  • 1个或多个空格字符(制表符,空格,..),后跟
  • 1个或多个字母数字字符(捕获组,这是标签/目标),后跟
  • 1个或多个空格字符(制表符,空格,..),后跟
  • 0个或更多字符(这是数据)

数字3, 2, 1表示数据是最后一个,目标是第二个,名称是第一个.正则表达式基本上确保每行的格式如文档中所述:

test1 spam Wanna buy viagra?
test2 not-spam Hello, are you busy on Sunday?
Run Code Online (Sandbox Code Playgroud)

CsvIterator 是一个可怕的名称,因为它实际上不是此类读入的逗号分隔值,而是空格分隔(空格,制表符,...)值.