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

时间:2015-01-13 17:04:25

标签: machine-learning nlp topic-modeling text-analysis mallet

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

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

2 个答案:

答案 0 :(得分:7)

来自documentation

  

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

     

如果您有

形式的数据      

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

您感兴趣的电话是

CsvIterator(java.io.Reader input, java.lang.String lineRegex, 
            int dataGroup, int targetGroup, int uriGroup) 

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

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

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

test1 spam Wanna buy viagra?
test2 not-spam Hello, are you busy on Sunday?

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

答案 1 :(得分:0)

上面给出的解释太好了。

然而,缺少一点。行正则表达式中输入实例的每个数据,标签和名称字段的正则表达式(正则表达式)序列需要与输入文件中提供实例的方式相对应,即,如果您提供名称作为第一个字段,数据作为输入文件中的第二个字段和标签为第3个字段,您必须首先提供名称的正则表达式,然后是数据的正则表达式,然后是标签的最后一个正则表达式。示例如下所示:

输入实例:Mail67(标签空间)TCC问题。您好,由于某种原因,Old Master Paintings部门的管理员无法从TCC获取信息。它似乎正在通过JDE,但在TCC上搜索时没有任何内容。您可以提供的任何帮助或指导....(标签空间)公司

CsvIterator参数:CsvIterator(新的FileReader(文件路径),"(\ w +)\ t(。*)\ t \ t(\ w +)",2,3,1)