jieba java_【NLP】【一】中文分词之jieba

声明:本文参考jieba官方文档而成,官方链接:https://github.com/fxsjy/jieba

【一】jieba安装

pip install jieba

【二】jieba简介

简介可见jieba官方说明:https://pypi.org/project/jieba/

总而言之,jieba用于中文分词,支持的文本编码格式为utf-8,支持的功能包括:中文分词、关键字提取、词性标注

整体功能如下图:

jieba java_【NLP】【一】中文分词之jieba_第1张图片

【三】结巴使用之分词

1. 使用精确模式

# -*- coding:utf-8 -*-

import jieba

sentence = "我爱北京天安门"

seg = jieba.cut(sentence=sentence)

print("/".join(seg))

结果如下:

我/爱/北京/天安门

2. 使用全模式

import jieba

sentence = "我爱北京天安门"

seg = jieba.cut(sentence=sentence,cut_all=True)

print("/".join(seg))

结果如下:

我/爱/北京/天安/天安门

3.使用搜索模式

# -*- coding:utf-8 -*-

import jieba

sentence = "我爱北京天安门"

seg = jieba.cut_for_search(sentence=sentence)

print("/".join(seg))

结果如下:

我/爱/北京/天安/天安门

关于三种模式的区别,可见官方描述:

f67cdda488ae3f0174ae2ca315c6c710.png

4. 分词接口详解

4.1 cut接口,该接口接受三个参数,重点关注一下第一个参数:要求句子编译格式为unicode编码。所以,如果是GBK编码,需要先转换为utf-8接口的编码格式。

cut(self, sentence, cut_all=False, HMM=True)

- sentence: The str(unicode) to be segmented.

- cut_all: Model type. True for full pattern, False for accurate pattern.

- HMM: Whether to use the Hidden Markov Model.

当我们不知道文档的编码格式时,可以采用如下代码:

import chardet

with open("xxx.txt",'rb') as f:

data = f.read()

print(chardet.detect(data))

输出结果为:

{'confidence': 0.99, 'language': 'Chinese', 'encoding': 'GB2312'}

4.2 cut_for_search接口

cut_for_search(self, sentence, HMM=True)

4.3 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list

print(jieba.lcut(sentence))

print(jieba.lcut_for_search(sentence))

结果如下:

['我', '爱', '北京', '天安门']

['我', '爱', '北京', '天安', '天安门']

【四】自定义词典

1. 先看看jieba自带的词典长啥样

jieba/dict.txt

T恤 4 n

A座 3 n

A股 3 n

A型 3 n

A轮 3 n

可以看出,jieba的词典组成格式为:一行一个词语,词语 词频 词性

据jieba官方介绍:

词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒

2. 自定一一个字典

我 4 n

北京 3 n

天安门

3. 使用自定义词典

jieba.load_userdict(r"D:\jieba-0.39\my_dict.txt")

print(jieba.lcut(sentence))

print(jieba.lcut_for_search(sentence))

结果如下:

['我', '爱', '北京', '天安门']

['我', '爱', '北京', '天安', '天安门']

【五】调整词典

jieba支持动态调整已经加载的词典

有两种方法

1. 将新词加入词典

2. 调整词典中的某个词的词频

使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。

使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。

【六】关键词提取

jieba分词支持两种关键词提取算法:TF-IDF、TextRank。这两种算法会在后面的文章结合jieba源码进行分析。这里先看看如何使用。

1. 基于TF-IDF进行关键词提取

print(','.join(jieba.analyse.extract_tags(sentence,topK=2)))

结果如下:

天安门,北京

1.1 接口详解 extract_tags

extract_tags(self, sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False)

sentence 为待提取的文本

topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20

withWeight 为是否一并返回关键词权重值,默认值为 False

allowPOS 仅包括指定词性的词,默认值为空,即不筛选

该接口用于基于TF-IDF提取关键词,可用于筛选指定词性的关键词,返回值可以带关键词的权重,也可以不带。

2. 依据TextRank算法进行关键词提取

print(','.join(jieba.analyse.textrank(sentence,topK=2)))

结果如下:

天安门,北京

2.1 接口详解 textrank

textrank(self, sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'), withFlag=False):

- topK: return how many top keywords. `None` for all possible words.

- withWeight: if True, return a list of (word, weight);

if False, return a list of words.

- allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v'].

if the POS of w is not in this list, it will be filtered.

- withFlag: if True, return a list of pair(word, weight) like posseg.cut

if False, return a list of words

【七】词性标注

words =jieba.posseg.cut(sentence)

for word, flag in words:

print('%s %s' % (word, flag))

结果如下:

我 r

爱 v

北京 n

天安门 ns

总结:jieba提供的中文分词、词性标注、关键字提取等功能,使用简单,安装方便。其实现不仅有python版本,还有c++ java等版本,详情可以jieba官方链接:https://github.com/fxsjy/jieba

你可能感兴趣的:(jieba,java)