这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记
1.分词
三种模式
- 精确模式,试图将句子最精确地切开,适合文本分析;
- 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
接受参数
- 需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
- cut_all:是否使用全模式,默认值为
False(jieba.cut_for_search不能接受) - HMM:用来控制是否使用 HMM 模型,默认值为
True
# 全匹配
seg_list = jieba.cut("今天哪里都没去,在家里睡了一天", cut_all=True)
print(list(seg_list)) # ['今天', '哪里', '都', '没去', '', '', '在家', '家里', '睡', '了', '一天']
# 精确匹配 默认模式
seg_list = jieba.cut("今天哪里都没去,在家里睡了一天", cut_all=False)
print(list(seg_list)) # ['今天', '哪里', '都', '没', '去', ',', '在', '家里', '睡', '了', '一天']
# 搜索引擎模式
seg_list = jieba.cut_for_search("今天哪里都没去,在家里睡了一天")
print(list(seg_list)) # ['今天', '哪里', '都', '没', '去', ',', '在', '家里', '睡', '了', '一天']
2.自定义字典
开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。用法: jieba.load_userdict(dict_path)
jieba.add_word():向自定义字典中添加词语
3.关键词提取
可以基于 TF-IDF 算法进行关键词提取,
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
- sentence 为待提取的文本
- topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
- withWeight 为是否一并返回关键词权重值,默认值为 False
- allowPOS 仅包括指定词性的词,默认值为空,即不筛选
- jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件
也可以使用 jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件。
import jieba.analyse
# 使用tf-idf算法提取关键词
tags = jieba.analyse.extract_tags(t2, topK=20)
print(tags)
# 使用textrank算法提取关键词
tags2 = jieba.analyse.textrank(t2, topK=20)
print(tags2)
4.go语言调用
import (
"github.com/wangbin/jiebago"
)
func (t *Tokenizer) Cut(text string) []string {
//不区分大小写
text = strings.ToLower(text)
//移除所有的标点符号
text = utils.RemovePunctuation(text)
//移除所有的空格
text = utils.RemoveSpace(text)
var wordMap = make(map[string]int)
resultChan := t.seg.CutForSearch(text, true)
for {
w, ok := <-resultChan
if !ok {
break
}
_, found := wordMap[w]
if !found {
//去除重复的词
wordMap[w] = 1
}
}
var wordsSlice []string
for k := range wordMap {
wordsSlice = append(wordsSlice, k)
}
return wordsSlice
}