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;

/*
 * 文本格式:已分词的中文文本,空格分割。有若干行,每行为一个段落。
 * 功能:遍历文档,逐个返回词语。
 * 两种模式:
 * 1 到文档末尾后,结束
 * 2 到文档末尾后,从头再读。
/
public class WordReader
{
	static final int normalMode = 0;
	static final int againMode = 1;

	int currentMode = 0;
	//BufferedReader br=null;
	RandomAccessFile raf= null;
	StringTokenizer tokenizer = null;
	String nextWord=null;
	int currentLine = 0;
	int allCounts = 0;
	public  WordReader(String fileName) throws IOException
	{
		File file=new File(fileName);
		//br=new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf-8"));
		raf = new RandomAccessFile(file,"r") ;
	}	

	private boolean hasNextWord() throws IOException
	{
		if( tokenizer!=null && tokenizer.hasMoreTokens())
		{
			nextWord = tokenizer.nextToken();
			return true;
		}
		else
		{
			String line=raf.readLine();
			if(line == null)
			{
				if(currentMode == normalMode)
					return false;
				else //从头再来
				{
					raf.seek(0);
					return hasNextWord();//递归
				}
			}
			tokenizer = null;
			line = new String(line.getBytes("iso8859-1"),"utf-8");
			tokenizer= new StringTokenizer(line," ");
			return hasNextWord();//递归
		}
	}

	private String getNextWord() throws IOException
	{
		if(nextWord != null)
		{

			String word = nextWord;
			nextWord = null;
			allCounts ++;
			return word;
		}
		else if(hasNextWord())
		{
			return getNextWord();
		}
		else return null;
	}

	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(wordReader.hasNextWord())//共10329309个词
		for(int i=0;i<10329319;i++)//文本从头读
		{
			System.out.println(wordReader.getNextWord());
		}
		System.out.println(wordReader.allCounts);

	}

}

用randomaccessfile类很容易操作文件指针。

但是遇到中文乱码问题,参考了这里http://blog.chinaunix.net/uid-15490606-id-211958.html,解决了。

line = new String(line.getBytes("iso8859-1"),"utf-8");

对编码不是很精通,有时见看看这个http://blog.sina.com.cn/s/blog_673c81990100t1lc.html。

时间: 2024-10-09 08:37:02

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

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读取中文分词工具(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; /* * 文件格式:已分词的中文文本,每个词语空格分割,每行一个段落. * 这个类适

中文分词工具简介与安装教程(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数目 功能丰富,支持关键词提