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类非常easy操作文件指针。
可是遇到中文乱码问题。參考了这里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。
java读取中文分词工具(一)的更多相关文章
- Java实现敏感词过滤 - IKAnalyzer中文分词工具
IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包. 官网: https://code.google.com/archive/p/ik-analyzer/ 本用例借助 I ...
- 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较
本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...
- 中文分词工具探析(一):ICTCLAS (NLPIR)
1. 前言 ICTCLAS是张华平在2000年推出的中文分词系统,于2009年更名为NLPIR.ICTCLAS是中文分词界元老级工具了,作者开放出了free版本的源代码(1.0整理版本在此). 作者在 ...
- 开源中文分词工具探析(三):Ansj
Ansj是由孙健(ansjsun)开源的一个中文分词器,为ICTLAS的Java版本,也采用了Bigram + HMM分词模型(可参考我之前写的文章):在Bigram分词的基础上,识别未登录词,以提高 ...
- 开源中文分词工具探析(四):THULAC
THULAC是一款相当不错的中文分词工具,准确率高.分词速度蛮快的:并且在工程上做了很多优化,比如:用DAT存储训练特征(压缩训练模型),加入了标点符号的特征(提高分词准确率)等. 1. 前言 THU ...
- 开源中文分词工具探析(五):FNLP
FNLP是由Fudan NLP实验室的邱锡鹏老师开源的一套Java写就的中文NLP工具包,提供诸如分词.词性标注.文本分类.依存句法分析等功能. [开源中文分词工具探析]系列: 中文分词工具探析(一) ...
- 开源中文分词工具探析(五):Stanford CoreNLP
CoreNLP是由斯坦福大学开源的一套Java NLP工具,提供诸如:词性标注(part-of-speech (POS) tagger).命名实体识别(named entity recognizer ...
- 开源中文分词工具探析(七):LTP
LTP是哈工大开源的一套中文语言处理系统,涵盖了基本功能:分词.词性标注.命名实体识别.依存句法分析.语义角色标注.语义依存分析等. [开源中文分词工具探析]系列: 开源中文分词工具探析(一):ICT ...
- 开源中文分词工具探析(六):Stanford CoreNLP
CoreNLP是由斯坦福大学开源的一套Java NLP工具,提供诸如:词性标注(part-of-speech (POS) tagger).命名实体识别(named entity recognizer ...
随机推荐
- BZOJ 1845 Simpson积分
思路: Simpson积分直接上 限制一下递归深度+精度就好了 (难以理解为什么这么多人写扫描线) //By SiriusRen #include <bits/stdc++.h> usi ...
- 【Vijos1083/BZOJ1756】小白逛公园(线段树)
[写在前面]TYC (Little White) 真是太巨啦! 题目: Vijos1083 分析: 一眼看上去就是线段树啊-- 然而当我这种蒟蒻兴高采烈地把线段树模板敲了一半,却发现一个问题: 这子区 ...
- Web程序安全机制
ASP.NET提供了一个多层的安全模型,这个模型能够非常容易的保护Web应用程序. 安全策略没有必要非常复杂,但是需要应用安全策略的地方却是非常广泛的.程序员需要保证自己的应用程序不能被骗取,而把私有 ...
- 关于Adaper的相关用法
使用BaseAdapter的话需要重载四个方法: getCount getItem getItemId getView getView是用来刷新它所在的ListView的.在每一次item从屏幕外滑进 ...
- Android Thermal-engine
Thermal Engine Thermal 相关的东西主要在Vendor/qcom/proprietary/thermal-engine 目录下: thermal-engine.conf 文件可以用 ...
- Android 使用MySQL直接访问数据库
在实际项目中,一般很少直接访问MySQL数据库,一般情况下会通过http请求将数据传送到服务端,然后在服务端连接mysql数据库. 在android 中,会通过使用Jdbc 连接MySQL 服务器 p ...
- js技巧(一)
1.文档入口函数 window.onload = function () { //code 将会在页面的全部代码执行完成之后再去执行. } 2.弹窗 alert() 警告窗 confirm ...
- Cuder - 用C++11封装的CUDA类
以前写cuda:初始化环境,申请显存,初始化显存,launch kernel,拷贝数据,释放显存.一个页面大部分都是这些繁杂但又必须的操作,有时还会忘掉释放部分显存. 今天用C++11封装了这些CUD ...
- tailf
功能说明:tailf命令几乎等同于tail -f,与tail -f不同的是,如果文件不增长,那么它不会去访问磁盘文件,也不会更改文件的访问时间.tailf命令在工作中的主要使命就是跟踪日志文件,首先将 ...
- Quartz实战
https://my.oschina.net/yinxiaoling/blog/542336?fromerr=s3ko7u33 Quartz实战 > 一.内存型(1) <bean name ...