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 static void main(String[] args) {NlpTokenization to = new NlpTokenization();//to.scanner(paragraph);//to.split(chineseLanguage);//to.breakIterator(paragraph);//to.streamTokenizer(paragraph);//to.stringTokenizer(chineseLanguage);//to.textSplit(); //测试分词 性能to.openNlpSimpleTokenizer(chineseLanguage);}/*** @Description: /默认使用空格作为分隔符 java类 Scanner方法 * @author wangk* @param text* @return * @date: 2019年5月5日 下午1:51:38 */public List scanner(String text) {Scanner scanner = new Scanner(text);scanner.useDelimiter("[ ,.]");//设置基于字符串或模式的分隔符 --设置分隔符为空格,逗号,句号 使用正则设置//scanner.reset();//分隔符复位为空格List<String> list = new ArrayList<>();while(scanner.hasNext()) {String token = scanner.next();list.add(token);}for(String token : list) {System.out.println(token);}return null;}/*** @Description: 文本分词 java类 split方法 * @author wangk* @param text* @return * @date: 2019年5月5日 下午1:51:30 */public List split(String text) {String tokens[] = text.split("\\s+");for (String token : tokens) {System.out.println(token);}return null;}/*** @Description: 文本分词 java类 BreakIterator方法 该类可以获取各种边界* @author wangk* @param text* @return * @date: 2019年5月5日 下午1:51:19 */public List breakIterator(String text) {BreakIterator wordIterator = BreakIterator.getWordInstance();wordIterator.setText(text);int boundary = wordIterator.first();while(boundary != BreakIterator.DONE) {//done为最后一个边界int begin = boundary;System.out.print(boundary+"-");boundary = wordIterator.next();int end = boundary;if(end == BreakIterator.DONE) break;System.out.println(boundary+"["+ text.substring(begin, end)+"]");}return null;}/*** @Description: 文本分词 java类 StreamTokenizer方法 通常基于一个文件创建,对文件中的文本分词* @author wangk* @param text* @return * @date: 2019年5月5日 下午1:50:37 */public List streamTokenizer(String text) {StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(text));//对于分词器会将单引号字符和双引号字符表示引用文本,由于没有对应的引号,故字符串的其他部分被忽略了//使用ordinaryChar方法制定那些字符串应为普通字符tokenizer.ordinaryChar('\'');tokenizer.ordinaryChar(',');boolean isEOF = false; //用来终止循环 while(!isEOF) {try {int token = tokenizer.nextToken(); //返回词项的类型switch(token) {case StreamTokenizer.TT_EOF: //static int 流结束的一个常数isEOF = true;break;case StreamTokenizer.TT_EOL: //static int 行结束的一个常数break;case StreamTokenizer.TT_NUMBER: //static int 读取词项的数量System.out.println(tokenizer.nval); //double 如果当前词项是一个单词则存有一个数字break;case StreamTokenizer.TT_WORD: //static int 指明一个单词词项的常数System.out.println(tokenizer.sval); //String 如果当前词项是一个单词则存有这个词项break;default:System.out.println((char) token);}} catch (IOException e) {e.printStackTrace();}}return null;}/*** @Description: 文本分词 java类 stringTokenizer方法 可以处理热恩和来源的字符串 * @author wangk* @param text* @return * @date: 2019年5月5日 下午3:05:36 */public List stringTokenizer(String text) {StringTokenizer st = new StringTokenizer(text);while(st.hasMoreTokens()) {System.out.println(st.nextToken());}return null;}/*** @Description: 测试分词 性能* @author wangk * @date: 2019年5月5日 下午4:28:59 */public void textSplit() {StringBuilder sb = new StringBuilder();for (int i = 100000; i < 100000 + 60; i++)sb.append(i).append(' ');String sample = sb.toString();int runs = 100000;for (int i = 0; i < 5; i++) {{long start = System.nanoTime();for (int r = 0; r < runs; r++) {StringTokenizer st = new StringTokenizer(sample);List<String> list = new ArrayList<String>();while (st.hasMoreTokens())list.add(st.nextToken());}long time = System.nanoTime() - start;System.out.printf("StringTokenizer took an average of %.1f us%n", time / runs / 1000.0);}{long start = System.nanoTime();Pattern spacePattern = Pattern.compile(" ");for (int r = 0; r < runs; r++) {List<String> list = Arrays.asList(spacePattern.split(sample, 0));}long time = System.nanoTime() - start;System.out.printf("Pattern.split took an average of %.1f us%n", time / runs / 1000.0);}{long start = System.nanoTime();for (int r = 0; r < runs; r++) {List<String> list = new ArrayList<String>();int pos = 0, end;while ((end = sample.indexOf(' ', pos)) >= 0) {list.add(sample.substring(pos, end));pos = end + 1;}}long time = System.nanoTime() - start;System.out.printf("indexOf loop took an average of %.1f us%n", time / runs / 1000.0);}}}/*** @Description: 英文标点也被作为单独项 openNlp 方法SimpleTokenizer* @author wangk* @param text* @return * @date: 2019年5月6日 上午10:36:38 */public List openNlpSimpleTokenizer(String text) {SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE;String regex = "(.{1})";text = text.replaceAll (regex, "$1 ");String tokens[] = simpleTokenizer.tokenize(text);for(String token : tokens) {System.out.println(token);}return null;}/*** @Description: 空格作为分隔符 openNlp 方法 WhitespaceTokenizer* @author wangk* @param text* @return * @date: 2019年5月6日 上午10:36:38 */public List openNlpWhitespaceTokenizer(String text) {WhitespaceTokenizer simpleTokenizer = WhitespaceTokenizer.INSTANCE;String tokens[] = simpleTokenizer.tokenize(text);for(String token : tokens) {System.out.println(token);}return null;}}
NLP 文本分词 java类方法,及opennlp 示例相关推荐
- 自然语言处理NLP中文分词,词性标注,关键词提取和文本摘要
NLP相关工具包的介绍 1.1 jieba "结巴"中文分词,理念是做最好的 Python 中文分词组件. 支持三种分词模式: (1)精确模式,试图将句子最精确地切开,适合文本分析 ...
- NLP文本预处理:步骤、示例 | 附github源码
点击关注我哦 一篇文章带你了解NLP文本预处理:步骤.示例 | 附github源码 注:关注[小白玩转Python]公众号,后台回复[NLP文本预处理],可以获取完整源码以及项目所需数据集. 文本数据 ...
- NLP实现文本分词+在线词云实现工具
实现文本分词+在线词云实现工具 词云是NLP中比较简单而且效果较好的一种表达方式,说到可视化,R语言当仍不让,可见R语言︱文本挖掘--词云wordcloud2包 当然用代码写词云还是比较费劲的,网上也 ...
- NLP之文本分词综述
文本分词综述 文本分词 介绍 应用场景 常见算法 常用的分词库 代码demo jieba分词: 特点 流程 demo NLTK分词: 特点 流程 demo spaCy分词: 特点 流程 demo St ...
- mysql使用结巴语句_结巴分词 java 高性能实现,是 huaban jieba 速度的 2倍
Segment Segment 是基于结巴分词词库实现的更加灵活,高性能的 java 分词实现. 创作目的 分词是做 NLP 相关工作,非常基础的一项功能. jieba-analysis 作为一款非常 ...
- 斯坦福NLP名课带学详解 | CS224n 第15讲 - NLP文本生成任务(NLP通关指南·完结)
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://ww ...
- NLP - 文本向量化
文章目录 本质 词袋模型 原理 特点 词空间模型 NNLM 模型 RNNLM C&W 模型 C&W & NNLM CBOW 和 Skip-gram 模型 CBOW 模型 改进: ...
- 【数据挖掘】NLP中文分词概述
在大数据时代,信息量越来越大,给你一篇百万文字的文章,你保证你有耐心慢慢看完吗?如果是热点新闻,我们当然会希望通过一段简洁明了的文字来概述整个文章,这时候就需要提取文章的关键字:每当我们遇到不会的问题 ...
- nlp文本数据增强_如何使用Texthero为您的NLP项目准备基于文本的数据集
nlp文本数据增强 Natural Language Processing (NLP) is one of the most important fields of study and researc ...
- 第六课.NLP文本分类任务
第六课目录 NLP文本分类简介 IMDB数据集准备 设置随机种子 下载IMDB并划分数据集 构建词汇表 使用torchtext生成batch WordAveraging 模型定义 加载由glove.6 ...
最新文章
- 任务调度器leetcode621
- build muduo网络库undefined reference to问题
- Scala函数的可变参数和参数默认值及带名参数
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?...
- reserve和resize - 力为的技术博客 - C++博客
- COM_TEXT_GET_SWITCH
- 转 C#对多个集合和数组的操作(合并,去重,判断)
- Android在子线程里使用Toast报错Can't toast on a thread that has not called Looper.prepare()
- 学java要算法吗_学习java不可不知的几种算法
- 窗口,视图,视图控制器和UIKit基础-IOS开发
- 海量数据下的存储技术,哪些模式靠得住?
- centos7 开机启动文件路径_centos7定时运行python脚本
- 设计模式原则之五:里氏置换原则
- 一次历时两周的实习生笔试
- mysql 核对_mysql索引 (校验规则引发的血案)
- 快解析 : 管家婆A8远程访问解决方案
- 如何把google日历添加到桌面
- 微信小程序 图片上传预览删除
- win10 office提示‘VBE6EXT.OLB不能被加载‘怎么办
- Python实现四子棋(四连环)游戏