NLP 文本分词 java类方法,及opennlp 示例

NLP文本分词Java类及opennlp示例

文章中需要的Apache openNlp jar包:openNlp下载:https://opennlp.apache.org/cgi-bin/download.cgi

其他涉及的jar都是java基础类包

package com.npl.demo.utils;

import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader;
import java.text.BreakIterator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.regex.Pattern;

import opennlp.tools.tokenize.SimpleTokenizer;
import opennlp.tools.tokenize.WhitespaceTokenizer;


/**  
 * Filename:    NlpTokenization.java  
 * Description:   
 * Copyright:   Copyright (c) 2019 All Rights Reserved.
 * @author:     wangk
 * @version:    1.0
 * Create at:   2019年5月5日 下午4:28:56  
 *  
 * Modification History:  
 * Date         Author      Version     Description  
 * ------------------------------------------------------------------  
 * 2019年5月5日      wangk      1.0         1.0 Version  
 *
*/
public class NlpTokenization {
	static String paragraph =  "Let's The first sentence. The second sentence. Let's ";
	static String[] sentences = {
			"Tim was agood neighbor. Perhaps not as good Bob "+
			"Haywood, but stille pretty good. Of course Mr. Adam "+
					"took the cake!"
	};
	
	static String chineseLanguage = "时代的碰撞|中国古典民乐与流行的相遇"; //中文可以进行正则匹配每隔字中间加一个空格,就可以进行分词了
	//代码如下
	/*String regex = "(.{1})";
	text = text.replaceAll (regex, "$1 ");*/
	
	
	
	public sta
<think>嗯,用户之前让我介绍过Java NLP和软件操作自动化,现在他们想要一个使用OpenNLP分词示例代码。首先,我需要确认用户的需求。他们可能刚开始学习自然语言处理,想通过实际的代码示例来理解分词的过程。 用户之前的问题是关于自动化操作,现在转向具体的NLP任务,可能是在项目中需要处理文本数据。OpenNLP是一个常用的库,所以提供示例代码会帮助他们快速上手。用户可能不太熟悉如何配置依赖和编写基本的分词步骤,所以需要详细说明。 我需要检查自己关于OpenNLP的知识,确保分词模型的加载和使用方法正确。记得示例代码需要包括模型文件的下载路径,因为OpenNLP需要预训练的模型。同时,要提醒用户添加Maven依赖,或者手动导入库,否则代码无法运行。 另外,用户可能需要了解如何处理异常,比如模型文件找不到的情况。所以在代码中加入try-catch块是必要的。示例文本应该简单明了,展示分词的基本效果,比如输入一个英文句子,输出分词后的结果。 还要注意代码的注释,解释每一步的作用,这样用户更容易理解。例如,加载模型、创建分词器、处理句子,然后输出结果。可能还需要提到中文分词的不同,如果有的话,但用户的问题可能主要是针对英文,但可以简要提到中文需要不同的模型。 最后,确保代码格式正确,避免语法错误。同时,提醒用户注意模型路径的正确性,以及可能的性能优化点,比如复用Tokenizer实例来提高效率。这些细节能帮助用户避免常见的陷阱,提升他们的开发体验。以下</think>是一个使用 **Apache OpenNLP** 实现分词(Tokenization)的Java示例代码,包含详细注释和步骤说明: --- ### **1. 添加依赖** 首先在项目的 `pom.xml` 中添加 OpenNLP 依赖: ```xml <dependency> <groupId>org.apache.opennlp</groupId> <artifactId>opennlp-tools</artifactId> <version>2.3.0</version> </dependency> ``` --- ### **2. 示例代码** ```java import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import java.io.FileInputStream; import java.io.InputStream; public class OpenNLPTokenizerExample { public static void main(String[] args) { try { // 1. 加载预训练的分词模型(需提前下载模型文件) // 模型下载地址:https://opennlp.apache.org/models.html InputStream modelIn = new FileInputStream("en-token.bin"); // 替换为你的模型路径 TokenizerModel model = new TokenizerModel(modelIn); // 2. 创建分词器实例 TokenizerME tokenizer = new TokenizerME(model); // 3. 待分词文本 String text = "Hello world! This is a sample sentence for OpenNLP tokenization."; // 4. 执行分词 String[] tokens = tokenizer.tokenize(text); // 5. 输出结果 System.out.println("原始文本:" + text); System.out.println("分词结果:"); for (String token : tokens) { System.out.println(token); } // 关闭资源 modelIn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` --- ### **3. 输出结果** 运行代码后,输出如下: ``` 原始文本:Hello world! This is a sample sentence for OpenNLP tokenization. 分词结果: Hello world ! This is a sample sentence for OpenNLP tokenization . ``` --- ### **4. 关键说明** 1. **模型下载**: 需要从 [Apache OpenNLP 模型库](https://opennlp.apache.org/models.html) 下载 `en-token.bin`(英文分词模型),或使用中文模型 `zh-token.bin`(需替换模型路径)。 2. **中文分词示例**: 若需处理中文,需下载中文模型并修改代码: ```java InputStream modelIn = new FileInputStream("zh-token.bin"); String text = "欢迎使用Apache OpenNLP进行中文分词!"; ``` 3. **异常处理**: 实际应用中需处理 `FileNotFoundException` 和 `IOException`,确保模型文件路径正确。 4. **性能优化**: `TokenizerME` 是线程安全的,可复用实例以提高效率。 --- ### **5. 扩展功能** - **概率获取**:通过 `tokenizer.tokenizePos(text)` 可获取每个分词的置信度。 - **自定义训练**:使用自有语料库训练定制化分词模型(需调用 OpenNLP 训练 API)。 通过这段代码,你可以快速实现基础的自然语言分词功能,适用于后续的词性标注、实体识别等任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值