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;

/*
 * 文件格式:已分词的文本,词语之间用空格,换行等空白符分割。
 * 到了文件末尾就结束
 * 适合读取一行很大的文本,因为这里的缓冲不是一行,而是若干个词语(比一行少)。
 * 代码实现方式:每次读若干个词语作为一个句子,逐个字节读,以空白符区分词语的开始和结束。
 *
 */
public class WordReader
{
	RandomAccessFile raf = null;
	ArrayList<String> sentence = null;
	int senSize = 1000;
	int senPos =0 ;

	public WordReader(String fileName) throws IOException
	{
	     File file=new File(fileName);
	     raf = new RandomAccessFile(file,"r") ;
	     sentence = new ArrayList<String>();
	}

	public String[] getNextWords(int count) throws IOException
	{
		if(senPos+count >= sentence.size())//到了段落末尾,读取新的段落
		{
			if(readSentence())
				return getNextWords(count);
			else return null;
		}
		String[] words = new String[count];
		for(int i=0;i<count;i++)
		{
			words[i] = sentence.get(senPos+i);
		}
		senPos++;
		return words;
	}
	private boolean readSentence()
	{
		try
		{
			sentence.clear();
			for(int i=0;i<senSize;i++)
			{
				//System.out.println(i);

				int len = 0;
				while(true)
				{
					int b = raf.read();
					if(b == -1) return false;
					if(b == ' ' || b == '\n'|| b == '\r'|| b=='\t')
					{
						break;
					}
					len++;
				}
				raf.seek(raf.getFilePointer() -len-1);
				byte[] buffer = new byte[len];
				raf.read(buffer, 0, len);
				//byte[] sub = new byte[len];
				//for(int k=0;k<len;k++) sub[k] = buffer[k];
				String word = new String(buffer,"utf-8");//这里有坑,不会根据结束符0截断字符串,必须手动处理
				//System.out.println(word);
				sentence.add(word);
				while(true)
				{
					int b = raf.read();
					if(b == -1) return false;
					if(b == ' ' || b == '\n' || b == '\r' || b=='\t')
					{
						continue;
					}
					else break;
				}
				raf.seek(raf.getFilePointer() -1);

			}
			senPos = 0;
			return true;
		}
		catch(EOFException ex)
		{
			ex.printStackTrace();
			return false;
		}
		catch(IOException ex)
		{
			ex.printStackTrace();
			return false;
		}

	}

	public static void main(String[] args) throws IOException
	{
		// TODO Auto-generated method stub
		//WordReader wr = new WordReader("/home/linger/sources/ParaModel/electronic_seg.txt");
		WordReader wr = new WordReader("/home/linger/sources/resultbig.txt");
		wr.readSentence();
		//System.out.println("-------------------------");
		//wr.readSentence();
		//int i=0;
		//while(true)//614005行
		//{
			//String[] words = wr.getNextWords(5);
			//if(words == null) break;
			//System.out.println(i++);
			//System.out.println(words.length);
			//System.out.printf("%s,%s,%s,%s,%s \n",words[0],words[1],words[2],words[3],words[4]);
		//}
	}

}

本文作者:linger

本文链接:http://blog.csdn.net/lingerlanlan/article/details/38337483

java读取中文分词工具(三),布布扣,bubuko.com

时间: 2024-10-10 01:32:34

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

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

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库的分词,包含三种分词模式: 精准

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数目 功能丰富,支持关键词提

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