作者:Leeeeeee7777777 | 来源:互联网 | 2024-10-25 16:52
本文通过复旦大学自然语言处理课程中的一个具体案例,详细解析了中文词汇分割技术的实现方法。该案例利用Java编程语言,结合词典和算法模型,展示了如何高效地进行中文文本的词汇分割,为相关研究和应用提供了宝贵的参考。
package edu.fudan.example.nlp;
import java.util.ArrayList;
import edu.fudan.ml.types.Dictionary;
import edu.fudan.nlp.cn.tag.CWSTagger;
/**
* 分词使用示例
* @author xpqiu
*
*/
public class ChineseWordSegmentation {
/**
* 主程序
* @param args
* @throws IOException
* @throws
*/
public static void main(String[] args) throws Exception {
//创建文件模型,CWTagger from AbstractTagger--为 Linear cl 赋值;
//Linear 为线性分类器
CWSTagger tag = new CWSTagger("./models/seg.m");
System.out.println("不使用词典的分词:");
String str = " 媒体计算研究所成立了, 高级数据挖掘(data mining)很难。 ";
String s = tag.tag(str);
System.out.println(s);
//设置英文预处理
tag.setEnFilter(true);
s = tag.tag(str);
System.out.println(s);
tag.setEnFilter(false);
//注:词典里只能有中文字符,英文与数字不支持
System.out.println("\n设置临时词典:");
ArrayList al = new ArrayList();
al.add("数据挖掘");
//al.add("媒体计算研究所");
Dictionary dict = new Dictionary(false);
dict.addSegDict(al);
tag.setDictionary(dict);
s = tag.tag(str);
System.out.println(s);
CWSTagger tag2 = new CWSTagger("./models/seg.m", new Dictionary("./models/dict.txt"));
System.out.println("\n使用词典的分词:");
String str2 = "媒体计算研究所成立了, 高级数据挖掘很难";
String s2 = tag2.tag(str2);
System.out.println(s2);
//使用不严格的词典
CWSTagger tag3 = new CWSTagger("./models/seg.m", new Dictionary("./models/dict_ambiguity.txt",true));
//尽量满足词典,比如词典中有“成立”“成立了”和“了”, 会使用Viterbi决定更合理的输出
System.out.println("\n使用不严格的词典的分词:");
String str3 = "媒体计算研究所成立了, 高级数据挖掘很难";
String s3 = tag3.tag(str3);
System.out.println(s3);
str3 = "我送给力学系的同学一个玩具 (送给给力力学力学系都在词典中)";
s3 = tag3.tag(str3);
System.out.println(s3);
System.out.println("\n处理文件:");
String s4 = tag.tagFile("./example-data/data-tag.txt");
System.out.println(s4);
//tag3.tagFile("./example-data/data-tag.txt","./example-data/data-tag1.txt");
}
}
结果如下:
不使用词典的分词:
媒体 计算 研究所 成立 了 , 高级 数据 挖掘 ( data mining ) 很 难 。
媒体 计算 研究所 成立 了 , 高级 数据 挖掘 ( data mining ) 很 难 。
设置临时词典:
媒体 计算 研究所 成立 了 , 高级 数据挖掘 ( data mining ) 很 难 。
使用词典的分词:
媒体计算研究所 成立 了 , 高级 数据挖掘 很 难
使用不严格的词典的分词:
媒体计算研究所 成立 了 , 高级 数据挖掘 很 难
我 送给 力学系 的 同学 一 个 玩 具 ( 送给 给力 力学 力学系 都 在 词典 中 )
处理文件:
《 菲律宾 每日问询者报 》 5月 16日 报道 说 , 菲律宾 渔业 与 水产 资源局 当天 表示 , 将 从 5月 16日 开始 禁止 菲律宾 渔民 前往 黄岩岛 捕鱼 , 禁渔令 将 持续 两 个 月 。 菲律宾 渔业 与 水产 资源局 局长 阿西斯·皮瑞斯 表示 , 这 一 行动 和 中国 的 休渔令 在 同 一 天 生效 , 不过 , “ 我们 仍 将 在 禁渔令 期间 在 那里 ( 指 黄岩岛 海域 ) 进行 科学 研究 ” 。 与此同时 , 菲律宾 总统 阿基诺 16日 表示 , 已经 任命 了 两 名 “ 总统 特使 ” 前往 中国 。
《 菲律宾 星报 》 的 评论 认为 , 中国 的 休渔令 可能 成为 缓和 形势 的 一 种 方式 。 该 报 在 15日 的 评论 中 表示 , 菲 政府 在 黄岩岛 事件 中 表现 出 令 人 难以置信 的 僵硬 , 将 导致 形势 陷入 “ 死结 ” 。 评论 称 , 菲律宾 的 东盟 伙伴 认为 菲律宾 无视 东盟 的 共识 搞 “ 单飞 ” , 并 采取 战斗性 的 姿态 对待 中国 。 这 导致 东盟 和 菲律宾 保持 相当 的 距离 。 文章 还 对 菲律宾 总统 至今 仍 未 确定 驻华 大使 的 提名 提出 了 严厉 批评 , 认为 阿基诺 在 这 一 重要 问题 上 行动 迟缓 得 让 人 震惊 , 因为 “ 现在 我们 比 任何 时候 都 迫切 需要 一 位 驻华 大使 在 北京 处理 对 华 关系 ” 。
在 马尼拉 街头 , 目前 很 难 看到 中国 游客 的 身影 , 不过 当地 市民 普遍 认为 菲 中 的 紧张 关系 目前 正在 逐步 缓解 。 接受 本 报 记者 采访 的 市民 多数 对 黄岩岛 事件 的 和平 解决 抱有 信心 , 一 位 名叫 何塞·马林诺 的 市民 对 记者 说 , 中国 实施 休渔令 是 一 个 积极 的 信号 , 他 相信 随着 菲律宾 也 宣布 自己 的 休渔 措施 后 , 两 国 的 外交 争端 将 会 结束 , 事情 将 会 回归 正常 。
菲律宾 外长 德尔罗萨里奥 16日 发表 演讲 时 声称 , 菲 愿意 将 黄岩岛 事件 抛诸脑后 , 并且 期待 着 与 中国 发展 积极 的 关系 。 他 说 , 菲律宾 政府 相信 通过 持续 磋商 能够 和平 解决 危机 。 他 强调 对 两 国 最终 能 找到 解决 问题 的 办法 是 “ 乐观 的 ” , 并 澄清 说 , 媒体 上 一些 所谓 “ 中国 对 菲律宾 实施 经济 制裁 ” 的 报道 “ 并不 准确 ” 。
德尔罗萨里奥 说 , 中国 是 菲律宾 的 长期 伙伴 和 近邻 , “ 我们 从 与 中国 的 关系 中 获益 , 如同 中国 也 从 同 菲律宾 的 关系 中 获益 一样 ” 。
不过 , 菲律宾 媒体 仍然 在 继续 炒作 黄岩岛 事件 。 菲律宾 主流 媒体 16日 都 对 美军 攻击型 核潜艇 停泊 菲律宾 苏比克湾 进行 了 报道 , 并 刻意 将 这 一 事件 同 黄岩岛 事件 联系 起来 。
《 菲律宾 每日问询者报 》 网站 16日 援引 法新社 的 报道 称 , 阿基诺 当天 表示 , 菲 正在 考虑 从 美国 以外 购买 战斗机 。 阿基诺 称 , 菲 政府 原 计划 购入 美国 二手 的 F— 16 战机 , 但 考虑 到 后期 维护 费用 高昂 , 政府 正在 考虑 其他 选择 。
《 菲律宾 每日问询者报 》 16日 的 报道 称 , 德尔罗萨里奥 在 接受 该 报 采访 时 表示 , 计划 将 菲律宾 同 中国 的 争端 提交 即将 召开 的 东盟 — 美国 对话 会议 。 菲 外交部 表示 , 会议 将 在 本 月 20日 至 22日 在 菲律宾 召开 , 会议 “ 将 就 地区 和 国际 形势 交换 意见 ” 。
菲律宾 国家 青年 组织 批评 说 , “ 菲律宾 是 美国 在 东盟 国家 里 的 ‘ 内应 ’ , 它 在 东盟 中 代表 美国 的 利益 ” 。 该 组织 秘书长 雷纳多·拉亚斯 表示 : “ 菲律宾 将 黄岩岛 事件 提交 东盟 — 美国 对话 会议 , 这 和 增加 在 东南亚 的 军事 存在 一样 符合 美国 的 利益 。 美国 可能 会 淡化 在 中菲 争端 中 的 角色 , 但 同时 也 在 利用 争端 寻求 在 亚太 地区 更 多 的 存在 。 这 将 使 形势 更加 复杂化 。 ”
Java 平台 和 语言 最 开始 只 是 SUN 公司 在 1990年 12月 开始 研究 的 一 个 内部 项目 。 SUN 公司 的
一 个 叫做 帕特里克•诺顿 的 工程师 被 自己 开发 的 C 和 C 语言 编译器 搞 得 焦头烂额 , 因为 其
中 的 API 极其 难用 。 帕特里克 决定 改用 NeXT , 同时 他 也 获得 了 研究 公司 的 一 个 叫做
“ Stealth 计划 ” 的 项目 的 机会 。
“ Stealth 计划 ” 后来 改名 为 “ Green 计划 ” , James Gosling ( 詹姆斯•高斯林 ) 和 麦克•舍
林丹 也 加入 了 帕特里克 的 工作 小组 。 他们 和 其他 几 个 工程师 一起 在 加利福尼亚州 门罗 帕
克市 沙丘路 的 一 个 小 工作室 里面 研究 开发 新 技术 , 瞄准 下 一 代 智能 家电 ( 如 微波炉 ) 的
程序 设计 , SUN 公司 预料 未来 科技 将 在 家用 电器 领域 大显 身手 。 团队 最初 考虑 使用 C 语
言 , 但是 很多 成员 包括 SUN 的 首席 科学家 比尔•乔 伊 , 发现 C 和 可 用 的 API 在 某些 方面 存
在 很 大 问题 。
工作 小组 使用 的 是 内嵌 类型 平台 , 可以 用 的 资源 极其 有限 。 很多 成员 发现 C 太 复杂 以 至
很多 开发者 经常 错误 使用 。 他们 发现 C 缺 少 垃圾 回收 系统 , 还 有 可 移植 的 安全性 、 分布
程序 设计 、 和 多 线程 功能 。 最后 , 他们 想要 一 种 易于 移植 到 各 种 设备 上 的 平台 。
package edu.fudan.nlp.cn;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import edu.fudan.util.MyStrings;
/**
* 简单中文文本的断句
* @author xpqiu
* @author modifed by gucy 2013-6-30
* @version 1.0
* @since FudanNLP 1.5
*/
public class Sentenizer {
private static char[] puncs = new char[] { '。', '?', '!',';' };
/**
* 设置标点符号
* @param puncs
* @return
*/
public static void setPuncs(char[] puncs) {
Sentenizer.puncs = puncs;
}
/**
* 根据标点符号进行断句
* @param sent
* @return String[]
*
*/
public static String[] split(String sent) {
//记录符号在串中的位置index,放入ArrayList中;
List plist = new ArrayList();
int p = 0;
for (int i = 0; i p = sent.indexOf(puncs[i]);
while (p != -1) {
plist.add(p);
p = sent.indexOf(puncs[i], p + 1);
}
}
Collections.sort(plist);
if (!plist.isEmpty()) {
p = plist.get(plist.size() - 1);
if (p plist.add(sent.length() - 1);
}else{
plist.add(sent.length() - 1);
}
//在ArrayList的末尾人为添加一个“符号”,以便做简单的分句分割
String[] ret = new String[plist.size()];
p = 0;
for (int i = 0; i ret[i] = sent.substring(p, plist.get(i) + 1);
p = plist.get(i) + 1;
}
plist.clear();
//提取子串,返回分句
return ret;
}
}