写道
//Java实现逆向最大匹配中文分词算法
public class SplitChineseCharacter {
public static void main(String[] args) {
String input = "太好了,今天是星期六啊"; // 要匹配的字符串
new Split(input).start();
}
}
class Split {
private String[] dictionary = {"今天","是","星期","星期六"}; //词典
private String input = null;
public Split(String input) {
this.input = input;
}
public void start() {
String temp = null;
for(int i=0;i<this.input.length();i++) {
temp = this.input.substring(i); // 每次从字符串的首部截取一个字,并存到temp中
// System.out.println("*****" + temp + "*********" + this.input);
// 如果该词在字典中, 则删除该词并在原始字符串中截取该词
if(this.isInDictionary(temp)) {
System.out.println(temp);
this.input = this.input.replace(temp, "");
i = -1; // i=-1是因为要重新查找, 而要先执行循环中的i++
}
}
// 当前循环完毕,词的末尾截去一个字,继续循环, 直到词变为空
if(null != this.input && !"".equals(this.input)) {
this.input = this.input.substring(0,this.input.length()-1);
this.start();
}
}
//判断当前词是否在字典中
public boolean isInDictionary(String temp) {
for(int i=0;i<this.dictionary.length;i++) {
if(temp.equals(this.dictionary[i])) {
return true;
}
}
return false;
}
}
/**
过程分析:
第一词循环:
太好了,今天是星期六啊
好了,今天是星期六啊
了,今天是星期六啊
,今天是星期六啊
今天是星期六啊
天是星期六啊
是星期六啊
星期六啊
期六啊
六啊
啊
第一次循环没有找到,则从“太好了,今天是星期六啊”中把最后一个截取,开始第二次循环
第二次循环:
太好了,今天是星期六
好了,今天是星期六
了,今天是星期六
,今天是星期六
今天是星期六
天是星期六
是星期六
星期六 --------->输出:星期六,并在原字符串中截去“星期六”-->变为“太好了,今天是”
太好了,今天是
好了,今天是
了,今天是
,今天是
今天是
天是
是 ----------> 输出:是, 并在原字符串中截去“是”-->变为“太好了,今天”
直到原字符串变为空。
*/
public class SplitChineseCharacter {
public static void main(String[] args) {
String input = "太好了,今天是星期六啊"; // 要匹配的字符串
new Split(input).start();
}
}
class Split {
private String[] dictionary = {"今天","是","星期","星期六"}; //词典
private String input = null;
public Split(String input) {
this.input = input;
}
public void start() {
String temp = null;
for(int i=0;i<this.input.length();i++) {
temp = this.input.substring(i); // 每次从字符串的首部截取一个字,并存到temp中
// System.out.println("*****" + temp + "*********" + this.input);
// 如果该词在字典中, 则删除该词并在原始字符串中截取该词
if(this.isInDictionary(temp)) {
System.out.println(temp);
this.input = this.input.replace(temp, "");
i = -1; // i=-1是因为要重新查找, 而要先执行循环中的i++
}
}
// 当前循环完毕,词的末尾截去一个字,继续循环, 直到词变为空
if(null != this.input && !"".equals(this.input)) {
this.input = this.input.substring(0,this.input.length()-1);
this.start();
}
}
//判断当前词是否在字典中
public boolean isInDictionary(String temp) {
for(int i=0;i<this.dictionary.length;i++) {
if(temp.equals(this.dictionary[i])) {
return true;
}
}
return false;
}
}
/**
过程分析:
第一词循环:
太好了,今天是星期六啊
好了,今天是星期六啊
了,今天是星期六啊
,今天是星期六啊
今天是星期六啊
天是星期六啊
是星期六啊
星期六啊
期六啊
六啊
啊
第一次循环没有找到,则从“太好了,今天是星期六啊”中把最后一个截取,开始第二次循环
第二次循环:
太好了,今天是星期六
好了,今天是星期六
了,今天是星期六
,今天是星期六
今天是星期六
天是星期六
是星期六
星期六 --------->输出:星期六,并在原字符串中截去“星期六”-->变为“太好了,今天是”
太好了,今天是
好了,今天是
了,今天是
,今天是
今天是
天是
是 ----------> 输出:是, 并在原字符串中截去“是”-->变为“太好了,今天”
直到原字符串变为空。
*/
相关推荐
本文将详细介绍如何利用Java编程语言来实现两种常见的分词算法——正向最大匹配法(FMM)和逆向最大匹配法(BMM),并给出具体的代码示例。 #### 二、正向最大匹配法(FMM) 正向最大匹配法的基本思路是从待分析...
1. **算法实现**:详细解释了如何用Java编程语言实现逆向最大匹配分词算法,包括词典的构建、匹配过程以及未登录词的处理。 2. **数据集与评估**:可能使用了标准的中文语料库如SIGHAN Bakeoff数据集,对算法的性能...
Java实现的最大匹配分词算法详解 本文主要介绍了Java实现的最大匹配分词算法的原理和实现方法。最大匹配分词算法是文本处理中最重要的...在Java实现最大匹配分词算法时,需要注意算法的选择、词典的准备和效率的优化。
Java实现的双向匹配分词算法示例...本文详细介绍了Java实现的双向匹配分词算法,包括正向最大匹配分词算法、逆向最大匹配分词算法和双向匹配分词算法。这些算法都是基于字符串匹配的分词方法,适用于中文分词任务。edii
在Java中实现分词算法,常见的方法有正向最大匹配法(FMM)、逆向最大匹配法(RMM)、动态规划法(DP)等。这些算法各有优缺点,选择哪种方法取决于具体的应用场景和性能需求。例如,FMM从左到右匹配最长的词,而RMM...
word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...
总之,中文分词算法设计的核心在于找到合适的颗粒度,减少非词典词和单字字典词,同时平衡正向和逆向匹配的优点,以提高分词的准确性和语义相关性。通过N-Gram模型和其他统计手段,我们可以构建更加智能和适应性强的...
本文将深入探讨"fenCi.rar"这个压缩包所涉及的核心概念——中文分词,以及相关的Java实现和分词算法。 首先,中文分词是中文信息处理的基础步骤,其目标是将连续的汉字序列按照语义和语法合理地切分成一个个有意义...
在Java中实现这些分词算法时,通常会包含以下步骤: - **词典构建**:首先需要有一个包含大量词汇的词典,这是分词的基础。 - **预处理**:对输入文本进行清洗,去除标点符号、数字等非文字字符。 - **分词**:根据...
1. **中文分词原理**:分词的基本方法有正向最大匹配法、逆向最大匹配法、最少切分法、词典匹配法等。这些方法各有优缺点,例如,正向最大匹配法从左到右寻找最长的词,而逆向最大匹配法则从右到左进行。 2. **Java...
algorithmMenu.add(bmmItem = new JRadioButtonMenuItem("逆向最大匹配", false)); ButtonGroup algorithms = new ButtonGroup(); algorithms.add(fmmItem); algorithms.add(bmmItem); ...
2. **分词引擎**:这部分实现具体的分词算法,如最大匹配、HMM或CRF等,对输入文本进行分词操作。 3. **后处理**:对初步分词结果进行优化,处理歧义,提高分词的准确性和效率。 4. **测试模块**:包含用于验证...
这个项目提供了三种不同的分词算法:统计分词、逆向最大匹配法(RMM)和正向最大匹配法(FMM)。 1. **统计分词**: 统计分词基于大规模语料库,利用词语出现的频率和上下文关系来进行分词。这种方法通常会结合...
在Java的中文分词系统中,常见的技术包括基于词典的匹配方法(如正向最大匹配法、逆向最大匹配法)、统计模型(如隐马尔可夫模型HMM、条件随机场CRF)等。这些算法会结合词频统计、上下文信息等,以达到更准确的分词...
IKAnalyzer采用基于词典的分词方法,结合正向最大匹配(FMM)和逆向最大匹配算法,同时考虑词语的上下文信息,提高分词的准确性。此外,它还支持用户自定义词典,以处理特定领域的专业词汇。 3. **包含的文件** - ...
4. **逆向最大匹配法(Backward Maximum Matching, BMM)**:从文本末尾开始,尽可能匹配词典中的最长词汇。 5. **双向最大匹配法(Bi-directional Maximum Matching, BDM)**:结合FMM和BMM的优点,既考虑了开始也...
常见的中文分词算法包括最大匹配法、正向最大匹配、逆向最大匹配、双向最大匹配等。本程序的标签表明它专注于解决这一问题。 【压缩包子文件的文件名称列表】:META-INF、org 这些文件夹名表明了程序的结构。在...
这通常涉及到词典匹配、前向最大匹配(FMM)、逆向最大匹配(RMM)、双向最大匹配(BMM)等方法。例如,"renmin"可能对应"人民",也可能对应"任免",智能切分就是解决这类歧义的过程。 3. **数据挖掘**:在处理拼音...