如何解析 CSV 文件,以便可以被 Mahout 分类

Posted

技术标签:

【中文标题】如何解析 CSV 文件,以便可以被 Mahout 分类【英文标题】:How to parse a CSV file so that can be classified by Mahout 【发布时间】:2014-07-25 05:56:41 【问题描述】:

我正在尝试使用 Mahout 对 CSV 文件进行分类,我的理解是,首先我需要将 CSV 中的数据转换为向量,然后可以由其中一种 mahout 分类算法使用。我的 CSV 文件包含文本和类似单词的值以及多个类。

我在这里搜索并找到了一些关于如何执行此操作的模糊解释,但找不到任何示例。谁能提供一个简单的例子来说明如何做到这一点?或者是否有任何实用程序可以为您执行此操作?

我以为这将是一项非常常见的任务,但实际上找不到任何明确的例子。

任何帮助将不胜感激。

【问题讨论】:

显然CSVVectorIterator 迭代一个CSV文件并产生org.apache.mahout.math.Vector 【参考方案1】:

你有一些文本和类似单词的价值,所以你应该使用 20 个新闻组的例子来获得灵感。这是一个很好的示例,您可以轻松地从中复制带有 csv 文件的代码。

这是 20 新闻组最新版本的 mahout 的工作链接:

https://github.com/jpatanooga/MahoutExamples/blob/master/src/main/java/com/cloudera/mahout/classification/sgd/TwentyNewsgroups.java

countWords 方法只是根据 TokenSream 对象的变化进行了调整,这是最新版本 Mahout 的工作代码:

private static void countWords(Analyzer analyzer, Collection<String> words, Reader in) throws IOException 

        // use the provided analyzer to tokenize the input stream
        TokenStream ts = analyzer.tokenStream("text", in);
        ts.addAttribute(CharTermAttribute.class);
        ts.reset();

        // for each word in the stream, minus non-word stuff, add word to collection
        while (ts.incrementToken()) 
            String s = ts.getAttribute(CharTermAttribute.class).toString();
            words.add(s);
        
        ts.end();
        ts.close();

        /*overallCounts.addAll(words);*/
     

希望对你有所帮助。我用这个例子来适应一个 CSV 文件并且它有效。

【讨论】:

谢谢。只是一个问题,您使用什么方法来读取 csv 文件,一些 mahout 库,例如 CSVVectorIterator ?还是您编写了自己的 csv 阅读器?谢谢。 我更喜欢使用普通的 csv 阅读器,我在其中逐行读取每个输入并将其添加到 mahout 向量中。我认为这不是最优化的解决方案,您可以尝试使用 mahout 库。

以上是关于如何解析 CSV 文件,以便可以被 Mahout 分类的主要内容,如果未能解决你的问题,请参考以下文章

Python:忽略文本文件的注释,该文本文件被解析为字典以写入 CSV [重复]

Apache Mahout 中的矢量化

使用 R 解析出 Surveymonkey csv 文件

在 android 中获取和解析 CSV 文件

mahout 随机森林RF算法

干货基于 Mahout 和 Elasticsearch 推荐引擎组件解析