当前位置: 首页 > 工具软件 > FudanNLP > 使用案例 >

FudanNLP学习实例——中文分词部分

墨财
2023-12-01
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<String> al = new ArrayList<String>();
		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<Integer> plist = new ArrayList<Integer>();
		int p = 0;
		for (int i = 0; i < puncs.length; 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 < sent.length() - 1)
				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 < plist.size(); i++) {
			ret[i] = sent.substring(p, plist.get(i) + 1);
			p = plist.get(i) + 1;
		}
		plist.clear();
//提取子串,返回分句
		return ret;
	}
}




 类似资料: