一个英文分词程序,要将形如:Books in tuneBoxes are for Chinese-Children!断为:Book in tune Box are for Chinese child,也就是说要将复数转为单数,将连写的首字母大写的单词分开等等。复数转单数考虑的比较周全了应该,基本囊活了绝大多数情况。根据大写断词上原先考虑有些欠妥,现在保留了比如NEC这样的词。
/**
* 分词
*
* @param source
* 待分的字符串
* @return String[]
*/
public String[] fenci(String source) {
/* 分隔符的集合 */
String delimiters = " \t\n\r\f~!@#$%^&*()_+|`1234567890-=\\{}[]:\";'<>?,./'";
/* 根据分隔符分词 */
StringTokenizer stringTokenizer = new StringTokenizer(source,
delimiters);
Vector vector = new Vector();
/* 根据大写首字母分词 */
flag0: while (stringTokenizer.hasMoreTokens()) {
String token = stringTokenizer.nextToken();
/* 全大写的词不处理 */
boolean allUpperCase = true;
for (int i = 0; i < token.length(); i++) {
if (!Character.isUpperCase(token.charAt(i))) {
allUpperCase = false;
}
}
if (allUpperCase) {
vector.addElement(token);
continue flag0;
}
/* 非全大写的词 */
int index = 0;
flag1: while (index < token.length()) {
flag2: while (true) {
index++;
if ((index == token.length())
|| !Character.isLowerCase(token.charAt(index))) {
break flag2;
}
}
vector.addElement(token.substring(0, index));
token = token.substring(index);
index = 0;
continue flag1;
}
}
/*
* 复数转单数 参考以下文档:
* http://ftp.haie.edu.cn/Resource/GZ/GZYY/DCYFWF/NJSYYY/421b0061ZW_0015.htm
*/
for (int i = 0; i < vector.size(); i++) {
String token = (String) vector.elementAt(i);
if (token.equalsIgnoreCase("feet")) {
token = "foot";
} else if (token.equalsIgnoreCase("geese")) {
token = "goose";
} else if (token.equalsIgnoreCase("lice")) {
token = "louse";
} else if (token.equalsIgnoreCase("mice")) {
token = "mouse";
} else if (token.equalsIgnoreCase("teeth")) {
token = "tooth";
} else if (token.equalsIgnoreCase("oxen")) {
token = "ox";
} else if (token.equalsIgnoreCase("children")) {
token = "child";
} else if (token.endsWith("men")) {
token = token.substring(0, token.length() - 3) + "man";
} else if (token.endsWith("ies")) {
token = token.substring(0, token.length() - 3) + "y";
} else if (token.endsWith("ves")) {
if (token.equalsIgnoreCase("knives")
|| token.equalsIgnoreCase("wives")
|| token.equalsIgnoreCase("lives")) {
token = token.substring(0, token.length() - 3) + "fe";
} else {
token = token.substring(0, token.length() - 3) + "f";
}
} else if (token.endsWith("oes") || token.endsWith("ches")
|| token.endsWith("shes") || token.endsWith("ses")
|| token.endsWith("xes")) {
token = token.substring(0, token.length() - 2);
} else if (token.endsWith("s")) {
token = token.substring(0, token.length() - 1);
}
/* 处理完毕 */
vector.setElementAt(token, i);
}
/* 转为数组形式 */
String[] array = new String[vector.size()];
Enumeration enumeration = vector.elements();
int index = 0;
while (enumeration.hasMoreElements()) {
array[index] = (String) enumeration.nextElement();
index++;
}
/* 打印显示 */
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
/* 返回 */
return array;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/petercheng456/archive/2005/07/04/412390.aspx
分享到:
相关推荐
本文将详细讨论“一个简单的英文分词程序”,并结合标签“英文分词”来深入探讨这一主题。 英文分词与中文分词有所不同,中文分词通常涉及到复杂的断句和词语识别,而英文分词相对简单,主要基于单词间的空格分隔。...
《VC++实现英文分词程序详解》 在信息技术领域,分词是自然语言处理(NLP)中的一个重要环节,尤其对于英文文本来说,有效的分词是进行文本分析、信息检索和机器翻译等任务的基础。本篇文章将深入探讨如何利用VC++...
《C语言编写的中文分词程序》 在计算机科学领域,中文分词是自然语言处理(NLP)中的一项基础任务。它涉及到将连续的汉字序列切分成具有语义意义的词汇单元,这对于理解文本内容至关重要。C语言,作为一种基础且...
本压缩包包含的“高效较准确的中英文分词程序”提供了对中文和英文文本进行分词的能力,这对于构建搜索引擎、进行网页信息提取以及后续的文本分析和挖掘工作至关重要。 中文分词是这个程序的主要功能之一。中文分词...
在这个分词程序中,开发者可能利用了C++的指针操作和内存管理能力,以及STL(标准模板库)中的容器和算法,以实现快速而精准的分词功能。 1. **基础数据结构**:为了存储和处理词汇,程序可能会使用数组、链表、...
在北邮计算机院的研究中,可能涉及到对这些方法的深入研究和改进,开发出更高效的中文分词程序。这个压缩包文件“分词”很可能包含了相关的代码实现、实验数据、模型训练和测试的结果。对于学习者而言,可以借此深入...
Python分词程序是一种基于Python语言实现的文本处理工具,主要用于将连续的汉字序列切分成具有语义意义的词语。在自然语言处理(NLP)领域,分词是预处理的第一步,它对于理解和分析文本至关重要。这个程序采用了两...
本文将深入探讨“简单的中文分词程序”在VC++环境下如何实现,以及涉及的相关技术。 首先,我们要了解什么是中文分词。中文分词是将连续的汉字序列切分成具有语义的词汇单元的过程,因为中文没有像英文那样的空格或...
本篇文档主要介绍了一款Java编写的分词程序,该程序不仅适用于中文分词,还能处理英文文本。通过使用该工具,用户可以对输入的一组样本文献进行预处理,提取出关键的标引词(即关键词)。这对于后续的信息检索、文本...
【标题】:“中文分词MapReduce程序” 在大数据处理领域,MapReduce是一种并行计算模型,常用于处理海量数据。本程序是针对中文文本的一种特殊应用,它利用Java编程语言实现了中文分词功能,将复杂的分词任务分散到...
本项目“C#实现的中文分词程序”提供了一种基于键树(Trie树)的解决方案,为开发者提供了在C#环境中进行中文分词的工具。 首先,我们需要理解什么是中文分词。中文分词是将连续的汉字序列切分成具有实际意义的词语...
【中文信息分词程序】 中文信息分词是自然语言处理(NLP)中的基础步骤,其目的是将连续的汉字序列切分成具有独立语义的词语序列。这是因为汉语中没有像英语那样的空格来自然地划分单词,因此需要通过特定算法进行...
本项目是一个小型的英文分词并统计词频的程序,它利用了Java这一强大且广泛使用的编程语言,旨在帮助用户理解文本数据,发现高频词汇,从而进行进一步的数据分析。 分词是将连续的文本流分割成有意义的单元——单词...
中文分词是将连续的汉字序列切分成具有实际意义的词汇单元,因为中文没有像英文那样的空格或标点符号来自然地划分单词,所以需要通过特定的算法进行识别。这对于搜索引擎理解和处理中文文本至关重要,因为搜索引擎的...
分词查找英文程序
Java编写分词程序可以实现更精细化的控制,比如处理中文、英文或其他特殊语言的分词规则。自定义Analyzer通常包括以下几个步骤: - 继承Analyzer类:创建一个新的Analyzer类,重写其`createComponents()`和`...
分词程序将给定文本文件按词典进行分词,使用C++编写。可能有不对的地方,望批评指正。
**ProSegment 分词程序** 中文分词是自然语言处理(NLP)中的基础步骤,它涉及到将连续的汉字序列划分为具有独立语义的词语。ProSegment 是一个使用 C# 编程语言实现的中文分词工具,它以其简洁的设计和高效的效果...
《Java版分词程序解析与应用》 在信息爆炸的时代,文本处理技术是不可或缺的一环,其中分词作为基础步骤,对于信息检索、自然语言处理等领域尤为重要。本篇将深入探讨一个基于Java实现的分词程序,即"**fenci.rar**...
在提供的压缩包文件中,包含了各种与分词相关的源码,例如"zt_逆向最大匹配分词算法"可能是实现逆向最大匹配算法的具体代码,"秒盘古分词"可能是指快速版本的盘古分词程序,"中文分词"和"英文分词"源码分别针对中文...