`
lzj0470
  • 浏览: 1276708 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

中文分词—新词挖掘篇

阅读更多
大概想法是这样:
找词库完毕,剩下没有找到的所有字符串,进行新词挖掘。
例如:
一篇文章中,没有找到的所有字符串有:
1、杨瑞第集国宁你们
2、杨瑞来你们来国宁
3、过来要不要去
4、要不要过来啊
经过新词挖掘,可以得到
杨瑞->你们->国宁->要不要->过来->
欢迎大家测试!有更好的算法,也可以说一下,讨论讨论~~~
package wss.analysis.analyzer;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author Loiy
 * @time 2011-10-26
 * @return 新词挖掘
 */
public class newWordAnalyzer {

	public List<String> list = new ArrayList<String>();
	
	public List<String> word = new ArrayList<String>();
	
	public void findWord(String text){
		Iterator<String> iter = list.iterator();
		while(iter.hasNext()){
			String str = iter.next();
			match(str,text);
		}
		list.add(text);
	}
	
	/**
	 * @param  s1 词库
	 * @param  s2 待挖掘新词的字符串 
	 * @return 查找两个字符串共同子字符串,并返回.子字符串必须大于等于2
	 */
	public void match(String s1, String s2){
		char c1[] = s1.toCharArray();
		char c2[] = s2.toCharArray();
		int j = 0;
		boolean bool = false; // 上次是否匹配成功 true 匹配成功 false 匹配失败
		int start = -1,end = -1; // 开始匹配位置;结束匹配位置
		for(int i = 0; i < c2.length; i++){
			for(; j < c1.length; j++){
				if(c2[i] == c1[j] && j != c1.length - 1){ // 找到匹配,还不到第二个循环最后一个字符
					if(start == -1) start = i;
					if(i == c2.length - 1) end = i; // 到第一个循环最后,赋值把i赋值给end 
					bool = true;
					j = j + 1; 
					break; // 结束该循环,查找第一个循环的下个字符(A),A从第二个循环下标为j+1开始找
				}
				if(c2[i] == c1[j] && j == c1.length - 1){ // 找到匹配,到第二个循环最后一个字符
					end = i; // 这里i不需要减1,因为已经到了第二个循环最后一个元素
					if(start != -1 && (end - start >= 1)){ // 相连字符长度大于等于2,打印出来
						word.add(s2.substring(start, end + 1));
					}
					j = 0;
					start = -1;
					end = -1;
					break;
				}
				if(bool){ //匹配到这个下标结束,开始总计到目前为止相连字符有多少个
					end = i - 1; // 上次成功匹配到的字符位置
					//System.out.println(end+" "+start);
					if(start != -1 && (end - start >= 1)){ // 相连字符长度大于等于2,打印出来
						word.add(s2.substring(start, end + 1));
					}
					//System.out.println("<--i="+i+" "+c2[i]+" j="+j+" "+c1[j]+"-->");
					bool = false;
					start = -1;
					end = -1;
					i--; // 匹配失败,第一个循环下标减1
					j = 0; // 第二个循环下标从零开始.
					break;
				}
				if(j == c1.length -1){ // 第一个循环某个字符到第二个循环最后一个字符,还是匹配不到,那么 j=0;
					j = 0;
					break;
				}
			}
		}
		if(start != -1 && (end - start >= 1)){ // 相连字符长度大于等于2,打印出来
			word.add(s2.substring(start, end + 1));
		}
	}
	
	public String toString(){
		Iterator<String> iter = word.iterator();
		StringBuffer sb = new StringBuffer();
		while(iter.hasNext()){
			String str = iter.next();
			if(str.length() <= 1) continue;
			sb.append(str).append("->");
		}
		String result = sb.toString();
		sb.setLength(0);
		sb = null;
		return result;
	}
	
	public static void main(String args[]){
		newWordAnalyzer wordExcavate = new newWordAnalyzer();
		wordExcavate.findWord("杨瑞第集国宁你们");
		wordExcavate.findWord("杨瑞来你们来国宁");
		wordExcavate.findWord("过来要不要去");
		wordExcavate.findWord("要不要过来啊");
		String t = wordExcavate.toString();
		System.out.println(t);
	}
	
}

分享到:
评论

相关推荐

    人工智能-项目实践-预训练-NLP实验:新词挖掘+预训练模型继续Pre-training.zip

    在本项目实践中,我们主要关注的是人工智能领域中的自然语言处理(NLP)技术,特别是新词挖掘和预训练模型的持续预训练。新词挖掘是NLP中的一个重要环节,它帮助我们识别和提取文本中未被传统词汇资源收录的新兴词汇...

    最新中文分词工具的词库

    jieba采用HMM(隐马尔科夫模型)和BMES(Begin-Middle-End-Single)标注算法,支持精确模式、全模式和搜索引擎模式,同时还提供了词性标注、新词发现等功能,适合各种文本处理任务,尤其在互联网数据挖掘中广泛应用...

    scws中文分词组件

    "scws中文分词组件"是一个专为处理中文文本而设计的开源工具,它主要用于将连续的汉字序列切分成具有语义的独立词汇,这一过程称为中文分词。中文分词是自然语言处理(NLP)中的基础步骤,对于信息检索、文本分析、...

    CSW中文分词组件

    在构建高效、精准的中文搜索引擎时,分词是关键的第一步,它能够将连续的汉字序列切分成有意义的词语,使得计算机可以进一步理解和处理这些信息。 中文分词的难度在于汉语的灵活性和多义性,同一个词语在不同的上...

    一个免费的中文分词组件

    在信息爆炸的时代,中文信息处理成为了技术发展的重要领域,其中中文分词作为基础环节,对于自然语言处理、搜索引擎优化、文本挖掘等应用场景至关重要。今天我们要介绍的是一款免费的中文分词组件,这款组件可能对...

    结巴中文分词.zip

    在中文自然语言处理(NLP)领域,分词是预处理的重要步骤,它将连续的汉字序列切分成具有语义的词汇单元。"jieba"因其易用性和高效性而广受欢迎,尤其适合于对大量中文文本进行分析、挖掘和信息提取。 该项目的核心...

    IKAnalyzer中文分词器

    IKAnalyzer是一款专为中文处理设计的开源分词器,它主要应用于搜索引擎、信息检索系统、文本挖掘等领域。这款工具能够高效地对中文文本进行分词,使得计算机可以更好地理解和处理中文信息。IKAnalyzer的名字来源于...

    Ik中文分词器6.3.0版

    Ik分词器6.3.0版的出现,为Solr提供了一个优秀的中文分词解决方案,能够处理各种复杂的中文表达和网络用语,包括成语、缩写、新词等。 Ik分词器的特色在于其动态加载词库和自定义扩展能力。用户可以根据实际需求...

    中文分词论文.rar

    中文分词是自然语言处理(NLP)领域中的基础任务,它是将连续的汉字序列切分成具有语义意义的词语单元的过程。这个过程对于后续的文本分析,如情感分析、关键词提取、机器翻译等至关重要。以下是一些在给定的压缩包...

    中文分词器

    中文分词是自然语言处理中的关键技术之一,尤其在中文搜索引擎、信息检索、文本挖掘等领域扮演着重要角色。IKAnalyzer 是一款专门针对中文处理的开源分词器,它为 Lucene 搜索引擎提供高效的中文分词支持。Lucene 是...

    IK中文分词器

    IKAnalyzer,作为一款高效、易用的中文分词组件,能够有效地将连续的汉字序列切分成具有语义的词汇单元,提升搜索结果的相关性和准确性。 **IKAnalyzer的特性与优势:** 1. **灵活定制**:IKAnalyzer支持自定义词典...

    中文分词技术及其实现.pdf

    ### 中文分词技术及其实现 #### 摘要 随着互联网的快速发展和个人化信息需求的日益增长,网络信息挖掘技术成为了当前研究的重要领域之一。对于中文信息处理而言,中文分词技术作为基础环节至关重要。不同于英语等...

    基于K最短路径的中文分词算法

    例如,搜索引擎、自动翻译、语音识别、信息检索、自动分类、自动摘要、文本自动校对及数据挖掘等技术的发展都离不开高效的中文分词算法。中文分词不仅涉及到语言学的基础理论,还涉及到计算机科学中的算法设计与优化...

    中文分词设计与实现 组件

    本组件主要关注的是如何设计和实现一个有效的中文分词系统,以便更好地服务于web文本挖掘领域。在这个过程中,我们将探讨web文本挖掘的分类、静态和动态统计分析,以及中文分词技术的关键要素。 一、Web文本挖掘的...

    dev_最短路径中文分词_最短路径分词算法_

    在自然语言处理(NLP)领域,中文分词是一项基础且关键的任务,它是指将连续的汉字序列切分成具有实际语义的词汇单元。在这个任务中,“最短路径分词算法”是一种常用的策略,用于解决如何高效准确地完成分词工作。...

    CJK.rar_中文分词

    《中文分词技术详解——基于"CJK.rar"的探索》 中文分词是自然语言处理领域中的...无论是对于学术研究还是实际应用,理解并掌握中文分词都至关重要,它将有助于我们更好地挖掘和利用中文信息,推动信息技术的发展。

    IKAnalyzer中文分词器 java

    和jieba分词、HanLP等其他流行的中文分词器相比,IKAnalyzer在Java环境下具有较高的性能和稳定性,但可能在灵活性和新词识别上略逊一筹。选择哪种分词器应根据项目需求和所用技术栈来决定。 总之,IKAnalyzer是一...

    java 实现的中文分词算法(代码)

    Java实现的中文分词算法是自然语言处理领域中的重要技术,尤其在文本挖掘、搜索引擎、信息检索等场景中发挥着关键作用。FMM(Fast Mapping Model)和BMM(Bigram Mapping Model)是两种常见的中文分词算法,它们都是...

    中文分词工具

    中文分词工具是自然语言处理领域中的重要工具,主要用于将连续的汉字序列切分成具有语义的单个词汇。在中文文本分析、信息检索、机器翻译等应用中,分词是预处理的第一步,因为中文没有像英文那样的空格来自然地划分...

    IK Analyzer中文分词器

    中文分词是自然语言处理(NLP)中的基础任务,对于信息检索、文本挖掘、机器翻译等领域至关重要。IK Analyzer的设计理念是轻量级且高效,旨在为开发者提供简单易用的接口,以便快速集成到各种系统中。 **1. 分词...

Global site tag (gtag.js) - Google Analytics