在实验室接手的第一个任务,写一个英文分词程序,要将形如: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();

/* 根据大写首字母分词 */
  while (stringTokenizer.hasMoreTokens()) {
   String token = stringTokenizer.nextToken();
   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));
    //System.out.println("识别出" + token.substring(0, index));
    token = token.substring(index);
    //System.out.println("剩余" + token);
    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.println(array[i]);
  }

/* 返回 */
  return array;
 }

一个简单的英文分词程序相关推荐

  1. Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序

    参考:https://www.cnblogs.com/jliangqiu2016/p/7642471.html Windows下编译TensorFlow1.3 C++ library及创建一个简单的T ...

  2. C++ 容器的综合应用的一个简单实例——文本查询程序

    [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例. 通过实现一个简单的文本查询程序,希望能够对C++的容器学习有更深的理解. 由 ...

  3. 如何复制java卡,使用java做一个简单的集卡程序

    使用java做一个简单的集卡程序 本次设想的是要集齐4张卡,每张卡的概率都是25%,如果每个用户集齐需要多少次才能集合完毕 public class Test { public static void ...

  4. 怎样用java写一个简单的文件复制程序

    怎样用java写一个简单的文件复制程序 代码来源:https://jingyan.baidu.com/article/c35dbcb0d6f1398916fcbc07.html package Num ...

  5. hosts多个ip对应一个主机名_一个简单的Web应用程序,用作连接到ssh服务器的ssh客户端...

    WebSSH 一个简单的Web应用程序,用作连接到ssh服务器的ssh客户端.它是用Python编写的,基于tornado,paramiko和xterm.js. 特征 支持SSH密码验证,包括空密码. ...

  6. iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

    iOS开发UI篇-使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: 1 //2 // YY ...

  7. UNIX网络编程笔记(2):一个简单的时间获取程序

    这一讲通过一个简单的时间获取程序简单介绍套接字编程. 1.套接字API 1.1.套接字地址结构 上一讲中介绍了TCP的一些内容,知道了一个套接字对唯一标识了网络中的一个TCP连接,而一个套接字标识了一 ...

  8. 一个简单的录音软件程序代码【C++】

    一个简单的录音软件程序代码[C++]今天的院内绿草茵茵的 录音软件,岁月一去不回返,顽强拼搏,我将来的录音软件家是一栋三层的别墅,因为小树给我留下的是顽强拼搏,你见状,可你的眼睛好像在说,那盛夏的梧桐 ...

  9. 如何构建一个简单的语音识别应用程序

    "In this 10-year time frame, I believe that we'll not only be using the keyboard and the mouse ...

最新文章

  1. iOS开发网络篇—HTTP协议
  2. java安装_快速提示:Java中的ISO 8601持续时间
  3. Linux实战教学笔记45:NoSQL数据库之redis持久化存储(一)
  4. 不使用配置文件动态注册HttpModule
  5. 微信支付 - 构建商户端支付成功的回调接口
  6. OpenJTAG调试S3C2440裸板程序
  7. 新手学习c语言的方法,学习C语言方法“新手必看”
  8. 【华为云技术分享】快速理解spark-on-k8s中的external-shuffle-service
  9. 2021年Q2小米手机销量超苹果跻身全球第二 雷军:新的里程碑
  10. python 二叉树中所有距离为k的节点_Redis:从应用到底层,一文帮你搞定
  11. bzoj 1072: [SCOI2007]排列perm(状压dp)
  12. bios 微星click_微星主板CLICK BIOS II BIOS设置软件下载_微星主板CLICK BIOS II BIOS设置软件官方下载-太平洋下载中心...
  13. python拆分excel列_python自动化办公:实现按照一列内容拆分excel
  14. 查询论文SCI/EI检索及引用报告
  15. android仿饿了么,Android 仿饿了么下拉Dialog
  16. linux命令中ll和ls的区别
  17. 公司邮箱怎么用微信收邮件?企业微信邮箱原来这么方便!
  18. 我的MATLAB学习之路
  19. android学习笔记之磁场传感器制做指南针
  20. Packet Data Convergence Protocol (PDCP)阅读笔记

热门文章

  1. Linux下Ngnix的安装与配置
  2. 停车场画简易停车位图,简单的停车场地图怎么画图
  3. 【记录安装】Mac电脑,安装monkeyrunner,及其遇到的相应问题
  4. Android从零单排--常见设计模式
  5. Resumable.js
  6. MicroSD卡与SD卡
  7. 腾讯社区开放平台.NET SDK在Mono下运行
  8. JavaScript Emoji 表情库_js 类似于qq微信的表情库
  9. Python量化交易基础讲堂-可视化随机漫步轨迹
  10. C语言下拉式菜单做出字体小,C语言下拉菜单设计-带源代码.ppt