美文网首页
text2UCI工具

text2UCI工具

作者: yxwithu | 来源:发表于2017-08-15 14:06 被阅读0次

将文档的分词结果转化为非严格的UCI格式,即没有前三行的统计信息,因为这三行在LightLDA中没有使用到。
分词后结果的格式
doc1seqword1 word2 word3...
doc2seqword2 word3...
doc3seqword2 word3
seq是自定义的分割符,分割文档名和文档内容的分词结果,作为参数传入函数

/**
 * 将文本文件转化为UCI模式
 * @param seq  文档与分词结果的分隔符
 * @param filePath input 文本路径
 * @param docwordPath  output 转化后的文档信息存放路径
 * @param vocabPath    output 转化后的词汇信息存放路径
 * @throws Exception
 */
public static void text2UCI(String seq, String filePath, String docwordPath, String vocabPath) throws Exception{
    //先将分词结果中的各个词打乱赋予id存放到单词表中
    //再对文档进行处理
    //文档需要根据文档id排序,wordid从1开始
    //单词不能有空格或tab
    BufferedReader br = new BufferedReader(new FileReader(filePath));
    BufferedWriter vocab_bw = new BufferedWriter(new FileWriter(vocabPath));
    BufferedWriter doc_bw = new BufferedWriter(new FileWriter(docwordPath));

    HashSet<String> vocabs = new HashSet<>();

    String doc = null;
    while((doc = br.readLine()) != null){
        doc = doc.split(seq)[1];
        doc = doc.trim();
        if(doc.length() == 0){
            continue;
        }
        String[] words = doc.split(" +");  //按空格分组
        for(String word : words){
            vocabs.add(word);
        }
    }
    br.close();

    List<String> vocab_list = new ArrayList<>(vocabs);
    HashMap<String, Integer> vocab_id = new HashMap<>();
    int id = 1;
    for(String token : vocab_list){
        vocab_id.put(token, id++);
        vocab_bw.write(token);
        vocab_bw.newLine();
        vocab_bw.flush();  //写入到词汇表文件
    }
    vocab_bw.close();

    //防止文件过大,就不用mark和reset了
    br = new BufferedReader(new FileReader(filePath));
    int doc_id = 1;  //从1开始
    while((doc = br.readLine()) != null){
        doc = doc.split(seq)[1];
        doc = doc.trim();
        if(doc.length() == 0) continue;

        String[] words = doc.split(" +");  //按空格分组
        int[] ids = new int[words.length];
        for(int i = 0; i < words.length; ++i){
            ids[i] = vocab_id.get(words[i]);  //存放id
        }
        Arrays.sort(ids);
        HashMap<Integer, Integer> id_cnt = new HashMap<>();
        for(int word_id : ids){
            int value = id_cnt.containsKey(word_id) ? id_cnt.get(word_id) + 1 : 1;
            id_cnt.put(word_id, value);     //更新值
        }
        StringBuilder doc_info = new StringBuilder();
        doc_info.append(doc_id).append(" ").append(ids[0]).append(" ").append(id_cnt.get(ids[0])).append("\n");
        for(int i = 1; i < ids.length; ++i){
            if(ids[i] == ids[i-1]){
                continue;
            }
            doc_info.append(doc_id).append(" ").append(ids[i]).append(" ").append(id_cnt.get(ids[i])).append("\n");
        }
        doc_bw.write(doc_info.toString());
        doc_bw.flush();
        doc_id++;
    }
    br.close();
    doc_bw.close();

    System.out.println("vocab size : " + vocab_list.size());
    System.out.println("doc size: " + (doc_id - 1));
}

相关文章

  • text2UCI工具

    将文档的分词结果转化为非严格的UCI格式,即没有前三行的统计信息,因为这三行在LightLDA中没有使用到。分词后...

  • 工具工具还是工具

    最近几天参加了一个数据分析的训练营,每天晚上8点钟开始,一直讲到10点多,老师很卖力,干货也很多。今天结营,就在这...

  • 2019-01-08 ps总结

    ps 抠图工具 套索工具 多边套索工具 文字工具 磁性套索工具 魔棒工具 渐变工具 蒙版 图章工具 alt 吸取颜...

  • 【工具箱-2-选区工具】

    【工具箱-2-选区工具】 【矩形选框工具组:】矩形选框工具、椭圆选框工具、单行选框工具、单列选框工具。 个人理解:...

  • AI 2019 Mac版常用快捷键大全

    移动工具:V 选取工具:A 钢笔工具:P 添加锚点工具:+ 删除锚点工具:- 文字工具:T 多边形工具:L 矩形、...

  • PS扣图

    1扣图工具 套索工具 多边套索工具 磁性套索工具 快速选择工具 魔棒工具 橡皮擦工具 背景橡皮擦工具 魔术橡皮擦工...

  • AI热键

    选择工具:v 直接选择工具:a 魔棒工具:y 套索工具:q 钢笔工具:p 转换描点工具:Ctrl+c 文字工具:t...

  • 工具?工具人?

    很多时候,我们发明工具的目的是方便工作,结果,适得其反,不仅没有方便,反而增添了工作量。原来往上级交个什么东西,都...

  • 工具的工具

    “一个人越是能够放弃一些东西,越是富有。”-《瓦尔登湖》 当人真正占有一些东西的时候,就成了它们的奴隶,尤其是那些...

  • 去觉知去用你的工具

    去觉知去用你的工具 在空性里, 身体是工具 思想是工具 情绪是工具 情感是工具 人性是工具 …… 发现这些工具 去...

网友评论

      本文标题:text2UCI工具

      本文链接:https://www.haomeiwen.com/subject/ceamrxtx.html