java读取中文分词工具(2)

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

/*
 * 文件格式:已分词的中文文本,每个词语空格分割,每行一个段落。
 * 这个类适合读取每行数量较少的文本,比如分好段落的文本,一个段落一行存储。
 * 读取一行,步长为1,返回词组。不会跨段落生成词组。
 * 两种模式:
 * 1 读到文件末尾,结束
 * 2 读到文件末尾,从头再来
 */
public class WordReader
{
	static final int normalMode = 0;
	static final int againMode = 1;
	int currentMode = 0;

	BufferedReader br=null;
	ArrayList<String> paraWords = null;

	StringTokenizer tokenizer;
	int currentPara = 0;
	int paraPos = 0;
	public  WordReader(String fileName) throws IOException
	{
		File file=new File(fileName);
		br=new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf-8"));
		br.mark((int)file.length()+1);
		paraWords = new ArrayList<String>();
	}	

	private boolean readPara() throws IOException
	{
		//if(currentPara>614005+10) return false;
		String line = br.readLine();
		if(line == null)//到文件末尾了
		{
			if(currentMode == normalMode)
			{
				return false;
			}
			else
			{
				br.reset();//从头再来
				return readPara();
			}
		}
		paraWords.clear();
		tokenizer= new StringTokenizer(line," ");
		while(tokenizer.hasMoreTokens())
		{
			paraWords.add(tokenizer.nextToken());
		}
		currentPara++;
		paraPos = 0;
		return true;
	}

	public String[] getNextWords(int count) throws IOException
	{
		if(paraPos+count >= paraWords.size())//到了段落末尾,读取新的段落
		{
			if(readPara())
				return getNextWords(count);
			else return null;
		}
		String[] words = new String[count];
		for(int i=0;i<count;i++)
		{
			words[i] = paraWords.get(paraPos+i);
		}
		paraPos++;
		return words;
	}

	public static void main(String[] args) throws IOException
	{
		// TODO Auto-generated method stub
		WordReader wordReader = new WordReader("/home/linger/sources/ParaModel/electronic_seg.txt");
		//wordReader.currentMode = WordReader.againMode;
		while(true)//614005行
		{
			String[] words = wordReader.getNextWords(5);
			if(words == null) break;
			System.out.println(words[0]);
		}
		System.out.println(wordReader.currentPara);

	}

}

发现bufferreader也是可以移动流位置的,利用mark和reset。

java读取中文分词工具(2)

时间: 2024-09-27 23:22:59

java读取中文分词工具(2)的相关文章

java读取中文分词工具(三)

import java.io.EOFException; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; /* * 文件格式:已分词的文本,词语之间用空格,换行等空白符分割. * 到了文件末尾就结束 * 适合读取一行很大的文本,因为这里的缓冲不是一行,

java读取中文分词工具(四)

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.io.Serializable; import java.util.ArrayList; import java.ut

java读取中文分词工具

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.util.StringTokenizer; /* * 文本格式:已分词的中文文本,空格分割.有若干行,每行为一个段落.

中文分词工具简介与安装教程(jieba、nlpir、hanlp、pkuseg、foolnltk、snownlp、thulac)

2.1 jieba 2.1.1 jieba简介 Jieba中文含义结巴,jieba库是目前做的最好的python分词组件.首先它的安装十分便捷,只需要使用pip安装:其次,它不需要另外下载其它的数据包,在这一点上它比其余五款分词工具都要便捷.另外,jieba库支持的文本编码方式为utf-8. Jieba库包含许多功能,如分词.词性标注.自定义词典.关键词提取.基于jieba的关键词提取有两种常用算法,一是TF-IDF算法:二是TextRank算法.基于jieba库的分词,包含三种分词模式: 精准

11大Java开源中文分词器的使用方法和分词效果对比

本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那要用的人结合自己的应用场景自己来判断. 11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口: /** * 获取文本的所有分词结果, 对比不同分词器结果 * @author 杨尚川 */ public interface WordSegmenter {

9大Java开源中文分词器的使用方法和分词效果对比

本文的目标有两个: 1.学会使用9大Java开源中文分词器 2.对比分析9大Java开源中文分词器的分词效果 9大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口: /**  * 获取文本的所有分词结果, 对比不同分词器结果  * @author 杨尚川  */ public interface WordSegmenter {     /**      * 获取文本的所有分词结果      * @param text 文本      * @retur

基于开源中文分词工具pkuseg-python,我用张小龙的3万字演讲做了测试

做过搜索的同学都知道,分词的好坏直接决定了搜索的质量,在英文中分词比中文要简单,因为英文是一个个单词通过空格来划分每个词的,而中文都一个个句子,单独一个汉字没有任何意义,必须联系前后文字才能正确表达它的意思. 因此,中文分词技术一直是nlp领域中的一大挑战.Python 中有个比较著名的分词库是结巴分词,从易用性来说对用户是非常友好的,但是准确度不怎么好.这几天发现另外一个库,pkuseg-python,看起来应该是北大的某个学生团队弄出来的,因为这方面没看到过多的介绍,pkuseg-pytho

NLP(十三)中文分词工具的使用尝试

??本文将对三种中文分词工具进行使用尝试,这三种工具分别为哈工大的LTP,结巴分词以及北大的pkuseg. ??首先我们先准备好环境,即需要安装三个模块:pyltp, jieba, pkuseg以及LTP的分词模型文件cws.model.在用户字典中添加以下5个词语: 经 少安 贺凤英 F-35战斗机 埃达尔·阿勒坎 ??测试的Python代码如下: # -*- coding: utf-8 -*- import os import jieba import pkuseg from pyltp i

中文分词工具——jieba

汉字是智慧和想象力的宝库. --索尼公司创始人井深大 简介 在英语中,单词就是"词"的表达,一个句子是由空格来分隔的,而在汉语中,词以字为基本单位,但是一篇文章的表达是以词来划分的,汉语句子对词构成边界方面很难界定.例如:南京市长江大桥,可以分词为:"南京市/长江/大桥"和"南京市长/江大桥",这个是人为判断的,机器很难界定.在此介绍中文分词工具jieba,其特点为: 社区活跃.目前github上有19670的star数目 功能丰富,支持关键词提