分词预处理java代码 java分词工具类( 三 )


3、基于统计的分词方法
从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词 。因此字与字相邻共现的频率或概率能够较好的反映成词的可信度 。可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息 。定义两个字的互现信息,计算两个汉字X、Y的相邻共现概率 。互现信息体现了汉字之间结合关系的紧密程度 。当紧密程度高于某一个阈值时 , 便可认为此字组可能构成了一个词 。这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又叫做无词典分词法或统计取词方法 。但这种方法也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,例如“这一”、“之一”、“有的”、“我的”、“许多的”等 , 并且对常用词的识别精度差,时空开销大 。实际应用的统计分词系统都要使用一部基本的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点 。
到底哪种分词算法的准确度更高,目前并无定论 。对于任何一个成熟的分词系统来说,不可能单独依靠某一种算法来实现,都需要综合不同的算法 。笔者了解,海量科技的分词算法就采用“复方分词法” , 所谓复方,相当于用中中的复方概念,即用不同的才综合起来去医治疾?。?同样,对于中文词的识别 , 需要多种算法来处理不同的问题 。
用java读取文档并分词 。需要commons-io包, 或者自己写读文件分词预处理java代码的部分
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils;
public class Test20 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = null;
try {
str = FileUtils.readFileToString(new File("e.txt"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Pattern p = Pattern.compile("\\b[\\w-']+\\b");
Matcher m = p.matcher(str);
ListWord words = new ArrayListWord();
while(m.find()){
add(words, m.group().trim());
}
Collections.sort(words, new ComparatorWord(){
@Override
public int compare(Word o1, Word o2) {
// TODO Auto-generated method stub
return o1.getWord().compareTo(o2.getWord());
}});
System.out.println(words);
}
private static void add(ListWord words, String word) {
// TODO Auto-generated method stub
for(Word temp : words){
if(temp.getWord().equals(word)){
temp.setCount(temp.getCount() + 1);
return;
}
}
Word w = new Word();
w.setWord(word);
words.add(w);
}
}
class Word{
private String word;
private int count = 1;
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public String toString() {
return "Word [word=" + word + ", count=" + count + "]";
}
}
java语言编写一个String的分词程序,功能就是计算输入英文句子的单词个数import java.io.BufferedReader;

推荐阅读