我正在使用mallet主题建模示例代码,虽然它运行正常但我想知道这个语句的参数究竟是什么意思?
instances.addThruPipe(new CsvIterator(new FileReader(dataFile),
"(\\w+)\\s+(\\w+)\\s+(.*)",
3, 2, 1) // (data, target, name) field indices
);
答案 0 :(得分:7)
这个迭代器,可能更恰当地称为Line Pattern Iterator,它读取文件并根据正则表达式返回每行一个实例。
如果您有
形式的数据[姓名] [标签] [数据]
您感兴趣的电话是
CsvIterator(java.io.Reader input, java.lang.String lineRegex,
int dataGroup, int targetGroup, int uriGroup)
第一个参数是如何读入数据,如文件阅读器或字符串阅读器。第二个参数是正则表达式,用于从读取器读取的每一行中提取数据。在您的示例中,您有(\\w+)\\s+(\\w+)\\s+(.*)
转换为:
数字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)