数据处理JIEBA使用 | 青训营笔记

182 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记

1.分词

三种模式

  1. 精确模式,试图将句子最精确地切开,适合文本分析;
  2. 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  3. 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

接受参数

  1. 需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
  2. cut_all:是否使用全模式,默认值为 False(jieba.cut_for_search不能接受)
  3. 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=())

  1. sentence 为待提取的文本
  2. topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
  3. withWeight 为是否一并返回关键词权重值,默认值为 False
  4. allowPOS 仅包括指定词性的词,默认值为空,即不筛选
  5. 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
}