`

英文分词程序

阅读更多

一个英文分词程序,要将形如: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++做的英文分词程序

    《VC++实现英文分词程序详解》 在信息技术领域,分词是自然语言处理(NLP)中的一个重要环节,尤其对于英文文本来说,有效的分词是进行文本分析、信息检索和机器翻译等任务的基础。本篇文章将深入探讨如何利用VC++...

    C语言编写的中文分词程序

    《C语言编写的中文分词程序》 在计算机科学领域,中文分词是自然语言处理(NLP)中的一项基础任务。它涉及到将连续的汉字序列切分成具有语义意义的词汇单元,这对于理解文本内容至关重要。C语言,作为一种基础且...

    分词程序 (高效准确),可直接使用

    本压缩包包含的“高效较准确的中英文分词程序”提供了对中文和英文文本进行分词的能力,这对于构建搜索引擎、进行网页信息提取以及后续的文本分析和挖掘工作至关重要。 中文分词是这个程序的主要功能之一。中文分词...

    分词程序代码

    在这个分词程序中,开发者可能利用了C++的指针操作和内存管理能力,以及STL(标准模板库)中的容器和算法,以实现快速而精准的分词功能。 1. **基础数据结构**:为了存储和处理词汇,程序可能会使用数组、链表、...

    自然语言处理-中文分词程序

    在北邮计算机院的研究中,可能涉及到对这些方法的深入研究和改进,开发出更高效的中文分词程序。这个压缩包文件“分词”很可能包含了相关的代码实现、实验数据、模型训练和测试的结果。对于学习者而言,可以借此深入...

    python分词程序

    Python分词程序是一种基于Python语言实现的文本处理工具,主要用于将连续的汉字序列切分成具有语义意义的词语。在自然语言处理(NLP)领域,分词是预处理的第一步,它对于理解和分析文本至关重要。这个程序采用了两...

    简单的中文分词程序 vc++

    本文将深入探讨“简单的中文分词程序”在VC++环境下如何实现,以及涉及的相关技术。 首先,我们要了解什么是中文分词。中文分词是将连续的汉字序列切分成具有语义的词汇单元的过程,因为中文没有像英文那样的空格或...

    java分词程序,可分英文

    本篇文档主要介绍了一款Java编写的分词程序,该程序不仅适用于中文分词,还能处理英文文本。通过使用该工具,用户可以对输入的一组样本文献进行预处理,提取出关键的标引词(即关键词)。这对于后续的信息检索、文本...

    中文分词mapreduce程序

    【标题】:“中文分词MapReduce程序” 在大数据处理领域,MapReduce是一种并行计算模型,常用于处理海量数据。本程序是针对中文文本的一种特殊应用,它利用Java编程语言实现了中文分词功能,将复杂的分词任务分散到...

    C#实现的中文分词程序

    本项目“C#实现的中文分词程序”提供了一种基于键树(Trie树)的解决方案,为开发者提供了在C#环境中进行中文分词的工具。 首先,我们需要理解什么是中文分词。中文分词是将连续的汉字序列切分成具有实际意义的词语...

    中文信息分词程序12544554

    【中文信息分词程序】 中文信息分词是自然语言处理(NLP)中的基础步骤,其目的是将连续的汉字序列切分成具有独立语义的词语序列。这是因为汉语中没有像英语那样的空格来自然地划分单词,因此需要通过特定算法进行...

    英文分词统计词频

    本项目是一个小型的英文分词并统计词频的程序,它利用了Java这一强大且广泛使用的编程语言,旨在帮助用户理解文本数据,发现高频词汇,从而进行进一步的数据分析。 分词是将连续的文本流分割成有意义的单元——单词...

    云寻觅中文分词执行程序

    中文分词是将连续的汉字序列切分成具有实际意义的词汇单元,因为中文没有像英文那样的空格或标点符号来自然地划分单词,所以需要通过特定的算法进行识别。这对于搜索引擎理解和处理中文文本至关重要,因为搜索引擎的...

    分词查找英文程序

    分词查找英文程序

    lucene分词程序

    Java编写分词程序可以实现更精细化的控制,比如处理中文、英文或其他特殊语言的分词规则。自定义Analyzer通常包括以下几个步骤: - 继承Analyzer类:创建一个新的Analyzer类,重写其`createComponents()`和`...

    分词源程序C++编写

    分词程序将给定文本文件按词典进行分词,使用C++编写。可能有不对的地方,望批评指正。

    ProSegment 分词程序

    **ProSegment 分词程序** 中文分词是自然语言处理(NLP)中的基础步骤,它涉及到将连续的汉字序列划分为具有独立语义的词语。ProSegment 是一个使用 C# 编程语言实现的中文分词工具,它以其简洁的设计和高效的效果...

    fenci.rar_fenci _fenci.rar_分词程序

    《Java版分词程序解析与应用》 在信息爆炸的时代,文本处理技术是不可或缺的一环,其中分词作为基础步骤,对于信息检索、自然语言处理等领域尤为重要。本篇将深入探讨一个基于Java实现的分词程序,即"**fenci.rar**...

    最新逆向最大匹配分词算法 盘古分词 分词算法 中文分词 源码

    在提供的压缩包文件中,包含了各种与分词相关的源码,例如"zt_逆向最大匹配分词算法"可能是实现逆向最大匹配算法的具体代码,"秒盘古分词"可能是指快速版本的盘古分词程序,"中文分词"和"英文分词"源码分别针对中文...

Global site tag (gtag.js) - Google Analytics