java - 在 mallet 中为我的数据集创建自定义模式

标签 java regex topic-modeling mallet

我在java中使用Mallet 2.0.7来挖掘推文。 根据文档,对于主题建模,我必须使用 CsvIterator 读取数据集。

Reader fileReader = new InputStreamReader(new FileInputStream(new File(args[0])), "UTF-8");
    instances.addThruPipe(new CsvIterator (fileReader, Pattern.compile("^(\\S*)[\\s,]*(\\S*)[\\s,]*(.*)$"),
                                           3, 2, 1)); // data, label, name fields

我的数据集如下:行,x,位置,用户名,主题标签,文本,转发,日期, Collection 夹,评论数

对于标签,我添加了 x 列。第一次,我想在文本 (6) 列中运行算法,后来又添加了另一列。我写了这个模式,但它没有按预期工作,它获取第 6 列直到最后一个数据。如何更改模式的正则表达式?

 Reader fileReader = new InputStreamReader(new FileInputStream(new File(filePath)), "UTF-8");
    instances.addThruPipe(new CsvIterator(fileReader,
            Pattern.compile("^(\\S*)[\\s,]*(\\S*)[\\s,]*(\\S*)[\\s,]*(\\S*)[\\s,]*(\\S*)[\\s,]*(.*)$"),
            6, 2, 1)); // data, label, name fields

最佳答案

查找正则表达式文档以了解模式中每个元素的含义。原始模式将整行分为三组:从开头到第一个逗号或空格的所有字符,直到第二个逗号或空格的所有字符,然后是其他所有字符。

新模式的作用相同,但捕获了六个组。这就是为什么您可以获得从文本到行尾的所有内容。

我建议一些修复:

  • 如果某个字段不相关,例如 label,您可以仅使用 0 来指定它不存在。您不需要添加虚拟字段。

  • () 中的任何内容都是捕获组。如果您不想包含某个字段,请不要捕获它。只需删除括号但保留模式即可。

  • 原始模式之所以有效,是因为我们可以对名称和标签字段做出假设:它们不包含逗号或空格,并且后面的所有内容都是文本。要捕获行中间的字段,您需要更加小心。您必须找到文本字段的末尾。我强烈建议使用制表符分隔字段,假设没有字段包含制表符。

尝试这样的事情(测试过):

// row,x,location,username,hashtaghs,text,retweets,date,favorites,numberOfComment
Reader fileReader = new InputStreamReader(new FileInputStream(new File(filePath)), "UTF-8");
instances.addThruPipe(new CsvIterator(fileReader,
        Pattern.compile("^(\d+)\t[^\t]*\t[^\t]*\t[^\t]*\t([^\t]*)\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*$"),
        2, 0, 1)); // data, label, name fields

关于java - 在 mallet 中为我的数据集创建自定义模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46807303/

相关文章:

java - Java for循环与while循环性能差异?

python - 使用正则表达式从 JSON 中删除字符串中的 Unicode\uxxxx

r - R lda 包中 lda.collapsed.gibbs.sampler 命令的输出

topic-modeling - Mallet 主题模型 - 结果与序列化文件不一致

python-3.x - 如何解释 LDA 组件(使用 sklearn)?

javascript - 休息服务 骚扰电话

java - 使用 Apache CXF DOSGi 进行身份验证和 session 管理

java - 构造二叉树时处理重复项

c++ - C++ 中的多行正则表达式

javascript - 检测字符串中是否包含引号并且该引号中是否包含逗号