首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mahout TFIDF字典文件

Mahout TFIDF字典文件
EN

Stack Overflow用户
提问于 2012-03-14 01:39:21
回答 2查看 2.9K关注 0票数 2

我正在尝试对一组文档(作为文本文件)执行TFIDF,使用mahout to do to calculations,遵循this guide

我已经成功地创建了字典和向量权重,现在正在尝试访问输出。在指南中,它说您“可以轻松地将生成的字典文件的内容加载到Map中,并将令牌索引作为键,将令牌作为值。”

我不确定如何像他建议的那样将这个文件加载到地图中,有人知道是怎么做的吗?

我从一个文本文件目录创建了我的向量,这是我在运行"./mahout seq2sparse...“时遇到的一个问题。是控制分析器的-a标志--应该是lucene的StandardAnalyzer。当尝试使用这个标志运行时,我收到了一个ClassNotFoundException,但是删除这个标志解决了这个问题,我认为默认的分析器也是这个,因此输出应该与示例相同。

如果有人知道如何将这本字典加载到地图中,我将永远感激!

詹姆斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-15 05:06:36

我解决了这个问题,所以我把这个放在google上给任何遇到这个问题的人。

代码语言:javascript
复制
        SequenceFile.Reader read = new SequenceFile.Reader(fs, new Path("<path do dictionary>"), conf);
        IntWritable dicKey = new IntWritable();
        Text text = new Text();
        Map<Integer, String> dictionaryMap = new HashMap();
        while (read.next(text, dicKey)) {
            dictionaryMap.put(Integer.parseInt(dicKey.toString()), text.toString());
        }
        read.close();

这对我很有效,允许我从mahout读取我的字典文件中id到文本的映射。

票数 6
EN

Stack Overflow用户

发布于 2015-06-13 04:48:42

由于上面的代码缺少编译它所需的import语句等,因此这里是一个更完整的版本,它从命令行读取和转储dict文件的输出

dumpdict.java:

代码语言:javascript
复制
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;

class DumpDict {
  public static void main(String[] args) {
    try {
      Configuration conf = new Configuration();
      FileSystem fs = FileSystem.get(conf);
      SequenceFile.Reader read = new SequenceFile.Reader(fs, new Path(args[0]), conf);
      IntWritable dicKey = new IntWritable();
      Text text = new Text();
      // HashMap dictionaryMap = new HashMap();
      while (read.next(text, dicKey)) {
        // dictionaryMap.put(Integer.parseInt(dicKey.toString()), text.toString());
        System.out.println(dicKey.toString()+" "+text.toString());
      }
      read.close();
    } catch (IOException e) {
      System.out.println(e.toString());
    }
  }
}

我发现有必要显式地告诉java所有的jar文件都在哪里:

代码语言:javascript
复制
export CLASSPATH=`find /path/to/mahout /usr/share/java -name '*.jar' | perl -ne 'chomp; push @jars, $_; END { print "\".:",(join ":",@jars),"\$CLASSPATH\"\n"; }'`

像这样编译:

代码语言:javascript
复制
javac dumpdict.java

像这样运行:

代码语言:javascript
复制
java -cp .:$CLASSPATH DumpDict {path to dict}

(对于使用java的人来说,这可能有些过头了,但对于我们这些不经常使用java的人来说,这可能会节省时间。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9689156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档